You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:15:01