第1部分
我有一些n音訊相關的代碼n音訊WasapiLoopbackCapture間歇性的聲音
private void InitAudioOut(DateTime dtNow)
{
_pathOut = string.Format(BaseDirectory + @"\({0:HH-mm-ss dd-MM-yyyy} OUT).wav", dtNow);
_waveOut = new WasapiLoopbackCapture();
_waveOut.DataAvailable += WaveOutDataAvailable;
_waveOut.RecordingStopped += WaveOutRecordStopped;
_waveOutFileStream = new WaveFileWriter(_pathOut, _waveOut.WaveFormat);
_waveOut.StartRecording();
}
利用這種初始化錄音過程的我有followind WaveOutDataAvailable方法:
private void WaveOutDataAvailable(object sender, WaveInEventArgs e)
{
var buf= e.Buffer;
_waveOutFileStream.Write(buf, 0, buf.Length);
_waveOutFileStream.Flush();
}
聲音在生成的文件是間歇性的和緩慢的,就像在聲音塊之間存在「空白」部分,任何想法都是值得讚賞的。
的一部分,最終1
第2部分
有了這個代碼,我正在努力的WAV流轉換爲MP3流在飛行然後把它寫入到文件的另一個版本,它看起來像這樣:
private void InitAudioIn(DateTime dtNow)
{
_pathIn = string.Format(BaseDirectory + @"\({0:HH-mm-ss dd-MM-yyyy} IN).mp3", dtNow);
_waveIn = new WaveInEvent();
_waveIn.WaveFormat = new WaveFormat(44100, 2);
_waveIn.DataAvailable += WaveInDataAvailable;
_waveIn.RecordingStopped += WaveInRecordStopped;
_waveInFileStream = File.Create(_pathIn);
_waveIn.StartRecording();
}
隨着WaveInDataAvailable方法如下:
private void WaveInDataAvailable(object sender, WaveInEventArgs e)
{
var wavToMp3Buffer = ConvertWavToMp3(e.Buffer, _waveIn.WaveFormat);
_waveInFileStream.Write(wavToMp3Buffer, 0, wavToMp3Buffer.Length);
_waveInFileStream.Flush();
}
的ConvertWavToMp3方法:
public byte[] ConvertWavToMp3(byte[] wavContent, WaveFormat waveFormat)
{
using (var baseMemoryStream = new MemoryStream())
using (var wavToMp3Writer = new LameMP3FileWriter(baseMemoryStream, waveFormat, 64))
{
wavToMp3Writer.Write(wavContent, 0, wavContent.Length);
wavToMp3Writer.Flush();
return baseMemoryStream.ToArray();
}
}
,如果我不嘗試將其轉換爲MP3,只是把它寫爲WAV文件,這是絕對好的,但如果我通過ConvertWavToMp3方法試試MP3轉換然後聲音變得緩慢和間歇性,這個實現有什麼問題?
刪除Flush,按照你的建議更改了寫入方法,將文件編寫器設置爲直接LameMP3FIleWriter,結果是PERFECT,100%準確的記錄,謝謝! – HardLuck