如何使用QtMultedia播放wav文件
How to use QtMultimedia to play a wav file?
我当前的代码是:
void Sound::run() {
QFile audio_file(mResourcePath);
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);
-
当声音播放完毕时,您分配的所有内容都应该被释放,否则会出现内存泄漏,并且事件循环现在将在函数内部运行,因此您可以在本地分配所有内容。
相关文章:
- 尝试使用来自 Win32 WASAPI C++的"捕获流"创建 wav 文件
- 如何从wav文件中获取采样率?
- 写入 wav 文件时定期创建静音
- 如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
- 为什么 XAudio2 仅在系统暂停时播放.wav文件?
- webRTC : 如何通过从WAV文件获得的样本将webRTC的VAD应用于音频
- WAV文件停止功能
- 如何从特定点播放.WAV文件(例如30秒)
- 通过C(或C )中的WAV文件循环
- 开放式阅读WAV文件lib
- 使用C++ / Python的wav文件的FFT
- 在mbed中打开的wav文件数量是否有限制
- 音频编程 SDL - 如何使用 wav 文件在命令行中指定频率切割
- 无法使用两种不同的频率填充 *.wav 文件的缓冲区
- 禁用在使用QAudioRecorder时创建wav文件
- 无论如何,我可以从WAV文件中打印Sox即可打印幅度值
- WAV文件的数据在-1和1之间,C ,SNDFILE
- 如何将.wav文件保存在MFC中(使用文件对话框)
- 分析.WAV 文件
- 用A4色调扩展.WAV文件