2016-12-22 7 views
1

私のコンピュータにはいくつかのオーディオファイルがあります。私はPython3でいくつかの分析をしたいと思います。その一部には、オーディオファイルのスニペットを再生することが含まれます。Python3でオーディオを読み込んで再生する

私はAMRファイルに興味があります。ファイルの例はhereですが、どのファイルでも可能です。

ここでは私のワークフローでは、これまでのところです:

#!/usr/bin/env python3 
import audioread 
import numpy as np 
fin = audioread.audio_open('test.amr') 
dat = [x for x in fin]   #Generate list of bytestrings 
dat = b''.join(dat)    #Join bytestrings into a single urbytestring 
ndat = np.fromstring(dat, '<i2') #Convert from audioread format to numbers 

#Generate a wave file in memory 
import scipy.io.wavfile 
import io 
memory_file = io.BytesIO() #Buffer to write to 
scipy.io.wavfile.write(memory_file, fin.samplerate, ndat) 

#Play the wave file 
import simpleaudio 
wave_obj = simpleaudio.WaveObject(memory_file.getvalue()) 
play_obj = wave_obj.play() 
play_obj.wait_done() 

問題がある、私は再生のために行くとき、私はいくつかの非常に甲高い、高速な響きの音。私はコンバージョンがどこかで間違っていると思っていますが、どこにいるのか分かりません。ととastypeなし両方

#Generate a wave file in memory using wave 
import wave 
import io 
memory_file = io.BytesIO() #Buffer to write to 
wave_file = wave.open(memory_file, 'w') 
wave_file.setparams((fin.channels, 2, fin.samplerate, 0, 'NONE', 'not compressed')) 
wave_file.writeframes(ndat.astype('<i2').tostring()) 
wave_file.close() 

waveを使用しようと

は、同様の結果を生成します。

audioreadで使用されているオーディオバックエンドがおそらく動作しないと思われたので、AMRからWAVに変換してからファイルを読み取りました。それはものを修正しませんでした。

waveファイルをディスクに書き込んで標準のオーディオプレーヤーで再生すると問題が解決されたので、問題はsimpleaudioのようです。

答えて

1

私はsimpleaudioを間違って使用していました。次の作品:

#!/usr/bin/env python3 
import audioread 
import numpy as np 
fin = audioread.audio_open('test_justin.amr') 
dat = [x for x in fin]   #Generate list of bytestrings 
dat = b''.join(dat)    #Join bytestrings into a single urbytestring 
ndat = np.fromstring(dat, '<i2') #Convert from audioread format to numbers 

#Generate a wave file in memory 
import scipy.io.wavfile 
import io 
memory_file = io.BytesIO() #Buffer to write to 
scipy.io.wavfile.write(memory_file, fin.samplerate, ndat) 

#Play the wave file 
import simpleaudio 
wave_obj = simpleaudio.WaveObject.from_wave_file(memory_file) 
play_obj = wave_obj.play() 
play_obj.wait_done() 
関連する問題