HarmonyOS 鸿蒙Next中AVRecorder录制WAV格式的音频文件识别不准确
HarmonyOS 鸿蒙Next中AVRecorder录制WAV格式的音频文件识别不准确 按照官网配置参数使用AVRecorder录制WAV格式,对应参数
let avProfile: media.AVRecorderProfile = {
audioBitrate: 64000, // set audioBitrate according to device ability.
audioChannels: 1, // set audioChannels,valid value 1-8,CFT_WAV supports 1.
audioCodec: media.CodecMimeType.AUDIO_G711MU, // set audioCodec,AUDIO_G711MU matching CFT_WAV.
audioSampleRate: 8000, // set audioSampleRate according to device ability.
fileFormat: media.ContainerFormatType.CFT_WAV // set fileFormat,CFT_WAV.
}
录制后生成的WAV格式音频,使用对应音频调用三方语音转文本接口显示文本异常或不显示,对比相同音频配置(格式wav,采样率:8000,bitRate:16,声道:1),安卓、ios调用接口转文本正常,将使用AVRecorder录制生成的WAV格式音频本地再次转换为wav音频,之后识别是准确的,推测为使用AVRecorder录制生成的WAV格式音频收集不太对,导致不是可准确识别的wav格式。同时目前WAV格式无法更改配置,例如采样率只支持8000,希望可以增加16000及其余配置的可选项。
当前采样率设置16000会报错对应报错信息为
{"code":5400103,"name":"BusinessError"}
希望提高WAV格式的音频质量,及更多配置可选项。
更多关于HarmonyOS 鸿蒙Next中AVRecorder录制WAV格式的音频文件识别不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
伙伴使用AVRecorder录制的是封装了ADPCM(G711编码格式)的wav文件,经过转换后是封装了PCM的wav文件可能不支持。解决方案:AVRecorder录制g711mu编码wav封装的音频文件完成 -> 用ffmpeg转换成pcm编码wav封装的音频文件 -> 语音识别
更多关于HarmonyOS 鸿蒙Next中AVRecorder录制WAV格式的音频文件识别不准确的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个暂时没法提供,转文本接口有对应的鉴权操作,属于内网环境,外部无法直接访问,没法提供,要是需要的话我可以把我这面通过AVRecorder录制的原版音频以及对应音频二次转换后的音频发下,你们可以对比下,转换后的音频调用接口识别是正常的
附件没法直接上传wav,把对应的MP4去掉就可以,对应两个一个是原始音频,一个是再次转换后的
开发者您好,关于问题 WAV格式无法更改配置,采样率只支持8000,设置16000会报错5400103的问题已经复现,正在内部处理中。
您这边说使用对应音频调用三方语音转文本接口显示文本异常或不显示,是否方便提供一个完整的会显示文本异常的demo呢或者提供一下对应的三方库方便复现问题。
RecordConfig(
encoder: AudioEncoder.wav,
numChannels: 1,
sampleRate: 16000,
bitRate: 128000,
)
楼主看一下3楼的答复。
其他平台录制的语音,通过3楼方式,将wav转成pcm,然后通过鸿蒙方法转文字,可以转,但是AVRecorderProfile 生成的wav文件,在其他平台,比如讯飞,就转不出来文字,编码格式也都是一样的,
鸿蒙Next中AVRecorder录制WAV格式音频文件识别不准确,通常与文件头信息或编码参数有关。WAV格式依赖正确的RIFF块描述和fmt子块参数。问题可能源于AVRecorder在设置音频源、采样率、通道数或位深度时,生成的WAV头信息不符合标准解析器的预期。需检查AudioRecorderConfig中的audioSampleRate、audioChannels、audioEncoder等配置是否与WAV规范匹配。
根据您提供的代码和描述,问题核心在于AVRecorder录制WAV格式时,其生成的音频文件头(Header)或编码细节可能不完全符合标准WAV规范,导致第三方语音识别服务无法正确解析。
问题分析:
- 编码格式不匹配:您当前配置的音频编码为
AUDIO_G711MU(即G.711 μ-law)。这是一种在电话系统中常见的压缩编码,并非所有语音识别服务都默认支持或能最优处理此格式的WAV文件。虽然它符合CFT_WAV容器格式,但可能导致兼容性问题。 - 参数限制:如您所述,当前
CFT_WAV容器下,audioSampleRate仅支持8000 Hz,这远低于主流语音识别服务(通常要求16000 Hz或更高)的推荐采样率,会直接影响识别准确率。设置16000 Hz报错5400103正是此限制的体现。 - 文件头信息:AVRecorder生成的WAV文件头可能包含某些特定信息或采用非标准字段,导致部分第三方库解析异常。您提到的“本地再次转换后识别正常”也侧面印证了文件本身数据可能正确,但封装格式存在兼容性问题。
当前可行的解决方案:
由于HarmonyOS Next的AVRecorder对WAV格式的支持目前较为基础,建议采用以下变通方案来获取兼容性更好的音频文件:
-
方案一:录制为MP4(AAC编码),后处理转换为WAV 这是目前最稳定、兼容性最好的方案。
- 将
fileFormat设置为CFT_MPEG_4,audioCodec设置为AUDIO_AAC。 - 设置更高的采样率(如16000、44100 Hz)和比特率。
- 使用AVRecorder录制得到MP4文件。
- 在应用内,使用
@ohos.multimedia.mediaLibrary和@ohos.multimedia.audio等API,或集成第三方Native库(如FFmpeg),将MP4中的AAC音频流提取并转换为标准的PCM WAV文件。HarmonyOS的Audio模块支持PCM数据的读写,可以用于构建标准WAV头。
- 将
-
方案二:使用AudioCapturer获取原始PCM数据,自行封装WAV 如果您需要更底层的控制,可以:
- 使用
@ohos.multimedia.audio中的AudioCapturer组件直接捕获原始PCM音频数据。 - 根据WAV文件格式规范(RIFF头、fmt子块、data子块),在内存中手动构建完整的、标准的WAV文件头。
- 将PCM数据与文件头组合后写入文件。这种方式可以精确控制所有参数(采样率、位深度、声道数),确保生成的文件具有最佳兼容性。
- 使用
关于参数扩展的建议:
您提出的希望增加WAV格式的采样率(如16000 Hz)和编码格式(如AAC、PCM)等配置选项,是提升开发体验和功能完备性的合理需求。这属于HarmonyOS SDK的能力增强范畴。
总结:
当前AVRecorder的CFT_WAV格式主要用于基础、低带宽的音频录制场景(如电话录音),其有限的参数和G.711编码导致了与通用语音识别服务的兼容性问题。建议暂时放弃直接录制WAV格式,转而采用“录制高质量MP4(AAC)后转换”或“捕获PCM后自封装WAV”的方案,这两种方式能可靠地生成被广泛兼容的WAV文件。同时,期待后续SDK版本能对AVRecorder的WAV录制能力进行增强。

