我正在尝试创建一个简单的音频 Looper 来录制我自己的歌曲。对于那些不知道音频 Looper 是什么的人,您首先录制一首歌曲的一层(假设是一段钢琴),然后开始循环播放那首歌曲,在该层之上添加一段吉他。因为我已经知道如何将两者加在一起,这不是问题。但是我想保护我每次添加在该图层顶部的图层,因此我必须检查我循环的音频文件是否重新启动。使用要添加的图层来保护第二个文件。之后将其混合在一起(因为您不能在 1 个文件中写入 2 个不同的流)并循环播放。
对于循环,我使用 System.Media 使用 SoudPlayer 类。
Player = new SoundPlayer(path);
Player.PlayLooping();
int deviceNumber = sourceList.SelectedItems[0].Index;
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = deviceNumber;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
waveWriter = new NAudio.Wave.WaveFileWriter(open.FileName, sourceStream.WaveFormat);
sourceStream.StartRecording();
每次音频文件结束时都应停止录音。
提前致谢!
答案 0 :(得分:0)
您需要看看 NAudio documentation。
<块引用>我在录制 WAV 时经常添加的一项安全功能是限制 WAV 文件的大小。它们增长很快,在任何情况下都不能超过 4GB。在这里,我将请求在 30 秒后停止录制:
waveIn.DataAvailable += (s, a) =>
{
writer.Write(a.Buffer, 0, a.BytesRecorded);
if (writer.Position > waveIn.WaveFormat.AverageBytesPerSecond * 30)
{
waveIn.StopRecording();
}
};