我正在使用audiostream,但无法通过麦克风录制任何内容。
def mic_callback(buf):
print('got', len(buf))
frames.append(buf)
print('size of frames: ' + len(frames))
def bcallback(instance):
mic = get_input(callback=mic_callback, source='mic')
mic.start()
#mic.poll()
time.sleep(5)
mic.stop()
class MyApp(App):
def build(self):
btn1 = Button(text='Audio Record')
btn1.bind(on_press=bcallback)
return btn1
if name == 'main':
MyApp().run()
运行这段代码并使用logcat
我可以看到mic_callback
无效,因为logcat
上没有打印。
我也尝试将源代码更改为default
,但也无效。
答案 0 :(得分:1)
好的,经过大量的试验和错误,我已经设法让这件事工作了。不确定是什么修复它,可能是缓冲区大小。所以我发现“mic_callback”实际上并没有被调用,因为队列中没有任何内容。所以问题应该在于音频输入的配置。这对我有用(因为我在这里发布代码我将使用pastebin): http://pastebin.com/80sFjGWs
答案 1 :(得分:0)
我有一个代码片段,用于在Android上使用kivy进行音频录制。 我没有使用过audiostream,但它可能在你的情况下很有用。 不幸的是,它并没有记录在wav和你身上 需要安装jnius才能使用该代码段。
在Player()和Recorder()中传递给play()和start()的按钮只是一个文件名为Player()和Recorder()的文件名。
awk -F: '/abc_/{print $2}' file
abc_1
awk -F: 'NR==1,/abc/{print $2}' file
abc_1
编辑:
整个剧本:
import os
from jnius import autoclass
if not os.path.isdir("/sdcard/kivyrecords/"):
os.mkdir("/sdcard/kivyrecords/")
PATH = "/sdcard/kivyrecords/rec{0}.mp4"
class Player(object):
def __init__(self):
# get the MediaPlayer java class
self.MediaPlayer = autoclass('android.media.MediaPlayer')
def play(self, button):
# create our player
mPlayer = self.MediaPlayer()
mPlayer.setDataSource(PATH.format(button))
mPlayer.prepare()
mPlayer.start()
if not mPlayer.isPlaying():
mPlayer.release()
class Recorder(object):
def __init__(self):
# get the needed Java classes
self.MediaRecorder = autoclass('android.media.MediaRecorder')
self.AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
self.OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
self.AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
self.mRecorder = self.MediaRecorder()
def start(self, button):
self.mRecorder.setAudioSource(self.AudioSource.MIC)
self.mRecorder.setOutputFormat(self.OutputFormat.MPEG_4)
self.mRecorder.setOutputFile(PATH.format(button))
self.mRecorder.setAudioEncoder(self.AudioEncoder.HE_AAC)
self.mRecorder.prepare()
self.mRecorder.start()
def stop(self, button):
time.sleep(0.5)
self.mRecorder.stop()
self.mRecorder.release()
self.mRecorder = self.MediaRecorder()
答案 2 :(得分:0)
对于那些在 2021 年努力寻找这个问题的答案的人,请查看 kivy 的 plyer 存储库,尤其是与当前问题 audio recording 相关的存储库。