読んでくれてありがとう。numpy/scipy を使用して Python でオーディオ操作を行う小さなプロジェクトを行っています。前もって言っておきますが、私はオーディオの詳細についてあまり詳しくありません。(私がこれにアプローチしている角度は、ニューラル ネットワークです。)
とにかく、私は scipy.io.wavfile を使用して、numpy 配列との間で wav ファイルを読み書きしています。私の問題は、オーディオ フレームのデータ型にあります。ニューラル ネットワーク用にデータを -1 から 1 の間の浮動小数点数に正規化する必要があり、最初に発生した問題の 1 つは、適切なオーディオ ファイルになったすべてのものからデータを取得することでした。正しい長さの適切な波形を取得するには、すべてのサンプルを int16 にキャストする必要がありました。
私のオーディオ ファイルのビット深度は 16 ビットなので、これは非常に理にかなっています。
しかし今、私は24ビット深度の異なるオーディオファイルで同じことをしようとしています。
stream = sp.read(audiofile, False)
結果のストリームには、桁数が多すぎるサンプルがあります。24 ビット整数が格納できる最大数は約 1600 万であることを知っています。代わりに、数十億単位の値を取得しています。その関数から取得している配列は int32 型です。さらに、当然のことながら、これらのサンプルを有効な wav ファイルに戻す方法が見つかりません。私は沈黙を得るだけで、長さはめちゃくちゃで、それが何であったかではありません.
def convert_to_3D(sample, network, variance):
'''
Convert audio samples to virtual surround
'''
dtype = sample.dtype
sample = sample.astype(float)
# Normalize
sample = (sample/variance)
# Transform
resultStream = network.insert_input(sample)
# Denormalize
resultStream = resultStream * variance
resultStream = np.rint(resultStream)
resultStream = resultStream.astype(dtype) #("int16")
return resultStream
def convert_file(filename, network):
stream = u.read(filename)
variance = np.var(stream)
print "Varianz: ", variance
print "Converting..."
for i in range(len(stream)):
stream[i] = convert_to_3D(stream[i], network, variance)
filename = filename.rsplit( ".", 1 )[0] + "_3D.wav"
u.write(stream, filename )
print "File ", filename, " has been written"
誰かがこれに光を当てることができますか?