You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Beeware中使用Android AudioRecord采样麦克风遇歧义错误求助

问题:Beeware中使用Android AudioRecord读取PCM数据的类型歧义错误

我通过Beeware在Python脚本中调用Android的android.media类(MediaPlayer、MediaRecorder、AudioRecord),已在Galaxy23上实现基础音频播放与录制。但我的音频信号处理应用需要PCM格式输出,MediaRecorder无法满足需求,而AudioRecord虽支持PCM采样麦克风信号,却遇到了类型匹配问题:

尝试调用AudioRecord.read(byte[] ...)时传入dtype=np.int8/np.byte的numpy数组,或调用read(float[] ...)时传入dtype=np.float32的numpy数组,均触发歧义错误:

android.media.AudioRecord.read is ambiguous for arguments (ndarray, int, int): options are int android.media.AudioRecord.read(byte[], int, int), int android.media.AudioRecord.read(short[], int, int)

尽管np.int8/np.byte对应Java的signed byte类型,np.float32对应浮点类型,但AudioRecord无法识别numpy数组。由于第三方音频模块无法在Beeware环境中使用,需找到正确调用AudioRecord完成PCM采样的方法。

解决方法

调整后问题已解决,核心是使用Java原生类型数组作为AudioRecord.read()的参数,再将数据转换到numpy数组中处理。完整实现代码如下:

def record_file(self, widget):
    # 创建AudioRecord对象
    self.source = MediaRecorder.AudioSource.MIC
    self.sampleRate = 8000
    self.channel = AudioFormat.CHANNEL_IN_MONO
    self.encoding = AudioFormat.ENCODING_PCM_16BIT
    self.minBufferSize = AudioRecord.getMinBufferSize(self.sampleRate, self.channel, self.encoding)

    self.recorder = AudioRecord(self.source, self.sampleRate, self.channel, self.encoding, self.minBufferSize)
    self.recorder.startRecording()

    # 创建用于存储音频数据的字节数组
    self.byteRate = 2 * self.sampleRate
    self.readTimePeriod = self.minBufferSize / self.byteRate
    self.readArray = np.zeros(self.minBufferSize, dtype=np.int8)
    self.audioData = jarray(jbyte)(self.readArray)

    while True:
        # 等待缓冲区填满
        time.sleep(self.readTimePeriod)

        # 从缓冲区读取音频数据
        self.bytesRead = self.recorder.read(self.audioData, 0, self.minBufferSize, 0)
        
        # 将字节数组中的数据转换到numpy数组
        for i in range(self.minBufferSize):            
             self.readArray[i] = self.audioData[i]

内容的提问来源于stack exchange,提问作者Ariel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:52:26