我当前的代码是:
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()。感谢你的帮助。
发布于 2012-04-07 06:36:54
QBuffer)必须打开:audio_buffer.open(QIODevice::ReadOnly);
QAudioOutput需要一个事件循环来播放任何内容,并且该循环必须在它所属的线程中运行;QBuffer audio_buffer(&audio_data);当您不显式地将它移动到另一个线程时,它就是在其中创建的线程://创建设备并开始播放...QAudioOutput output(info,format);output.start(&audio_buffer);// ...then等待声音结束退出循环;QObject::connect(&output,SIGNAL(stateChanged(QAudio::QEventLoop )),&loop,SLOT(stateChanged());do { loop.exec();} while(output.state() == QAudio::ActiveState);
https://stackoverflow.com/questions/10044211
复制相似问题