来自访客的编辑:目前围绕这种情况的共识似乎是 Kivy 目前不支持麦克风,我们请求人们帮助移植“音频流”附加组件,以便它可以再次工作。非常感谢任何有助于此的微小工作。更多信息如下。
我尝试让麦克风在 android 上工作,我主要使用 kivy 和 buildozer 我用音频流输出音频,但是该模块太过时了,如果使用输入“录制” GITHub 问题它将不再工作。我无法让录制工作在 pc 上,因为它在我使用记录功能时说“不支持”,在文档上它只提到移动设备,所以没关系。无论如何,它都可以在那些平台上用 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 应用程序。