2012-05-01 36 views
2

我目前的工作在哪裏我加載與44100Hz的採樣率16位波形文件的一個小項目改變樣品的「量」產生的噪聲。在正常播放中,音頻看起來很好,但只要我開始播放振幅大小等音量來改變音量,它就會開始產生一點靜電噪音。我怎樣才能減少或消除由16位PCM

我在做什麼正從在該16位的情況下,緩衝液的樣品輸入一個簡短,在-1到1的範圍轉換此爲float開始做混合等效果。在這個我也改變了音量,當我把它乘以1,給出相同的輸出它的罰款,但只要我開始改變音量,我聽到靜態噪音。它發生在1.0以上並且低於1.0時。規模越大或越小越差。

任何想法如何減少或消除噪音?

+0

僅適用於零交叉點的增益變化,所以避免了在較低頻率分量的突然變化最嚴重的諧波產生的? –

+0

你能用更簡單的術語解釋一下嗎?我不是在還沒有對這個問題的認識的最高水平。你說的是改變增益時忽略低頻率?因此,在應用音量之前,從時間 - >頻率域進行。 – Yonathan

+0

我只能猜測關於試圖讓它聲音更大或混合多個通道的部分:你的數學溢出。告訴我們你的代碼。 –

回答

1

我發現了破綻,我被要使用焦炭的數據提取不同的位數據類型*,我沒有將它的用法轉換爲正確的數據類型指針。這意味着在提供數據時字節被切斷。這造成了其他噪音和音量變化的錯誤。

我實現的一個缺陷,並與音頻數據時,我沒有想到這一點。對於做同樣事情的任何人來說,一個提示就是,在修改數據時保持良好的眼睛,在抽象時檢查數據的類型。

非常感謝那些試圖幫助我的人,這些鏈接非常有趣,它確實讓我學到了更多關於音頻編程的知識。

4

「靜態」,否則稱爲「點擊和彈出」是在輸出信號的不連續的結果。這裏是一個不連續的一個很好的例子:

http://en.wikipedia.org/wiki/File:Discontinuity_jump.eps.png

如果發送音頻的緩衝器向系統播放,然後您可以通過1.1乘以每個樣本的下一個緩衝區,你可以創建一個間斷。例如,考慮包含正弦波的緩衝區,其值爲[-0.5,0.5]。您將這一波發送到輸出設備,最後一個樣本恰好爲0.5。

現在,你的下一個緩衝區您嘗試由1.1乘以調節音量。新緩衝區的第一個樣本將接近0.5(因爲前一個樣本爲0.5)。乘以1.1即可得到0.55。

從一個樣品到下一個0.05的變化將可能聽起來像一個點擊或彈出。如果你創造了足夠的這些,它聽起來像靜態的。

的解決方案是「斜坡」在緩衝區的體積變化。例如,如果您想將增益1.1應用於100個樣本的緩衝區,並且以前的增益爲1.0,那麼您將循環播放從增益1開始的所有100個樣本,並平穩增加增益,直到達到最後一個樣本,此時你的收益應該是1.1。

如果你想驗證碼看JUCE的例子:: AudioSampleBuffer :: applyGainRamp:

http://www.rawmaterialsoftware.com/api/classAudioSampleBuffer.html

+0

我這樣做是爲了將我的'裁剪'設置爲-1到1的範圍,但我從來沒有真的想過這樣做是爲了增加變化。我會看代碼示例,謝謝! – Yonathan

+0

太說明了,這裏是當前的項目:http://www.0x3a.com/0xAUDIO.rar 當運行和按播放改變音量滑塊,你會注意到噪音。我仍然不知道發生了什麼。 – Yonathan

+0

看看這裏的「SimpleDJ」https://github.com/vinniefalco/AppletJUCE它的音量滑塊。 –