循环播放的音频文件的结尾?

问题描述

我正在尝试创建一个简单的音频 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();

每次音频文件结束时都应停止录音。

提前致谢!

解决方法

您需要看看 NAudio documentation

我在录制 WAV 时经常添加的一项安全功能是限制 WAV 文件的大小。它们增长很快,在任何情况下都不能超过 4GB。在这里,我将请求在 30 秒后停止录制:

waveIn.DataAvailable += (s,a) =>
{
    writer.Write(a.Buffer,a.BytesRecorded);
    if (writer.Position > waveIn.WaveFormat.AverageBytesPerSecond * 30)
    {
        waveIn.StopRecording();
    }
};