0
我的動機是使用NAudio錄製音頻,保存爲wav文件,然後混合多個音頻並播放。爲此,我試圖無效的wav文件沒有使用naudio錄製後發現的fmt塊
private void buttonRecord_Click(object sender, EventArgs e)
{
//if (sourceList.SelectedItems.Count == 0) return;
//int deviceNumber = sourceList.SelectedItems[0].Index;
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = 0;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(0).Channels);
sourceStream1 = new NAudio.Wave.WaveIn();
sourceStream1.DeviceNumber = 1;
sourceStream1.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(1).Channels);
//NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream);
//sourceStream.StartRecording();
//waveOut.Play();
sourceStream1.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(waveIn_DataAvailable1);
writer1 = new NAudio.Wave.WaveFileWriter("D:\test.wav", sourceStream1.WaveFormat);
sourceStream1.StartRecording();
sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(waveIn_DataAvailable);
writer = new NAudio.Wave.WaveFileWriter("D:\test1.wav", sourceStream.WaveFormat);
sourceStream.StartRecording();
}
void waveIn_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
}
void waveIn_DataAvailable1(object sender, NAudio.Wave.WaveInEventArgs e)
{
writer1.WriteData(e.Buffer, 0, e.BytesRecorded);
}
private void buttonStopRecording_Click(object sender, EventArgs e)
{
if (sourceStream != null)
{
sourceStream.StopRecording();
sourceStream.Dispose();
sourceStream = null;
}
if (sourceStream1 != null)
{
sourceStream1.StopRecording();
sourceStream1.Dispose();
sourceStream1 = null;
}
}
上面的代碼可以完美記錄,但記錄的音頻沒有在Windows媒體播放器中播放,但與VLC媒體播放器的工作原理。使用代碼下面我試着混合
void Mixingfunction()
{
MixingSampleProvider mixer = new MixingSampleProvider(NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(44100, 1));
try
{
audioFileReader = new AudioFileReader(@"D:\test1.wav");
mixer.AddMixerInput((ISampleProvider)audioFileReader);
audioFileReader = new AudioFileReader(@"D:\test.wav");
mixer.AddMixerInput((ISampleProvider)audioFileReader);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
waveOut = new NAudio.Wave.DirectSoundOut();
//if (flag == true)
//{
// mixer.AddMixerInput((ISampleProvider)sineWaveProvider);
//}
//SampleToWaveProvider mixer2 = new SampleToWaveProvider((ISampleProvider)mixer);
waveOut.Init((IWaveProvider)mixer);
waveOut.Play();
}
但它給例外no FMT Chunk found
。現在我不知道要做什麼......
終於標誌着我等待回答,從你身邊貼出了很多問題,標籤Naudio。現在音頻錄製成功,但是當我嘗試使用mixsampleprovider混合音頻時,它會發出異常「所有混音器輸入必須具有相同的WaveFormat」。爲什麼? 。我試圖找到關於混合音頻的教程,但只能從你使用mixsampleprovider的一個stackoverflow答案中找到線索。 –
謝謝馬克,因爲你的naudio我的所有任務都解決了.... –