2017-09-18 104 views
-1

在我的應用程序中,我需要記錄一些wav文件並將它們設置爲特定的音量和音高。現在我可以使用winmm.dll錄製和播放.wav文件,但我不知道如何修改它們。將具體音量和音調設置爲.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

你是什麼意思的「標量方式」?如果您有權訪問音頻值,則可以修改所有內容。對我而言,它不清楚問題是什麼。也許谷歌「C#DSP」找到可以幫助解決問題的庫。 –

回答

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],[1 ],...,a [nChannels]