我已經創建了一個用於分析輸入中插入的file.wav的程序。我想知道是否可以從原始file.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
謝謝,我明白了。你仍然可以指出一些有用的鏈接? – Margherita
- 1. 如何刪除聲音
- 2. 空jtextfield/jpassword刪除聲音
- 3. 如何用AVAudioEngine取消或刪除回聲/重複聲音?
- 4. 如何從聲音軌道中刪除人聲mp3
- 5. 刪除音頻文件的第一段
- 6. 如何從卡拉OK應用中刪除歌曲的聲音或聲音?
- 7. 如何刪除ffmpeg中運動評論聲音剪輯的背景聲音
- 8. Xcode惱人的刪除斷點聲音
- 9. 從Winform WebBrowser中刪除「click」聲音?
- 10. 如何刪除回聲
- 11. 如何在UITextField中輸入文本時刪除默認聲音?
- 12. 如何刪除java中的聲音文件?
- 13. 如何解除as3中的聲音?
- 14. 如何用SoX去除聲音文件?
- 15. 如何使用JavaScript刪除一段HTML
- 16. jPlayer只播放一段聲音
- 17. 一段時間後聲音停止 - Android
- 18. 如何刪除段落
- 19. Nutch-如何刪除舊段?
- 20. 刪除口音
- 21. 如何刪除字體的重音
- 22. 如何從XML文檔中刪除/刪除DOCTYPE聲明?
- 23. 如何在包含後刪除聲明
- 24. 如何刪除XML聲明使用BeautifulSoup4
- 25. 如何一次播放兩種聲音?
- 26. android - 播放聲音(音符)一段時間
- 27. 一段時間無聲錄音與錄音
- 28. 刪除一個片段android
- 29. python-docx - 刪除第一段
- 30. 從_Layout.cshtml中刪除一段
你到目前爲止的嘗試 – gpasch