2017-06-08 3 views
3

MongoDBに保存されている小さなサウンドファイルは、BSONとしています。 タスクは、データベースからバイナリデータを取り出し、適切な形式に変換してフロントエンドに返すことです。 問題は変換にあります。私はpydubがこれに使用できることを発見しました。オーディオファイルを変換するためのファイル名ではない

query_param = json_data['retriever'] 
query_param1 = query_param.replace('"', ""); 
data = db.soundData 
y = data.find_one({'name': query_param1}) 
s = y['data'] // here I retrieve the binary data 
AudioSegment.from_file(s).export(x, format="mp3") 
return send_file(x, 'audio/mp3') 

を次のように

私のコードは、それが AudioSegment.from_wav("/input/file.wav").export("/output/file.mp3", format="mp3") の標準に従っていないと'bytes' object has no attribute 'read'の誤差がまだ投げられるよう質問がAudiosegmentラインであるです。それはpydubで達成可能ですか?

+1

何形式のバイナリデータであるのか?波? – Jiaaro

+0

@Jiaaroはい –

答えて

2

AudioSegment.from_file()は、ファイルパスまたはファイルのようなオブジェクトを最初の引数としてとります。あなたがすることができます(波のヘッダだけでなく、オーディオデータを含む)全体のwaveファイルの生のバイトを持っていると仮定すると:あなたが唯一のオーディオサンプルのバイトをしている場合

import io 
s = io.BytesIO(y['data']) 
AudioSegment.from_file(s).export(x, format='mp3') 

ことはあなたには、いくつかのメタデータを知っておく必要があります

AudioSegment(y['data'], sample_width=???, frame_rate=???, channels=???) 
  • sample_widthは、各サンプルのバイト数です(16ビット/ CDオーディオのようにあなたが2を使用したい)
  • frame_rateはサンプル/秒(の数である:あなたのオーディオデータについて別名、サンプルレートは、オーディオCDのために、それはオーディオストリームがあるどのように多くの44100
  • channelsだ、ステレオ2で、モノは1など
関連する問題