【问题标题】:Get amplitude of recorded sound with Python using SL4A使用 SL4A 使用 Python 获取录制声音的幅度
【发布时间】:2012-03-23 22:07:40
【问题描述】:

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

【问题讨论】:

    标签: android python audio sl4a amplitude


    【解决方案1】:

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

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

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

    【讨论】:

    • 我得试试,这个主意听起来很有希望。
    • 所以,我设法录制了声音并且我使用了import wave, audioop 模块,它并没有说这是一个错误,但是当我尝试使用wave.open() 时它说它不能找到文件wave.py.. 所以,我已经搜索过它,我正在尝试将它作为一个模块,我将在我的项目中导入它,希望我能解决这个问题。再次感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多