2012-03-23 6 views
1

SL4A用のPythonで書かれたアプリケーションを使用して1秒間サウンドを録音し、サウンドの最大振幅を探します。SL4Aを使用してPythonで録音されたサウンドの振幅を取得

私は使用できるPython APIを使用することができますか、または使用できるSL4A APIの一部はありますか?または、この問題で私がインストールできるPythonモジュールがありますか?

Python APIをSL4Aから検索しましたが、振幅に関連するものは見つかりませんでした。たぶん私はそれを逃した。

UPDATE:

私は自分のコードにwave.pyモジュールをインポートして、記録されたファイルを開こうとすることができました。私は

wave.open("/sdcard/sl4aTemp/sound_sample.wav")

にアクセスした場合しかし、それは私のコードはここでそれをどのように見えるか興味がある人のため

File does not start with RIFF id

、このエラーがスローされます:

import android, audioop, time, wave 

droid = android.Android() 

print "Recording starts in: " 
for i in range(0,5): 
    time.sleep(1) 
    print str(5-i) 
time.sleep(1) 

print "Speak!" 
droid.recorderStartMicrophone('/sdcard/sl4aTemp/sound_sample.wav') 
time.sleep(3) 
droid.recorderStop() 

print "Processing file in:" 
for i in range(0,3): 
    print str(3-i) 
    time.sleep(1) 

filename = "/sdcard/sl4aTemp/sound_sample.wav" 

if wave.open(filename,"r") == True: 
    print "Processing " + filename 
else: 
    print "File not processed" 

FILE=wave.open(filename,"r") 
rez=FILE.readframes(30) 
print str(rez) 

答えて

1

Pythonでのサウンド処理に対する標準的な答えは、実際にPortAudioに依存する別のパッケージであるPyAudioです。アンドロイドのために作られていないので、それは本当に良い解決策ではありません(あなたがヒーローとなるように感じ、それを構築しようとしない限り)。

もう1つのオプションはaudioop moduleです。問題は、ファイルが保存されているフォーマットを、audioopが受け入れるフォーマット(8/16/32ビット幅の符号付き整数サンプルの文字列)に変換する必要があることです。どのようにすればいいのかは分かりませんが、本当に運が良ければ、.wavファイルになります。ちょうどwave module's readframes(バイトの文字列としてデータを出力する)を使うことができます。

したがって、SL4Aがすべてのpythonコアを実装している場合は、に依存しないで行うことができます。

+0

私はそれを試してみるつもりだ、そのアイデアは有望だと思う。 –

+0

私はサウンドを記録し、 'import wave、audioop'モジュールを使用しました。エラーではありませんが、' wave.open() 'を使用しようとすると、それはできませんファイル 'wave.py'を見つけてください。私はそれを探しましたが、私はこの問題を乗り越えるために私のプロジェクトでインポートするモジュールにしようとしています。再び、ヒントのおかげで! –

関連する問題