Qt C++ 如何指定QAudioRecorder录音文件的自定义存储路径?
QAudioRecorder自定义输出路径配置方案
setOutputLocation未生效几乎都是调用时机、路径格式、依赖配置不符合要求导致的,按以下顺序排查配置即可:
- 设置时机必须在录音启动前
必须在调用record()方法之前配置输出路径,录音启动后再调用setOutputLocation不会生效。如果需要中途修改存储路径,必须先调用stop()停止录音,等待stateChanged信号返回QMediaRecorder::StoppedState状态后再重新设置路径、启动录音。 - 路径必须为合法本地QUrl,且父目录已存在
setOutputLocation接收参数为QUrl类型,直接传入本地路径字符串不会生效,必须通过QUrl::fromLocalFile()构造合法的本地文件链接。另外QAudioRecorder不会自动创建路径中不存在的父目录,需要提前手动创建:// 示例代码 QAudioRecorder *recorder = new QAudioRecorder(this); QString savePath = QStandardPaths::writableLocation(QStandardPaths::MusicLocation) + "/my_records/output.wav"; // 提前创建父目录 QFileInfo saveInfo(savePath); if (!saveInfo.dir().exists()) { saveInfo.dir().mkpath(saveInfo.dir().absolutePath()); } // 传入合法QUrl recorder->setOutputLocation(QUrl::fromLocalFile(savePath)); - 编码格式和文件后缀必须匹配
容器编码格式需要和路径中的文件后缀对应,不匹配时部分平台的多媒体后端会自动忽略自定义路径,回退到默认存储目录。比如设置wav编码时路径后缀必须为.wav,设置mp3编码时后缀为.mp3:QAudioEncoderSettings audioSettings; audioSettings.setCodec("audio/pcm"); audioSettings.setQuality(QMultimedia::HighQuality); // 指定容器格式为wav recorder->setEncodingSettings(audioSettings, QVideoEncoderSettings(), "audio/x-wav"); - 检查平台存储权限
Android、iOS、macOS、Windows 10+ 都需要提前申请对应存储路径的读写权限,权限不足时写入失败会默认回到系统指定的缓存目录。
内容的提问来源于stack exchange,提问作者Kreifox
相关产品推荐
相关产品推荐

