]로 재생할 수있는 short []를 Stream으로 변환하면 WAV 파일의 원시 데이터를 나타내는 short [] 배열이됩니다. 즉, 일반적으로 포함되는 머리글 또는 바닥 글 정보는 포함되지 않습니다. 이 오디오를 재생하려면 불행히도이 짧은 [] 배열의 데이터가 Int16이며 많은 값이 255를 초과하므로 바이트로 변환 할 수 없으므로이 유형의 스트림으로 변환해야합니다. 흐름. 누구든지이 오디오 데이터를 재생할 수있는 방법을 알고 있습니까?Audio [
Q
Audio [
3
A
답변
9
당신은 바이트 배열로 다시 short 배열을 변환 할 수 있습니다
short[] sampleData = ...
byte[] byteArray = new byte[sampleData.Length*2];
Buffer.BlockCopy(sampleData , 0, byteArray, 0, byteArray.Length);
그런 다음 아래의 WaveMemoryStream
클래스를 사용하여 웨이브 스트림을 생성 할 수 있습니다 - 당신이 샘플 데이터의 웨이브 형식을 알아야합니다 대한 . 이 스트림을 WAV 파일로 저장하거나 SoundPlayer
으로 재생할 수 있습니다.
public class WaveMemoryStream : Stream
{
public override bool CanSeek { get { return false; } }
public override bool CanWrite { get { return false; } }
public override bool CanRead { get { return true; } }
public override long Length { get { return _waveStream.Length; } }
public override long Position { get { return _waveStream.Position; } set { _waveStream.Position = value; } }
private MemoryStream _waveStream;
public WaveMemoryStream(byte[] sampleData, int audioSampleRate, ushort audioBitsPerSample, ushort audioChannels)
{
_waveStream = new MemoryStream();
WriteHeader(_waveStream, sampleData.Length, audioSampleRate, audioBitsPerSample, audioChannels);
WriteSamples(_waveStream, sampleData);
_waveStream.Position = 0;
}
public void WriteHeader(Stream stream, int length, int audioSampleRate, ushort audioBitsPerSample, ushort audioChannels)
{
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(new char[4] { 'R', 'I', 'F', 'F' });
int fileSize = 36 + length;
bw.Write(fileSize);
bw.Write(new char[8] { 'W', 'A', 'V', 'E', 'f', 'm', 't', ' ' });
bw.Write((int)16);
bw.Write((short)1);
bw.Write((short)audioChannels);
bw.Write(audioSampleRate);
bw.Write((int)(audioSampleRate * ((audioBitsPerSample * audioChannels)/8)));
bw.Write((short)((audioBitsPerSample * audioChannels)/8));
bw.Write((short)audioBitsPerSample);
bw.Write(new char[4] { 'd', 'a', 't', 'a' });
bw.Write(length);
}
public void WriteSamples(Stream stream, byte[] sampleData)
{
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(sampleData, 0, sampleData.Length);
}
public override int Read(byte[] buffer, int offset, int count)
{
return _waveStream.Read(buffer, offset, count);
}
public virtual void WriteTo(Stream stream)
{
int bytesRead = 0;
byte[] buffer = new byte[8192];
do
{
bytesRead = Read(buffer, 0, buffer.Length);
stream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
stream.Flush();
}
public override void Flush()
{
_waveStream.Flush();
}
public override long Seek(long offset, SeekOrigin origin)
{
return _waveStream.Seek(offset, origin);
}
public override void SetLength(long value)
{
throw new NotImplementedException();
}
public override void Write(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
}
+0
감사합니다 ... 많은 도움이됩니다. – UNOWN301
관련 문제
- 1. Drupal Audio with audio module 또는 기타
- 2. audio on iPhone
- 3. HTML5 Audio onLoad
- 4. Wordpress Audio Player 플러그인
- 5. Audio on TouchesEnded
- 6. Core Audio AudioBuffer mData
- 7. java.lang.OutOfMemoryError on Audio Buffer
- 8. HTML5 Audio Visualizer?
- 9. android, audio filters
- 10. Core Audio - CARIngBuffer
- 11. MEDIA_ERR_SRC_NOT_SUPPORTED html5 audio woes
- 12. Dynamic Audio Generation Actionscript 3
- 13. Audio Unit에서 UI 코드 트리거링
- 14. HTTP API로 검색 Vcontakte Audio
- 15. Audio Toolbox 사운드 변경 문제
- 16. Pre-Amplify Audio OS X
- 17. <audio> 요소 자동 버퍼
- 18. Core Audio 용 빠른 UI가 필요하십니까?
- 19. MinGW에서 Core Audio 헤더가 누락 되었다면 어떻게해야합니까?
- 20. Audio Toolbox 재생은 출력 버퍼의 일부만 재생합니다.
- 21. HTML5 <audio> 태그 안드로이드
- 22. <audio> 어도비 에어 태그 사용
- 23. 도움이 필요하십니까? Buffering Audio in Blackberry?
- 24. <audio> 요소가 WordPress에서 작동하지 않습니다.
- 25. jQuery 사용하기 및 <audio>
- 26. HTML5 <audio> Firefox에서 멈추다
- 27. GData youtube video upload missing audio
- 28. 왜이 작동하지 않습니다 (javascript + audio player)
- 29. HTML5 <audio> 오디오 소스 숨김
- 30. Android Chrome에서 <audio /> 태그를 지원합니까?
"일종의"스트림이 지나치게 모호합니다. 원하는 레이아웃, 엔디안 등을 알고있는 경우 입력 => 출력 ... –