2

来自访客的编辑:目前围绕这种情况的共识似乎是 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 应用程序。

4

2 回答 2

0

我已经调查过了,您仍然可以使用使用 PyAudio 的 SpeechRecognition 在 PC 中录制音频。对于移动设备,我认为 Buildozer 不支持它,因为我尝试过它并没有用。audiostream 似乎已经过时了,但我还没有尝试过。编辑:我刚刚尝试使用音频流,但我似乎无法让它工作。

于 2021-07-09T04:22:48.137 回答
0

音频流

audiostream 也使用 pyjnius

https://github.com/kivy/audiostream/blob/master/audiostream/platform/plat_android.pyx

from jnius import autoclass
    AudioIn = autoclass('org.audiostream.AudioIn') 

我认为最好的方法是修复音频流,以便其他人也可以使用它,因为在 kivy 的文档中提到使用它:

https://kivy.org/doc/master/api-kivy.core.audio.html

Note
The core audio library does not support recording audio. If you require this functionality, please refer to the audiostream extension.

或者您提取项目的核心功能以便您可以使用它。

音频

我发现使用麦克风的其他项目是 https://pypi.org/project/SpeechRecognition/它使用 pyaudio

但我不知道这是否适用于android。如果没有您的评论,我会认为它有效,因为有人创建了一个 kivy 应用程序来使用它......

https://github.com/jmercouris/speech_recognition

于 2020-01-21T09:15:51.223 回答