2013-03-18 75 views
0

所以,我想通過分解成樣本和存儲陣列的樣品處理Java中的聲音文件。然後我循環遍歷數組,更改每個樣本。我意識到java中已經有了一個回聲過濾器,但是我需要通過讓聲音以不同的間隔在整個聲音剪輯中以減小的音量重複來設計自己的聲音。我目前有一種方法可以控制音量,但是在獲取聲音重複開始時,當前聲音文件的延遲時間很難。這是我到目前爲止有:創建Java回聲音效

public void echoEffect(int delay){ 
    SoundSample[] sampleArray = this.getSamples(); // get array 

    SoundSample sample = null;      // current sample obj 
    int value = 0;         // value at sample 

// loop through SoundSample objects 
for(int i = 0, index = 0; index < sampleArray.length; i++,index++) 
{ 
    sample = sampleArray[index]; // get current obj 
    value = sample.getValue();  // get the value 
    sample.setValue(value*2);  // set the value 
} 
} 

我認爲我需要做的是改變從虛空方法聲音和返回延遲的聲音文件。可能返回類似值+值[I +延遲] *(一些分數降低聲音)

新的更新,而不是職位:

反正這是我到目前爲止,我只是不能似乎讓代碼正常工作,我知道我很接近,但我需要該方法在聲音文件上輸出回聲效果。以下是我在當前點:

public void echo(int delay){ 
    SoundSample[] sampleArray = this.getSamples(); // get array 
    //Sound target = new Sound(sampleArray.length); 

    SoundSample sampleDelay = null; 
    SoundSample sample = null;      // current sample obj 

    int value = 0;         // value at sample 
    int index = 0; 
    double value2 = 0; 
// loop through SoundSample objects 
while (index < sampleArray.length) 
{ 
    sample = sampleArray[index]; // get current obj 
    value = sample.getValue();  // get the value  
    sampleDelay = (sampleArray[delay-index]); 
    value2 = (sampleDelay.getValue()*.6); 
    sample.setValue(value + (int) value2);  // set the value 
    index++;         // increment index 
} 
} 

讓我知道你們覺得這一切似乎做的是發佈一個SSCCE移幅度出於某種原因... 的問題是,這是使用一些在java中不經常使用的類,我相信並且因此我只是在尋找某個人來幫助理解邏輯。我試圖循環播放一個聲音文件的樣本,然後將延遲點處的值設置爲聲音的開始,但音量變暗。 IDK,如果我解釋這個權利,但我希望這將是一個簡單的修復。

+0

同樣的問題:http://stackoverflow.com/questions/11793310/how-to-add-echo-effect-on-audio-file-using -objective-c – 2013-03-18 16:20:47

+0

爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-03-20 03:15:53

+0

這是什麼問題? – Siddharth 2013-03-20 03:18:10

回答

1

而不是

sampleDelay = (sampleArray[delay-index]);

你想

sampleDelay = (sampleArray[index-delay]);

+0

當我改變這個我得到一個ArrayIndexOutOfBoundsException:-3000其中數字等於延遲值。並感謝您的幫助。 – adrv1400 2013-03-20 14:40:21

+1

@ adrv1400那麼,不要訪問0下面的數組! :) – Patashu 2013-03-20 19:56:32

+1

呀,你不能呼應的東西,是不是有:)你想在什麼地方比你回來去量越大,開始呼應.. – 2013-06-09 03:26:34

0

你確定這是不是下面?

sampleDelay = (sampleArray[index*delay]); 
在類C的僞代碼目的C.回答
+0

這爲指數上漲將給予更多的延遲。延遲應該是constat。我的事Pataro的答案是在正確的方向。 – brunorey 2015-11-17 21:33:12