2017-02-26 31 views
0

我已經創建了一個用於分析輸入中插入的file.wav的程序。我想知道是否可以從原始file.wav中刪除時間間隔。 我會削減一部分不必要的分析,在一定的時間內。在消除這些聲部之後,我會得到一種新的連續聲音,將聲音的各方合併在一起,而不是消除。 有可能嗎? 你能幫助我嗎?如何刪除一段聲音?

+0

你到目前爲止的嘗試 – gpasch

回答

1

一旦讀完了WAV格式文件,解析了標題,並將音頻曲線數據點停放在某個數據結構中,則有兩種選擇。

  • 到位更新(棘手實現)

  • 複製好的數據點到一個新的數據結構(讓做這個)

WAV格式的

好的方面是它的PCM這表示音頻曲線在該曲線上表示爲離散點。確保您確定了標題中可用的位深度。典型的位深度將是16位,這意味着每個採樣將消耗內存緩衝區中的兩個字節的數據。打印出100個左右的樣本值,以確認您手頭的樣本格式正確。如果16位,那麼可能值的範圍將映射到2^16個不同的整數值。當您檢查這些示例值時,您是否簽名或簽名非常重要。

作爲一個墊腳石,我首先得到一些代碼工作,它只是讀取WAV文件並將每個字節複製到輸出文件中。確認你可以播放這個新的輸出WAV文件。接下來編寫類似的代碼,除了這個時候解析頭部,識別採樣率字段,將它的值從44100更新到22050,輸出帶有這個更新的頭部,接着是在WAV文件中出現在頭部之後的音頻數據字節。播放這個WAV文件,是否加快或減慢音軌?

打開輸入WAV文件並在每個字節中讀取字節後,獲得將兩個字節組合成一個16位整數變量(如果您的頭文件說您有16位樣本)的工作能力。每個音頻採樣將消耗多個字節(8位音頻聲音可怕)。因此,如果您有24位音頻,當然每個音頻採樣在給定通道中將跨越文件的三個字節。注意大小序列的概念(你的兩個字節是左右還是左右)。爲了簡單起見,首先得到一個單聲道輸入WAV文件。立體聲(2聲道)或X聲道可以使用WAV格式,但單聲道更容易。

假設我們有10個樣品(每個16位整數)

  • 0 - 3良好
  • 4 - 7差(我們將丟棄這些)
  • 8 - 9良好

因此輸出文件將包含忽略不良樣本4-7之後剩下的內容,因此它將只有6個樣本。在所有樣品中

環 - >確定當前樣本是否良好 - >只有在這種代碼好的樣品複製到輸出數據結構

int out_index = 0; 

int bit_depth = 16; // get this 16 from header, could be 24 for example 

// how many bytes in bit depth, 2 if 16 bit, 3 if 24 bit 
int incr_index = bit_depth/8; 

for (int in_index = 0; in_index < size; in_index += incr_index) { 

    if (is_sample_good(in_index)) { // is this sample good or bad 

     output_data[out_index]  = input_data[in_index]; 
     output_data[out_index + 1] = input_data[in_index + 1]; 

     out_index += incr_index; 
    } 
} 

通知的輸入和輸出數據的每個結構具有自己的索引.. 。因爲我們只提高了良好樣本的輸出指數

WAV格式文件頭始終是WAV文件的前X個字節(如果我沒有記錯,則爲32個字節)。在這個頭部是一個總數據大小的指標。跟蹤將驅動此數據長度標題標籤值的好樣本數量,並將其放入輸出WAV文件的標題部分。在遍歷輸入文件並生成輸出數據結構(內存緩衝區)之後,然後打開新的輸出文件,在此文件中寫入帶有更新長度標記值的新標題,然後編寫新的內存緩衝區,關閉文件並播放。

這裏有一些WAV格式的鏈接

http://unusedino.de/ec64/technical/formats/wav.html

https://www.gamedev.net/resources/_/technical/game-programming/loading-a-wave-file-r709

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

http://www.topherlee.com/software/pcm-tut-wavformat.html

http://www.labbookpages.co.uk/audio/javaWavFiles.html

http://www.drdobbs.com/database/inside-the-riff-specification/184409308

+0

謝謝,我明白了。你仍然可以指出一些有用的鏈接? – Margherita