WAV 文件转成数组

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-14 20:32:18

因在NBM3108/XVF3000中加入开机提示音, 需用把wav文件转成数组,  步骤如下:

1. 用audacity 打开wav文件. 设置采样率为8KHz, 单声道, 然后导出音频, 得到8K/16bit的wav 文件;

2. 用下面的wav2txt.py 生成PCMdata8K16bit.h 文件. 文件中定义了一个 int16_t tonePCM_8KHz16bit[] 数组, 数组元素对应wav 的sample 值.  打开该文件, 把数组前后为0或很小的元素删除, 这样占内存小一点.

3. 把PCMdata8K16bit.h 复制到工作目录, 在程序中加入 #include <CMdata8K16bit.h>. 这样在程序中就可直接引用tonePCM_8KHz16bit[] 数组了.

wav2txt.py 程序源码:


import wave
import numpy as np
import sys
 
wavefile = "Windows Information Bar8k.wav"
textfile = "PCMdata8K16bit.h"
f = wave.open(wavefile, 'rb' )
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
 
print(nchannels)
print(sampwidth)
print(framerate)
print(nframes)
 
Data_str = f.readframes(nframes)
Data_num = np.frombuffer(Data_str,dtype=np.int16)
















datalist = list(Data_num);
f.close()

with open(textfile, 'w+') as outFile:
    outFile.write("#include <stdint.h>\n")
    outFile.write("int16_t tonePCM_8KHz16bit[] = {")
    for index, item in enumerate(datalist):
        outFile.write(str(item))
        outFile.write(',')
    outFile.write('0')
    outFile.write('}') 









 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!