使用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,并确保安装了支持音频的所有库。
这个报错可能是因为在录制时发生了一些错误,导致音频转换器需要重新构建。建议检查以下几点:
确保黑洞虚拟声卡已经正确安装并设置为系统的默认输入设备。
检查录制代码是否正确,尤其是在停止录制时是否已经正确释放了所有资源。
检查音频转换器的设置是否正确,可以尝试在录制开始前重新构建音频转换器。
以下是一个简单的录制音频并保存为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();
}