文章目录
- 前言
- 一、工具
- 1、语音合成
- 2、语音格式转换
- 2.1 在线转换
- 2.2 Audition转换
- 2.3 [SOX工具](https://sourceforge.net/projects/sox/files/sox/14.4.2/)转换
- 二、数据处理
- 1、使用python进行进制转换画图等数据处理验证。
- 2、处理结果
- 三、芯片工作流程简述
- 参考资料
前言
接触了一块国芯的M4内核及C0子核的双核芯片,在做音频播放的时候踩了一些坑,这里记录一下使用到的调试工具及方法。
由于签署的保密协议,本文仅使用第三方调试工具,提供一些语音播放方面的思路。
一、工具
1、语音合成
语音在线合成工具
这个网址上有免费可用的在线合成工具,但是网页静态有一层蒙板,浏览器F12,懂得都懂。下载格式是MP3
2、语音格式转换
笔者要求的格式是wav,所以需要将上述合成的语音文件转换成wav格式。
按照自己要求选择需要修改的格式。
譬如笔者要求 8k采样率,4410波特率,8位深的wav原始文件。
2.1 在线转换
2.2 Audition转换
选中音频区域,右键选区存储为:
2.3 SOX工具转换
降采样:
sox input.wav -r 16000 output.wav
位深 变为16位:
sox input.wav -b 16 output.wav
同时实现降采样与改变采样深度
sox input.wav -b 16 -r 16000 output.wav
显示音频的信息:
soxi input.wav
二、数据处理
1、使用python进行进制转换画图等数据处理验证。
import wave
import numpy as np
import pylab as plt
import struct
#打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据。
f = wave.open(r"C:/Users/asdf/Desktop/wav/multi/CCM4202S_8.wav", "rb")
#读取格式信息
#一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
print(nchannels, sampwidth, framerate, nframes)
#读取波形数据
#读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)
B_data = f.readframes(nframes)
f.close()
#将波形数据转换成数组
#需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组
wave_data = np.frombuffer(B_data,dtype = np.uint8)
# 位深16就采用另外一种处理 wave_data = np.frombuffer(B_data,dtype = np.uint16) + 0x8000
# 且文件写入改成'0x%04X, .......
with open("C:/Users/asdf/Desktop/wav/multi/CCM4202S_8.txt", 'w') as fin:
fin.write(''.join(['0x%02X, ' % b for b in wave_data]))
print(len(wave_data))
2、处理结果
三、芯片工作流程简述
数据结构初始化
DMA初始化,选择对应地址通道初始化,并给对应中断号分配NVIC
DAC初始化,选择右对齐12位、定时器PIT触发+上升沿触发模式
DMA-DAC关联,配置源目标地址,长度信息, DMA中断使能等
DAC启动,配置触发.
参考资料
1、sox工具指令-LCCFlccf