2016-12-22 2 views
1

내 컴퓨터에 오디오 파일이 있습니다. 파이썬 3에서 일부 분석을하고 싶습니다. 일부는 오디오 파일 조각을 재생하는 것을 포함합니다.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로 변환 한 다음 파일을 읽었습니다. 그건 해결되지 않았다.

웨이브 파일을 디스크에 쓰고 표준 오디오 플레이어로 재생하면 문제가 해결되었으므로 문제는 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()