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

Qt iOS issue - using QAudioRecorder changes audio output device

本文关键字:音频 输出设备 QAudioRecorder iOS 问题 使用 Qt      更新时间:2023-10-16

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

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

代码在 Android 上运行良好,但出于某种原因,在 iOS 上播放的音乐非常漂亮,即使我在 max 上设置手机音量并调用mediaPlayer->setVolume(100).

通过一次完全的意外,我发现声音不是从主扬声器播放的,而是从用于电话交谈的小扬声器播放的。这给了我一个必要的提示,并帮助追踪问题的根源:

audioRecorder = new QAudioRecorder();

在注释录音机实例的初始化和对它的所有引用后,音频输出恢复正常。但是当我尝试在代码中的任何位置插入它时 - 它会立即再次切换输出,并且我不知道无法将其更改回来。

我尝试过的:

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

  • 使用 QAudioOutput 而不是 QMediaPlayer,并将输出设备设置为默认设备:audioOutput = new QAudioOutput(QAudioDeviceInfo::d efaultOutputDevice (), audioFormat, this);这是另一个问题,因为QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)只返回"default" - QAudioDeviceInfo::availableDevices(QAudio::AudioInput)返回相同的

  • QAudioInput而不是QAudioRecorder的故事相同

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

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

低音量问题是Qt错误,显然尚未修复:https://bugreports.qt.io/browse/QTBUG-37379。

我也遇到了同样的问题,并通过手动破解我的特定用例的Qt源代码来修复它。