在我的应用程序中,我需要记录一些WAV文件并将它们设置为特定的音量和音高。现在,我可以使用 winmm.dll 录制并播放.wav文件,但是我不知道如何修改它们。
private void Record()
{
mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
}
private void StopRecord(string file)
{
string path = "C:\Users\Workshop\Dani\audiofiles\audiofiles\" + this.Name + '\' + file + ".wav";
mciSendString("save recsound " + path, "", 0, 0);
mciSendString("close recsound", "", 0, 0);
}
private void Reproduce (string path)
{
SoundPlayer player = new SoundPlayer(path);
player.Load();
player.Play();
}
我已经看到,通过搜索Internet,使用Naudio.dll可以修改.wav文件,但我不完全了解其工作原理。
通过使用naudio库可以获取.wav文件的所有示例并根据需要进行修改。
wave = new NAudio.Wave.WaveFileReader(path);
float[] samples = new float[wave.SampleCount];
a = wave.ReadNextSampleFrame();
int i = 0;
while (a != null)
{
samples[i] = a[0]*ratio;
i++;
a = wave.ReadNextSampleFrame();
}
//create the new .wav with the samples modified
WaveFormat waveFormat = wave.WaveFormat;
wave.Dispose();
WaveFileWriter writer = new WaveFileWriter(path, waveFormat);
for (int u=0; u < i; u++)
{
writer.WriteSample(samples[u]);
}
writer.Dispose();
请务必记住,每个样本都是浮子,其值从-1.0F到1.0F。同样,重要的是要知道在记录了多少个音频的频道中,在我的情况下,这只是一个频道,这就是为什么我使用[0],但是如果有更多频道,我应该使用[0],a [1]],...,a [nchannels]