uniapp的app端的getRecorderManager是ucloud官方自己实现的一套录音api,有些编码不对,默认的是amr,如果要转换成wav或pcm,需要服务端进行转换,可通过以下代码获取app端的音频编码支持类型
const supportFormats = plus.audio.getRecorder().supportedFormats // ["amr","3gp","aac"]服务端amr转pcm
可以借助pydub库来实现。不过pydub本身依赖于ffmpeg工具,所以在使用前需要确保系统中已经安装了ffmpeg。
安装依赖安装ffmpeg:Windows:可以从ffmpeg官网下载预编译的二进制文件,解压后将其bin目录添加到系统的PATH环境变量中。Linux:以Ubuntu为例,使用以下命令安装:sudo apt-get update sudo apt-get install ffmpeg安装pydub:使用pip进行安装:
pip install pydub示例代码
from pydub import AudioSegment def amr_to_pcm(amr_file_path, pcm_file_path): try: # 读取AMR音频文件 audio = AudioSegment.from_file(amr_file_path, format="amr") # 保存为PCM格式,这里假设采样宽度为2字节(16位),采样率为8000Hz audio.export(pcm_file_path, format="s16le", parameters=["-ar", "8000"]) print(f"转换成功,PCM文件已保存到 {pcm_file_path}") except Exception as e: print(f"转换失败: {e}") # 使用示例 amr_file = "input.amr" pcm_file = "output.pcm" amr_to_pcm(amr_file, pcm_file)代码解释导入AudioSegment类:从pydub库中导入AudioSegment类,用于处理音频文件。定义amr_to_pcm函数:该函数接受两个参数,分别是AMR文件的路径和要保存的PCM文件的路径。读取AMR文件:使用AudioSegment.from_file方法读取AMR格式的音频文件。导出为PCM文件:使用audio.export方法将音频保存为PCM格式。format="s16le"表示使用16位小端字节序的PCM格式,parameters=["-ar", "8000"]指定采样率为8000Hz。你可以根据实际需求调整采样率等参数。异常处理:使用try-except块捕获可能出现的异常,并打印错误信息。注意事项要保证输入的AMR文件路径是正确的,且文件存在。可以根据实际需求调整PCM文件的采样率、采样宽度等参数。
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?