在我的应用程序中,我需要录制一些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();
}
我通过搜索互联网看到,使用NAudio.dll可以修改.wav文件,但我还没有完全理解它是如何工作的。
答案 0 :(得分:0)
通过使用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]