0

だから私は2つのサウンドファイルを作成し、いくつかの詳細を提供してそれらを探索するコードを書きましたが、最初の2つのサウンドファイルの長い方の長さとサンプリングレートを持つ3番目のサウンドファイルを作成することを意図した部分に問題があります両方の (同じ sr を持っています)。この関数は、最初の 2 つのサウンド ファイルのすべてのインデックスのサンプルの値を取得し、それらを加算して、3 番目のサウンド ファイルにコピーすることを目的としています。持っていると思っていたのですが、3 番目のファイルを調べてみると、空白になっています。

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)
4

1 に答える 1

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)

正しくインデントされていると仮定すると、3 つの別々のループを使用しているため、最後のループはターゲット ファイルをループし、すべてのサンプル値を最後に見つかった値の合計に設定します。ループは 1 つだけ使用してください。このようなもの:

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

(Python の最小値に関係なく) もちろん、作成されたファイルの長さの値も最小値に設定する必要があります。もちろん、ファイル長の不一致の問題を解決する方法は他にもありますが、最初にループの問題を修正してください。

于 2012-06-03T23:39:45.897 に答える