Qt iOS问题 - 使用QAudioRecorder更改音频输出设备

时间:2016-03-19 21:56:33

标签: c++ ios qt audio qtmultimedia

并感谢你的帮助

我正在使用Qt技术开发针对两个平台(iOS和Android)的移动应用程序。

应用程序正在录制声音并在经过一些处理后播放它们。为此,我使用了QtMultimedia模块中的两个类:QAudioRecorder,用于录制音频并将其存储到QBuffer中,QMediaPlayer用于从处理缓冲区播放数据。

代码在Android上运行得非常好,但出于某种原因,iOS音乐播放非常快,即使我在最大程度上设置手机音量并调用 mediaPlayer-> setVolume(100)

完全意外的事故我发现声音不是来自主扬声器,而是来自用于电话交谈的小声音。这给了我一个必要的提示,并帮助追查问题的根源:

audioRecorder = new QAudioRecorder();

在评论录音机实例的初始化及其所有引用后,音频输出恢复正常。但是当我尝试将它插入我的代码中的任何地方时 - 它会立即再次打开输出,并且我无法将其更改回来。

我尝试过:

  • 录制完成后删除QAudioRecorder的对象

  • 使用QAudioOutput代替QMediaPlayer并将输出设备设置为默认值: audioOutput = new QAudioOutput(QAudioDeviceInfo :: defaultOutputDevice(),audioFormat,this); 这是另一个问题,因为QAudioDeviceInfo :: availableDevices(QAudio :: AudioOutput)仅返回"默认" - 和QAudioDeviceInfo :: availableDevices(QAudio :: AudioInput)返回相同的

  • 与QAudioInput而不是QAudioRecorder相同的故事

  • 获取QMediaPlayer的QMediaService并从中获取QAudioOutputSelectorControl QMediaService * service = mediaPlayer-> service(); QAudioOutputSelectorControl * outputSelector = qobject_cast(service-> requestControl(QAudioOutputSelectorControl_iid)); 但是此操作返回null

如果您遇到同样的问题或想要解决它,我想听听。我需要的是能够在不切换输出设备的情况下录制音频

1 个答案:

答案 0 :(得分:0)

低容量问题是Qt错误,显然尚未解决:https://bugreports.qt.io/browse/QTBUG-37379

我也面临同样的问题并通过手动黑客攻击我的特定用例的Qt源代码来修复它。