1
irrKlang을 사용하여 마이크에서 오디오 입력을 받고 있습니다. 그 부분은 잘 작동하지만 .wav 파일에 출력을 저장하는 데 문제가 있습니다 ....wav 파일을 저장 한 후 오류가 발생했습니다.
웨이브 파일은 저장하는 것처럼 보이지만 재생되지 않는 것 같습니다.
private void SaveWave(string path, AudioFormat format, byte[] waveData)
{
//Play the audio for testing purposes
ss = engine0.AddSoundSourceFromPCMData(waveData, "sound", format);
engine0.Play2D(ss, true, false, false);
// write wave header
ushort formatType = 1;
ushort numChannels = (ushort)format.ChannelCount;
ulong sampleRate = (ulong)format.SampleRate;
ushort bitsPerChannel = (ushort)(format.SampleSize * 8);
ushort bytesPerSample = (ushort)format.FrameSize;
ulong bytesPerSecond = (ulong)format.BytesPerSecond;
ulong dataLen = (ulong)format.SampleDataSize;
const int fmtChunkLen = 16;
const int waveHeaderLen = 4 + 8 + fmtChunkLen + 8;
ulong totalLen = waveHeaderLen + dataLen;
///
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
byte[] riff = System.Text.Encoding.ASCII.GetBytes("RIFF");
bw.Write(riff);
bw.Write(totalLen);
byte[] fmt = System.Text.Encoding.ASCII.GetBytes("WAVEfmt ");
bw.Write(fmt);
bw.Write(fmtChunkLen);
bw.Write(formatType);
bw.Write(numChannels);
bw.Write(sampleRate);
bw.Write(bytesPerSecond);
bw.Write(bytesPerSample);
bw.Write(bitsPerChannel);
byte[] data = System.Text.Encoding.ASCII.GetBytes("data");
bw.Write(data);
bw.Write(waveData.Length);
bw.Write(waveData);
bw.Close();
fs.Close();
}
안녕하세요, 귀하의 지침에 따라 업데이트했습니다. 동일한 문제는 .wav를 저장하지만 실제로 재생되지는 않습니다. WAVEfmt의 공간이 있어야합니까? – Taurian
@Taurian 내가 제안한 편집을 시도하십시오. 이것은 작동해야합니다 –
행운, 행운을 빌어 요. 여기에 오류가 있습니다 : http://imgur.com/gjJK0lu 또한 코드를 사용하여 게시물을 업데이트합니다. – Taurian