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

如何在Android中结合麦克风使用TarsosDSP的MFCC

看起来你已经搭好了TarsosDSP结合麦克风实时获取MFCC的基础框架,我来帮你把剩下的代码补全,并且解释清楚每个关键部分的作用~

完整实现代码
import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.io.android.AudioDispatcherFactory;
import be.tarsos.dsp.mfcc.MFCC;

// 提前说明:确保已添加TarsosDSP依赖,比如在build.gradle中引入:
// implementation 'com.github.mthli:TarsosDSP:v2.4.1'

public class RealTimeMfccCapture {
    public void startMfccCapture() {
        int sampleRate = 44100;
        int bufferSize = 8192;
        int bufferOverlap = 128;

        // 从默认麦克风创建音频调度器,负责实时拉取音频数据
        final AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(sampleRate, bufferSize, bufferOverlap);

        // 初始化MFCC处理器:参数依次为缓冲区大小、采样率、梅尔滤波器数量、倒谱系数数量、最低分析频率、最高分析频率
        final MFCC mfcc = new MFCC(bufferSize, sampleRate, 40, 50, 300, 3000);
        dispatcher.addAudioProcessor(mfcc);

        // 添加自定义音频处理器,用于捕获每帧的MFCC结果
        dispatcher.addAudioProcessor(new AudioProcessor() {
            @Override
            public boolean process(be.tarsos.dsp.AudioEvent audioEvent) {
                // 获取当前音频帧的MFCC系数数组
                float[] mfccCoefficients = mfcc.getMFCC();
                
                // 这里可以对MFCC系数做后续业务处理:比如打印日志、存入缓存、输入机器学习模型等
                if (mfccCoefficients != null) {
                    StringBuilder sb = new StringBuilder("当前帧MFCC系数: ");
                    for (float coeff : mfccCoefficients) {
                        sb.append(String.format("%.2f ", coeff));
                    }
                    System.out.println(sb.toString());
                }
                
                // 返回true表示继续处理后续音频帧,返回false则终止整个音频捕获流程
                return true;
            }

            @Override
            public void processingFinished() {
                // 音频捕获停止时的回调:可以在这里释放资源、做收尾逻辑
                System.out.println("MFCC实时捕获已结束");
            }
        });

        // 启动音频调度器线程(dispatcher.run()是阻塞操作,必须放在子线程中执行)
        new Thread(dispatcher, "AudioDispatcher-Worker").start();
    }
}
关键细节说明
  • 音频调度器配置:bufferOverlap设为128是为了让相邻音频帧有重叠区域,避免特征信息丢失,提升MFCC结果的连续性;采样率44100是音频领域的标准采样率,兼容性最好。
  • MFCC参数调整建议:
    • 梅尔滤波器数量建议设为20-40之间(示例中是40)
    • 倒谱系数数量一般取12-20就足够覆盖核心特征(示例中设50是为了展示上限,实际可以按需缩减)
    • 频率范围300-3000Hz覆盖了大部分人声和常见环境音的核心特征区间,如果你处理的是特定音频(比如乐器),可以调整这个范围
  • Android权限要求:别忘了在AndroidManifest.xml中添加麦克风权限:
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
    对于Android 6.0及以上版本,还需要动态申请RECORD_AUDIO权限,否则会直接抛出权限异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:43