【发布时间】:2020-05-06 23:44:03
【问题描述】:
来自访问者的编辑:目前围绕这种情况的共识似乎是 Kivy 目前不支持麦克风,我们请求人们帮助移植“audiostream”插件,以便它可以工作再次。非常感谢任何有助于此的微小工作。更多信息如下。
我尝试让麦克风在 android 上工作,我主要使用 kivy 和 buildozer 我用音频流输出了音频,但是该模块已经过时了,如果使用输入“录音”GITHub Issue 将无法再工作。好吧,我无法在电脑上进行录音,因为一旦我使用录音功能,它就会说“不支持” ,在文件上只提到移动设备,所以没关系。无论如何,它都可以在那些平台上用 pyaudio 替换。
我试图搜索我可以使用的其他选项,所以我遇到了 pyjnius 和 MediaRecorder,我对 java 非常陌生,(并且尝试学习 python atm,所以那里也是新手)所以我无法得到它在职的。 问题在于,我需要将所有麦克风数据转换为字节,这对 pyaudio 来说很容易,而且它可以工作。为什么我在这里,它是 pyaudio 不起作用的 android(至少我还没有尝试将库编译到 android,我知道这可能是可能的,但很多工作..)
这是我必须尝试让它工作的代码:
MediaRecorder = autoclass('android.media.MediaRecorder')
AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
FileOutputStream = autoclass('java.io.FileOutputStream')
gaindata = io.BytesIO()
mRecorder = MediaRecorder()
mRecorder.setAudioSource(AudioSource.MIC)
mRecorder.setOutputFormat(OutputFormat.THREE_GPP)
mRecorder.setOutputFile(gaindata.getBytes())
mRecorder.setAudioEncoder(AudioEncoder.AMR_NB)
mRecorder.prepare()
我知道 FileDescriptor 有一些东西,有一些例子,但它们都在字符串上有空格,所以我不知道如何将它们转换为 python.. 我想要的只是 setOutputFile -> gaindata
如果有另一个选项会很好,我需要来自麦克风的 bytesIO 数据(首选 8000、单声道、不带标题或 GSM6.10 的原始 wav),我将使用声音文件将其转换(是的,我确实编译了 libsndfile.so 到 arm ) 进入 gsm6.10 并将其放入套接字,它是一个 VoIP 应用程序。
【问题讨论】:
标签: java python android kivy pyjnius