2012-06-03 43 views
0

所以我寫了一個代碼,創建兩個聲音文件,給出了一些細節,並探討它們,但我有一部分,這意味着創建第三個聲音文件與長度的前兩個聲音文件和兩者的採樣率(它們具有相同的sr)。該函數旨在獲取前兩個聲音文件中所有索引的樣本值,將它們相加,並將其複製到第三個聲音文件中。我以爲我擁有它,但是當我探索第三個文件時,它會變成空白。爲什麼我的聲音文件不被複制到?

def sound(): 
    a = pickAFile() 
    b = pickAFile() 

    sound1 = makeSound(a) 
    sound2 = makeSound(b) 

    sr1 = getSamplingRate(sound1) 
    sr2 = getSamplingRate(sound2) 

    printNow(sr1) 
    printNow(sr2) 

    play(sound1) 
    play(sound2) 

    explore(sound1) 
    explore(sound2) 

    if sr1 == sr2: 
    printNow('Sampling Rate 1: %d \nSampling Rate 2: %d' % (sr1, sr2)) 
    else: 
    printNow('Sampling Rates are not equal.') 
    c=getLength(sound1) 
    d=getLength(sound2) 
    printNow('sound1: %d, sound2: %d' % (c, d)) 
    sound3 = Sound(getLength(sound2), int(sr1)) 

    for index in range(0, getLength(sound1)): 
    value = getSampleValueAt(sound1, index) 

    for index in range(0, getLength(sound2)): 
    value2 = getSampleValueAt(sound2, index) 

    for index in range(0, getLength(sound3)): 
    setSampleValueAt(sound3, index, value+value2) 

    play(sound3) 
    explore(sound3) 
+0

我想你應該爲你正在使用的語言和你依賴的庫添加標籤等等。 –

回答

0

我想這是python(?)。我不知道蟒蛇,但很顯然,問題出在你的這部分代碼:

for index in range(0, getLength(sound1)): 
    value = getSampleValueAt(sound1, index) 
for index in range(0, getLength(sound2)): 
    value2 = getSampleValueAt(sound2, index) 
for index in range(0, getLength(sound3)): 
    setSampleValueAt(sound3, index, value+value2) 

假設您已經縮進正確,使用的是三個獨立的迴路,所以最後遍歷你的目標循環文件並將所有樣本值設置爲找到的最後一個值的總和。你應該只使用一個循環。更多的東西是這樣的:

for index in range(0, MIN(getLength(sound1), getLength(sound2))): 
    value = getSampleValueAt(sound1, index) 
    value2 = getSampleValueAt(sound2, index) 
    setSampleValueAt(sound3, index, value+value2) 

(無論min是在python),當然,你應該設置創建的文件,以他最小的長度值也是如此。當然,還有其他方法可以解決不匹配的文件長度問題,但首先要解決您的循環問題。

相關問題