gpt4 book ai didi

qt - 用QAudioOutput播放ulaw文件

转载 作者:行者123 更新时间:2023-12-02 22:33:59 37 4
gpt4 key购买 nike

我正在尝试建立一个简单的工作示例来播放.raw文件,并且音频似乎失真。播放.raw文件时,我仍然可以辨认出所有内容,它们的失真程度非常高,就像听广播超出范围。

QString mResourcePath ="test.raw";
QFile audio_file(mResourcePath);
if(audio_file.open(QIODevice::ReadOnly)) {
audio_file.seek(4); // skip wav header
QByteArray audio_data = audio_file.readAll();
audio_file.close();

QBuffer audio_buffer(&audio_data);
audio_buffer.open(QIODevice::ReadOnly);
qDebug() << audio_buffer.size();

QAudioFormat format;

format.setSampleSize(8);
format.setSampleRate(8000);
format.setChannelCount(1);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::BigEndian);
format.setSampleType(QAudioFormat::UnSignedInt);


QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format)) {
qWarning()<<"raw audio format not supported by backend, cannot play audio.";

return;
}
qDebug() << info.deviceName();

QAudioOutput output(info, format);
output.start(&audio_buffer);

// ...then wait for the sound to finish
QEventLoop loop;
QObject::connect(&output, SIGNAL(stateChanged(QAudio::State)), &loop, SLOT(quit()));
do {
loop.exec();
} while(output.state() == QAudio::ActiveState);
}

最佳答案

问题的标题表明您希望播放u-law音频,即对数PCM。然而,线

format.setCodec("audio/pcm");

初始化线性PCM的播放。 2种可能的解决方案:
  • 使用适当的日志PCM编解码器初始化播放。文档报告QAudioDeviceInfo::supportedCodecs()将返回受支持的编解码器列表。
  • 实时将对数PCM样本转换为线性PCM。它的影响很小,可以使用查找表来执行。
  • 关于qt - 用QAudioOutput播放ulaw文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322186/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com