Kivy和audiostream,无法录制

时间:2015-09-26 19:51:37

标签: android python kivy

我正在使用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,但也无效。

3 个答案:

答案 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 相关的存储库。