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

Xcode12.4运行MFCC转Wekinator示例报AddInstanceForFactory错误

问题排查与解决方案

1. AddInstanceForFactory 报错说明

该报错为Xcode编译旧版本openFrameworks项目时触发的macOS音频组件兼容警告,对应的CFUUID是系统内置的AUDynamicProcessor音效组件,不会影响核心音频采集逻辑,无需针对性修复,不属于MFCC无数值的诱因。

2. MFCC无数值的修复步骤

  • 修复单声道音频读取逻辑错误
    你当前配置的是单声道输入(ofSoundStreamSetup第二个参数为1),但audioReceived中按双声道交错格式读取输入buffer,属于越界访问,无法拿到正确的音频数据,修改为如下逻辑:
void ofApp::audioReceived   (float * input, int bufferSize, int nChannels){
    for (int i = 0; i < bufferSize; i++){
        lAudioIn[i] = input[i];
        rAudioIn[i] = input[i];
    }
}
  • 修复音频输出缓冲区操作错误
    你将memset清空输出缓冲区的逻辑放在了audioRequested的采样循环内部,每处理一个采样点就清空整个缓冲区,同时没有把输出数据写入系统音频buffer,部分旧版本OF会因此导致音频流中断,修改为如下逻辑:
void ofApp::audioRequested  (float * output, int bufferSize, int nChannels){
    for (int i = 0; i < bufferSize; i++){
        wave = lAudioIn[i];
        if (mfft.process(wave)) {
            mfft.magsToDB();
            oct.calculate(mfft.magnitudesDB);
            mfcc.mfcc(mfft.magnitudes, mfccs);
        }
        output[i*2] = lAudioOut[i];
        output[i*2+1] = rAudioOut[i];
    }
    memset(lAudioOut, 0, initialBufferSize * sizeof(float));
    memset(rAudioOut, 0, initialBufferSize * sizeof(float));
}
  • 可选:手动指定音频输入设备
    若修改后仍无数据,可在setup中调用ofSoundStreamSetup前添加如下代码,确认麦克风设备被正确识别并指定使用:
ofSoundStreamListDevices();
// 替换为控制台打印出的麦克风设备对应的ID
ofSoundStreamSetDevice(0);
  • 可选:初始化MFCC数组默认值
    为避免启动时出现异常随机柱状条,在malloc申请mfccs内存后添加初始化逻辑:
mfccs = (double*) malloc(sizeof(double) * 13);
memset(mfccs, 0, sizeof(double)*13);

完成上述修改后重新编译运行,即可正常采集音频计算MFCC,柱状条会随声音输入正常跳动。

内容的提问来源于stack exchange,提问作者夏磊蕾

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:03