为什么我的声音文件没有被复制到?

时间:2012-06-03 01:33:17

标签: file indexing audio

所以我写了一个代码,创建了两个声音文件,提供了一些细节并探讨了它们,但我很难找到一个部分,这意味着创建一个长度为前两个声音文件长度的第三个声音文件两者的采样率(它们具有相同的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)

1 个答案:

答案 0 :(得分:0)

我猜这是python(?)。我不知道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)

(无论python中的min是什么)当然,你应该将创建文件的长度值设置为最小值。当然还有其他方法可以解决文件长度不匹配的问题,但首先要解决你的循环问题。