MacOS下使用qt+ffmpeg+虚拟声卡(Blackhole 2ch)内录声音报错,求解

使用QT+FFMPEG开发MacOS下内录系统声音首次录制一切正常,停止后再次进行录制出现CMIO_Unit_Converter_Audio.cpp:590:RebuildAudioConverter AudioConverterSetProperty(dbca) failed (1886547824),声音发音异常(像使用了变音器),但是代码中并没有RebuildAudioConverter相关的调用,求解

chatgpt:不喜勿喷
根据错误提示 RebuildAudioConverter AudioConverterSetProperty(dbca) failed 可以初步判断是音频转换器(AudioConverter)的设置或重建时出现了错误。这可能与虚拟声卡有关。

一种可能的解决方案是检查你所使用的虚拟声卡(Blackhole 2ch)的设置是否正确。你可以尝试使用其他虚拟声卡,比如 Soundflower 或 Loopback,看是否能够解决问题。

另一种可能的解决方案是尝试重新安装 ffmpeg,并确保安装了支持音频的所有库。

以下内容部分参考ChatGPT模型:


这个报错可能是因为在录制时发生了一些错误,导致音频转换器需要重新构建。建议检查以下几点:

  1. 确保黑洞虚拟声卡已经正确安装并设置为系统的默认输入设备。

  2. 检查录制代码是否正确,尤其是在停止录制时是否已经正确释放了所有资源。

  3. 检查音频转换器的设置是否正确,可以尝试在录制开始前重新构建音频转换器。

以下是一个简单的录制音频并保存为WAV文件的示例代码,供参考:

#include <QAudioFormat>
#include <QAudioDeviceInfo>
#include <QAudioInput>
#include <QFile>

void recordAudio()
{
    // 设置音频输出格式
    QAudioFormat format;
    format.setSampleRate(44100);
    format.setChannelCount(2);
    format.setSampleSize(16);
    format.setCodec("audio/pcm");
    format.setByteOrder(QAudioFormat::LittleEndian);
    format.setSampleType(QAudioFormat::SignedInt);

    // 获取系统默认音频输入设备
    QAudioDeviceInfo inputDevice = QAudioDeviceInfo::defaultInputDevice();
    if (!inputDevice.isFormatSupported(format)) {
        qDebug() << "Input format not supported!";
        return;
    }

    // 创建音频输入对象
    QAudioInput* audioInput = new QAudioInput(inputDevice, format);

    // 打开文件进行保存
    QFile file("output.wav");
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);

    // 开始录制音频
    audioInput->start(&file);

    // 等待录制完成
    QEventLoop loop;
    QObject::connect(audioInput, &QAudioInput::stateChanged, [&loop](QAudio::State state) {
        if (state == QAudio::StoppedState) {
            loop.quit();
        }
    });
    loop.exec();

    // 关闭录制设备
    audioInput->stop();
    audioInput->deleteLater();
    file.close();
}

如果我的建议对您有帮助、请点击采纳、祝您生活愉快