2016-10-21 11 views
0

나는 오디오 식별을 위해 자바 스크립트 프론트 엔드, 플라스크 서버 및 마이크로 소프트의인지 서비스를 연결하려고합니다.파이썬 웨이브 오디오 샘플 속도

Microsoft 서버는 오디오 데이터에 특정 매개 변수를 요구합니다. 특히 16000 프레임 속도를 요청합니다.

그러나 창에 브라우저에서

나는 단지 내가 41000에 오디오를 얻을 지금 41000. 을 얻을, 다음과 같이 저장할 수 있습니다 : 오디오는 DICT의 \의 형태로 socketio을 통해 수신
audioData = message['audio']  
af = wave.open('audioData.wav', 'w') 
af.setnchannels(1) 
af.setparams((1, 2, 16000, 0, 'NONE', 'Uncompressed')) 
af.writeframes(audioData) 
af.close() 

json 데이터. 아무 것도 변경하지 않고 직접 저장하면 괜찮습니다. 그러나 샘플 속도를 16000으로 변경하면 분명히 왜곡되어 매우 느린 것으로 들리므로 몇 초 동안 오디오가 1 분 정도가됩니다.

어떻게 파이썬 3.4에서 소리가 나는지에 영향을 미치는 오디오 속도를 올바르게 변경합니까?

감사합니다.

편집 : 여기 는 작업 코드 :

with open("audioData_original.wav", 'wb') as of: 
of.write(message['audio']) 
audioFile = wave.open("audioData_original.wav", 'r') 
n_frames = audioFile.getnframes() 
audioData = audioFile.readframes(n_frames) 
originalRate = audioFile.getframerate() 
af = wave.open('audioData.wav', 'w') 
af.setnchannels(1) 
af.setparams((1, 2, 16000, 0, 'NONE', 'Uncompressed')) 
converted = audioop.ratecv(audioData, 2, 1, originalRate, 16000, None) 
af.writeframes(converted[0]) 
af.close() 
audioFile.close() 
여기 단점은

그 내가 JSON을 통해 mediaRecorder API의 오디오 데이터를 얻을, 그래서 메모리에에도 불구하고 ... 그리고 디스크에 기록한 다음 다시 열어 웨이브 기능을 사용하여 샘플링 속도를 얻을 수 있습니다. 그러나 디스크에 쓰지 않고 어떻게해야합니까? 감사. 내가 새로운 질문을해야한다면, 확실히 할 수 있습니다.

+0

오, 오케이, 내 자신의 후속 질문에 대답 - io.BytesIO 트릭 않았다. – Nix

답변

0

(표준 라이브러리에 있음) audioop.ratecv을보십시오 샘플의 원시 프레임 (귀하의 경우 audioData)에서 작동하도록하십시오. 간단한 알고리즘이므로 약간의 음질 손실이 예상되지만 음성은 중요하지 않습니다.

+0

덕분에이 코드로 할 수있었습니다 : – Nix

+0

open ("audioData_original.wav", 'wb') with : of.write (message [ 'audio']) audioFile = wave.open (" audioData_original.wav ','R ') = n_frames 용의 audioFile.getnframes() audioData = audioFile.readframes (n_frames) originalRate audioFile.getframerate =() wave.open AF = ('audioData.wav ','w ') af.setnchannels (1) af.setparams ((1, 2, 16000, 0, 'NONE', 'Uncompressed')) converted = audioop.ratecv (audioData, 2, 1, originalRate, 16000, 없음) af.writeframes (변환 된 [0]) af.close() audioFile.close() – Nix

+0

그러나 오디오 데이터를 메모리에서 웨이브 개체로 읽는 방법에 대한 후속 질문이 있습니까? json에서 오디오를 받기 때문에. 위의 코드에서 디스크에 데이터를 쓰고 디스크에서 데이터를 읽은 다음 새 다운 샘플링 된 파일로 변환합니다. 원본 파일을 디스크에 쓰지 않고 어떻게해야합니까? – Nix