Qt-》QAudioOutput play 播放wav文件

本文介绍如何使用Qt库轻松实现音频播放功能,相比DirectXShow,Qt提供了更简便的API和更高的易用性。通过示例代码演示了文件读取、音频格式设置及播放流程,特别注意了在不同情况下选择合适的`setSampleSize()`参数以避免音频播放问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         用Qt写音频比directxShow方便多了,很好用,初级文章,供大家学习路上少分困难,多份轻松。
#include <QFile>
#include <QAudioFormat>
#include <QAudioOutput>
#include <QSound>

int main()
{
  QFile inputFile;
  inputFile.setFileName("/home/alex/Music/noh.wav");
  inputFile.open(QIODevice::ReadOnly);

  QAudioFormat format;
  format.setFrequency(8000);
  format.setChannels(1);
  format.setSampleSize(8);
  format.setCodec("audio/pcm");
  format.setByteOrder(QAudioFormat::LittleEndian);
  format.setSampleType(QAudioFormat::UnSignedInt);
  QAudioOutput *audio = new QAudioOutput( format, 0);
  audio->start(&inputFile);
  return 0;
}

       setSampleSize() 根据文档,有8 和 16的区别,曾经使用16,导致音频播放出现问题,8就没问题,是拿来别人的外文文章,算是翻译吧。。偷笑

 

 

 

        ref:http://www.qtforum.org/article/34054/should-this-play-a-sound-file-qaudiooutput.html

Qt播放 WAV 音频文件,可以通过多种方法实现。最常见的是使用内置的 `QSound` 类,它提供了简单的接口用于播放 `.wav` 格式的音频文件[^2]。 ### 使用 QSound 播放 WAV 文件 `QSound` 是 Qt 提供的一个简单类,适用于播放短小的音效文件(如按钮点击声、提示音等)。以下是一个基本示例: #### 示例代码 ##### 头文件 `widget.h` ```cpp #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QSound> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: void on_pushButton_clicked(); private: Ui::Widget *ui; QSound* sound; }; #endif // WIDGET_H ``` ##### 源文件 `widget.cpp` ```cpp #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); sound = new QSound(":/clicked.wav"); // 加载资源中的 WAV 文件 } Widget::~Widget() { delete ui; delete sound; } void Widget::on_pushButton_clicked() { sound->play(); // 播放音频 } ``` 在这个例子中,当用户点击按钮时,会触发 `on_pushButton_clicked()` 槽函数并调用 `sound->play()` 来播放音频文件。 ### 注意事项 - **格式限制**:`QSound` 只支持 `.wav` 格式,如果需要播放其他格式的音频,需要先将其转换为 `.wav`。 - **资源管理**:建议将音频文件添加到 Qt 的资源系统中(以 `:/filename.wav` 形式引用),这样可以确保程序打包后音频仍然可用。 - **性能考虑**:对于长时间播放的音频或更复杂的音频处理任务,推荐使用更高级的模块如 `QtMultimedia` 或第三方库(例如 FMOD)。 ### 其他方法 除了 `QSound`,还可以通过以下方式播放音频: - **Qt Multimedia 模块**:提供 `QMediaPlayer` 和 `QAudioOutput` 等类,支持更多音频格式和功能。 - **FMOD**:一个强大的跨平台音频引擎,适合需要复杂音频控制的应用场景。例如: ```cpp FmodMedia::getInstance()->playWav("G:\\QtStudy\\project\\voice_demo\\sound\\system.wav"); ``` 该方法适合嵌入式项目或对音频质量有较高要求的场景[^3]。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值