首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QSoundEffect时选择音频输出

使用QSoundEffect时选择音频输出
EN

Stack Overflow用户
提问于 2015-04-08 14:29:23
回答 2查看 1.3K关注 0票数 5

我使用QSoundEffect来播放一些简短的.wav文件的循环。这个类是我的解决方案,因为它允许我们播放低延迟的声音。

一切都很好,但是现在我需要选择输出设备,但是我还没有找到用QSoundEffect实现这一点的方法。我知道,使用QAudioDeviceInfo,我可以获得可用设备的列表,并在QAudioOutput对象的构造函数中使用其中的一个设备来播放wav文件,但是QAudioOutput不允许我们进行低延迟循环。

所以问题是,我需要选择QAudioOutputQAudioDeviceInfo的音频输出设备的功能,但是可以播放QSoundEffect提供的低延迟循环。

换句话说,我有我想要的解决方案的所有部分,但我不知道如何将它们组合在一起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-07 10:26:04

由于Qt5.7 alsa qt插件(libqtaudio_alsa.so)使用的是“默认”设备,因此可以在/etc/asound.cfg或~/..asoundrc中配置这个插件,在下面的示例中,我选择dmix作为默认设备:

代码语言:javascript
复制
pcm.dmixed {
    type dmix
    ipc_key 1024
    ipc_key_add_uid 0
    slave.pcm "hw:0,0"
}
pcm.dsnooped {
    type dsnoop
    ipc_key 1025
    slave.pcm "hw:0,0"
}

pcm.duplex {
    type asym
    playback.pcm "dmixed"
    capture.pcm "dsnooped"
}

pcm.!default {
    type plug
    slave.pcm "duplex"
}

ctl.!default {
  type hw
  card 0
}
票数 1
EN

Stack Overflow用户

发布于 2016-10-11 21:17:19

不久前,我用QT5.1.1解决了这个问题,如下所示:

代码语言:javascript
复制
 QByteArray audio_data;
          inputFile.seek(44); // skip wav header
          audio_data = inputFile.readAll();
          for(int i=0;i<4;i++){
              audio_data.append(audio_data);
          }
          QBuffer* audio_buffer = new QBuffer(&audio_data);
          audio_buffer->open(QIODevice::ReadOnly);
          audioOutput->start(audio_buffer);//start test playback
          connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(finishedPlaying(QAudio::State)));
          while(audioOutput->state() == QAudio::ActiveState){
              qeloop.exec();
          }
          audio_data.clear();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29517587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档