1

読んでくれてありがとう。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"

誰かがこれに光を当てることができますか?

4

0 に答える 0