DMA-DAC音频播放调试笔记


前言

接触了一块国芯的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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DMA是指直接内存访问(Direct Memory Access)技术,它是一种能够在外设设备和内存之间直接进行数据传输的技术。通过DMA,外设设备可以直接读取或写入内存中的数据,而无需经过CPU的干预。因此,DMA可以在一定程度上减轻CPU的负担,提高数据传输效率。 DAC是指数字模拟转换器(Digital-to-Analog Converter),它是一种能够将数字信号转换为模拟信号的设备。DAC将数字信号按照一定的规则转换为对应的模拟信号,使得数字设备可以与模拟设备进行连接和通信。DAC常常用于音频设备、通信设备等需要将数字信号转换为模拟信号的场合。 在产生波形方面,DMADAC都可以起到重要作用。 DMA可以在数据传输方面产生波形,通过将事先存储在内存中的数字数据传输给外设设备,外设设备能够根据这些数字数据生成相应的波形。例如,通过DMA将存储在内存中的数字音频数据传输给音频设备,音频设备可以将这些数字音频数据转换为模拟信号,并产生出对应的声波波形。 DAC则是在数字信号转换为模拟信号的过程中产生波形。通过将数字信号作为输入,DAC按照一定的转换规则将其转换为相应的模拟信号,从而产生出对应的波形。这个过程可以在各个领域中得到应用,例如在音频设备中,DAC可以将音频数据转换为模拟信号,从而产生出音频波形。 综上所述,DMADAC在产生波形方面发挥了各自的作用,DMA通过数据传输实现波形的生成,而DAC则是在数字到模拟转换的过程中产生波形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值