DMA-DAC音频播放调试笔记

前言

接触了一块国芯的M4内核及C0子核的双核芯片,在做音频播放的时候踩了一些坑,这里记录一下使用到的调试工具及方法。
由于签订了保密协议,本文仅使用第三方调试工具提供语音播放的一些思路。

1. 工具

1、语音合成

在线语音合成工具

这个网址上有免费可用的在线合成工具,但是网页静态有一层蒙板,浏览器F12,懂得都懂。下载格式是MP3

DMA-DAC音频播放调试笔记

2、语音格式转换

笔者要求的格式是wav,所以需要将上述合成的语音文件转换成wav格式。
根据自己的要求选择要修改的格式。
譬如笔者要求 8k采样率,4410波特率,8位深的wav原始文件。

2.1 在线转换

在线音频格式转换
DMA-DAC音频播放调试笔记

2.2 Audition转换

选择音频区域,右键单击并将选择另存为:
DMA-DAC音频播放调试笔记

2.3SOX工具转换

下采样:

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

2.数据处理

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)
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-DAC音频播放调试笔记

三、芯片工作流程简述

数据结构初始化
DMA初始化,选择对应地址通道初始化,并给对应中断号分配NVIC
DAC初始化,选择右对齐12位、定时器PIT触发+上升沿触发模式
DMA-DAC关联,配置源目标地址,长度信息等
DAC启动,配置触发.

DMA-DAC音频播放调试笔记

参考

1、sox工具指令-LCCFlccf

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月23日
下一篇 2022年3月23日

相关推荐