C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 如何使用QtMultimedia播放wav文件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前的代码是:
void Sound::run() {
    QFile audio_file(m@R_673_5550@ePath);
    if(audio_file.open(QIODevice::readOnly)) {
        audio_file.seek(44); // skip wav header
        QByteArray audio_data = audio_file.readAll();
        audio_file.close();

        QBuffer* audio_buffer = new QBuffer(&audio_data);
        qDebug() << audio_buffer->size();

        QAudioFormat format;

        format.setSampleSize(16);
        format.setSampleRate(44100);
        format.setChAnnelCount(2);
        format.setCodec("audio/pcm");
        format.setByteOrder(QAudioFormat::LittleEndian);
        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 = new QAudioOutput(info,format);
        output->start(audio_buffer);
    }
}

整个过程在QThreadPool中作为QRunnable启动,该部分工作正常.问题是我从来没有得到任何音频.我的声音设备正常运行,缓冲区已满.我不知道出了什么问题.我使用app.exec().帮助赞赏.

解决方法

>必须打开设备(QBuffer):
QBuffer audio_buffer(&audio_data);        
audio_buffer.open(QIODevice::readOnly);

> QAudioOutput需要一个事件循环来播放任何东西,并且该循环必须在它所属的线程中运行.当您没有将其显式移动到另一个线程时,它是创建的线程:

// Create the device and start playing...
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);

>当声音播放完毕后,您分配的所有内容都应该被释放,否则您将发生内存泄漏,并且事件循环现在将在@L_944_33@内部运行,因此您可以在本地分配所有内容.

大佬总结

以上是大佬教程为你收集整理的c – 如何使用QtMultimedia播放wav文件?全部内容,希望文章能够帮你解决c – 如何使用QtMultimedia播放wav文件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。