并感谢你的帮助
我正在使用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
如果您遇到同样的问题或想要解决它,我想听听。我需要的是能够在不切换输出设备的情况下录制音频
答案 0 :(得分:0)
低容量问题是Qt错误,显然尚未解决:https://bugreports.qt.io/browse/QTBUG-37379。
我也面临同样的问题并通过手动黑客攻击我的特定用例的Qt源代码来修复它。