C++ 使用QSoundEffect时选择音频输出分区

C++ 使用QSoundEffect时选择音频输出分区,c++,qt,audio,output,avaudioplayer,C++,Qt,Audio,Output,Avaudioplayer,我正在使用QSoundEffect播放一些短.wav文件的循环。这个课程是我的解决方案,因为它允许我们播放低延迟的声音 一切都很好,但现在我需要选择输出设备,但我还没有找到使用QSoundEffect执行此操作的方法。我知道使用QAudioDeviceInfo可以获得可用设备的列表,并在QAudioOutput对象的构造函数中使用其中一个设备来播放wav文件,但QAudioOutput不允许我们进行低延迟循环 因此,我需要的是选择音频输出设备的功能,QAudioOutput和QAudioDevi

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

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

因此,我需要的是选择音频输出设备的功能,
QAudioOutput
QAudioDeviceInfo
但是播放
QSoundEffect
提供的低延迟循环的能力


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

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

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
}

不久前,我用QT 5.1.1解决了这个问题,如下所示:

 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();
QByteArray音频数据;
inputFile.seek(44);//跳过wav头
audio_data=inputFile.readAll();
for(int i=0;iopen(QIODevice::ReadOnly);
音频输出->开始(音频缓冲区);//开始测试播放
连接(音频输出,信号(状态更改(QAudio::State)),此,插槽(完成播放(QAudio::State)));
同时(音频输出->状态()==QAudio::ActiveState){
qeloop.exec();
}
音频_data.clear();

此代码段中的
qeloop
是什么?