将特定音量和音调设置为.wav文件



在我的应用程序中,我需要记录一些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]

相关内容

  • 没有找到相关文章

最新更新