使用SL4A使用Python获取录制声音的幅度

时间:2012-03-23 22:07:41

标签: android python audio sl4a amplitude

我想使用Python编写的SL4A应用程序录制声音1秒,然后找到声音的最大振幅。

我可以使用SL4A API的任何部分或可以使用的部分Python API吗?或者我可以为此安装任何python模块吗?

我从SL4A搜索了Python API,但没有发现任何与振幅有关的内容。也许我只是错过了它。

更新:

我设法将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 个答案:

答案 0 :(得分:1)

使用python进行声音处理的标准答案是PyAudio,它是独立的包,实际上依赖于PortAudio,它可能还没有为android构建,所以它不是一个很好的解决方案(除非你觉得自己是英雄并且尝试让它建立)。

另一个选项是audioop module。问题在于您需要将保存文件的格式转换为audioop接受的格式(8/16/32位宽有符号整数样本的字符串)。你很难说这是怎么做的,但是如果你真的很幸运它会是一个.wav文件而你可以使用wave module's readframes(它可以方便地将数据输出为一串字节)

因此,如果SL4A实现了所有的python核心,那么可能能够在没有依赖的情况下完成它。