【问题标题】:Qt iOS issue - using QAudioRecorder changes audio output deviceQt iOS 问题 - 使用 QAudioRecorder 更改音频输出设备
【发布时间】:2016-07-06 13:59:21
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: c++ ios qt audio qtmultimedia


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      相关资源
      最近更新 更多