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

使用Microsoft Cognitive Services遇不支持音频格式问题求助

解决方案

1. 修正前端MediaRecorder的录制格式

微软认知服务发音评估要求音频必须是PCM编码的标准WAV格式,参数需满足:16kHz采样率、16位深度、单声道。但浏览器原生MediaRecorder默认输出多为WebM(Chrome/Edge)或其他非PCM编码格式,即便后缀改为.wav,实际编码仍不兼容服务要求。

解决方式:

  • 尝试强制指定MediaRecorder的MIME类型为PCM编码的WAV:
    const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/wav; codecs=1' });
    
  • 若浏览器不支持上述MIME类型,改用第三方库(如Recorder.js)直接录制PCM原始数据,再封装为标准WAV文件。

2. 确保后端IFormFile转存的正确性

前端传的Blob若格式正确,转存时需避免流操作失误:

  • 转存前重置文件流指针,防止读取不完整:
    using (var stream = new FileStream(tempFilePath, FileMode.Create))
    {
        var audioStream = audioFile.OpenReadStream();
        audioStream.Position = 0;
        await audioStream.CopyToAsync(stream);
    }
    
  • 用音频工具(如Audacity)打开转存后的.wav文件,确认编码参数为PCM 16-bit、16kHz、单声道。

3. 修复Python接口调用的两个问题

3.1 解决"Unsupported audio format"错误

  • 调用认知服务时,请求头必须设置Content-Type: audio/wav,且请求体直接传入二进制音频数据,不能做额外编码;
  • Python读取临时文件时,务必用二进制模式:
    with open(temp_wav_path, 'rb') as f:
        audio_data = f.read()
    
  • 确保代码中指定的音频参数(采样率、声道数)与实际文件完全一致。

3.2 解决JSON解析错误"Expecting value: line 1 column 1 (char 0)"

服务返回b'Unsupported audio format'是纯文本错误,并非JSON格式,直接调用response.json()会报错。需先判断响应状态码:

response = requests.post(api_url, data=audio_data, headers=headers)
if response.status_code == 200:
    result = response.json()
else:
    error_msg = response.text or response.content.decode('utf-8')
    print(f"错误信息:{error_msg}")

4. 验证中间文件合法性

将后端转存的临时WAV文件,直接上传至Azure门户的认知服务在线测试工具,确认文件本身是否符合服务要求,排除后端转存或前端录制的问题。

内容的提问来源于stack exchange,提问作者CitrusBoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:37:00