2012-06-03 37 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),当然,你应该设置创建的文件,以他最小的长度值也是如此。当然,还有其他方法可以解决不匹配的文件长度问题,但首先要解决您的循环问题。

相关问题