【问题标题】:select audio output divece when using QSoundEffect使用 QSoundEffect 时选择音频输出设备
【发布时间】:2015-04-08 14:29:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ qt audio output avaudioplayer


    【解决方案1】:

    由于 Qt5.7 alsa qt 插件 (libqtaudio_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
    }
    

    【讨论】:

      【解决方案2】:

      我之前用 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();
      

      【讨论】:

      • 这个 sn-p 中的 qeloop 是什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2011-03-13
      相关资源
      最近更新 更多