1

我想使用 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)
4

1 回答 1

1

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

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

所以,如果 SL4A 实现了所有的 python 核心,你也许可以在没有依赖关系的情况下做到这一点。

于 2012-03-23T23:47:40.650 回答