- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我当前的代码是:
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);
您分配的所有内容都应在声音播放完毕后释放,否则会发生内存泄漏,事件循环现在将在函数内部运行,因此您可以在本地分配所有内容。
关于c++ - 如何使用QtMultimedia播放wav文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044211/
我已经使用 Qt creator for symbiyan mobile 构建了一个应用程序;现在,我正在尝试使用 Qt 将其转换为桌面应用程序。但是当我更改平台时,它显示 QtMultimedia
有些人似乎可以通过 PyQt5 使用 QtMultimedia。根据旧的 stackoverflow 帖子,它不包含在 PyQt5 中,所以有什么方法可以组合起来? 我正在使用 linux (ubun
我已经使用普通的 apt-get install 方法在 Raspberry Pi 3 上安装了 Qt 和 Qtcreator。一切似乎都工作正常,除了当我尝试构建声明式相机示例或其他多媒体示例时,我
我正在编写的 PyQt5 程序的一部分是接收音频流并播放它。我四处搜索,这是我发现的据说可以工作的代码: url = QtCore.QUrl.fromLocalFile('office theme.m
import QtQuick 2.6 import QtQuick.Controls 1.5 import QtQuick.Dialogs 1.2 import QtMultimedia 5.6 im
我只需要从运行在 Raspberry Pi 上的 QT 5.1 应用程序播放简单的音频 wav 或 mp3 文件。 我的控制台应用程序正在成功构建并部署到 pi。 但是,当我尝试播放文件时收到一条消息
嘿stackies目前正在尝试创建一些基本代码来播放来自本地源的视频文件(试图让它工作然后尝试实现rtsp)。下面是我当前的代码。如果有人能告诉我哪里出了问题,那就太好了。 当前代码因错误而失败 C:
我正在尝试构建一个集成视频的 GUI,为此我需要导入 PyQt5.QtMultimedia。然而,当尝试导入模块(导入 PyQt5.QtMultimedia)时,我收到一个错误:ModuleNotFo
我正在尝试使用 Qt5 和 CMake 编写一个 GUI 应用程序(在 Ubuntu 18.04 下)。我未能将 Qt 多媒体模块集成到我的项目中。 我的CMakeLists.txt: cmake_m
我需要播放一个自定义 AVI 文件,其中包含一个经典视频流、一个音频流还有一个自定义数据流。 自定义流包含由一些自定义小部件可视化的数据;这些小部件只需要在适当的时间将每个自定义框架写入缓冲区。 我们
我在 Ubuntu 12.04 中的 QtMultimedia 模块有一些问题。我在 /usr/include 中找不到它的开发文件.我应该为此安装额外的软件包吗?如果是,它的名字是什么? 注意:我从
我想用 QtMultimedia 播放声音. 在 QMediaPlayer 的情况下,我可以播放 mp3 文件,它是由 gTTS 制作的。 (我认为没关系,但我不喜欢文件保留,除非我执行删除它的代码。
我正在使用 mingw47 开发 Qt 5.0 dekstop 应用程序。我在此应用程序中使用 QtMultimedia 来录制和播放音频。我已经对它进行了调试测试,它可以工作。当我尝试为发布构建它并
我在我的应用程序中使用 QtMultimedia 模块。但是,以下代码在 Windows 中通过,但在 ubuntu 上失败。 #include #include 根据this questio
好吧,像我在教程中看到的那样,但我想保存为音乐播放器的一种可读格式。可能吗? file = new QFile("smth.raw"); file->open(QIODevice::WriteOn
有没有办法使用 QtMultimedia 访问存储在诺基亚 N950 手机上的 MP3 文件的 PCM 原始音频样本? 如果不可能,什么是合理的替代方案。可以相当容易地与现有 Qt 项目集成的东西。我
我正在尝试学习 PyQt5 + qml,到目前为止我尝试的一切都工作正常,但是当我尝试将 QtMultimedia 导入我的 qml 文件时遇到了问题,导致以下错误: plugin cannot be
我正在运行 Ubuntu 10.10,我成功安装了 Qt 4.7.3 SDK(使用 qt 在线安装程序,而不是从包中)并编译了 QtMobility 多媒体模块,所以我的小测试代码编译: QMedia
我的问题可能归结为“模块叫什么”。 我想在 Qt 5.4 中使用 QSound 类,显然“Qt5Multimedia”模块没有与 QtGui 一起引入,QtCore调用时 find_package(Q
我正在 Qt(5) 中开发一个应用程序,基本上我正在尝试使用 QtMultimedia5 将相同的视频源渲染到我窗口中的 2 个位置。我在 QML 中执行此操作,但如果有 C++ 中的解决方案,我会很
我是一名优秀的程序员,十分优秀!