+
89
-

回答

uniapp的app端的getRecorderManager是ucloud官方自己实现的一套录音api,有些编码不对,默认的是amr,如果要转换成wav或pcm,需要服务端进行转换,可通过以下代码获取app端的音频编码支持类型

const supportFormats = plus.audio.getRecorder().supportedFormats // ["amr","3gp","aac"] 

服务端amr转pcm

可以借助pydub库来实现。不过pydub本身依赖于ffmpeg工具,所以在使用前需要确保系统中已经安装了ffmpeg。

安装依赖安装ffmpegWindows:可以从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文件的采样率、采样宽度等参数。

网友回复

我知道答案,我要回答