基于stm32的软件音频解码库libmad移植手册
基于stm32的软件音频解码库libmad移植手册

/* [ch][eo][peo][s][v] */
unsigned int phase;
/* current processing phase */
struct mad_pcm pcm;
/* PCM output */};
此数据结构存放解码合成滤波后的 PCM 数据,pcm 域比较重要:
struct mad_pcm {
FrameSize = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit
例如: Bitrate = 128000, a SamplingRate =44100, and PaddingBit = 1
原创教程
UP MCU 工作室
Libmad 音频解码库移植手册
本手册由 UP MCU 工作室编写,若要转载请注明出处 2012-8-12
UP MCU 工作室 淘宝店:
1
原创教程
UP MCU 工作室
前言
目前,网络上绝大都数关于 MP3 播放器的例子,大都采用 vs1003 这颗硬件解码芯片或 者使用 AT89C51SND1C 这颗含有内部音频解码电路的 NB 单片机,软件音频解码的例子少之又 少。UP MCU 工作室的相关人员花了些时间、精力,研究了目前 linux 领域很常用的一个开 源音频解码库——libmad 的解码流程,并将其成功移植到裸奔的 stm32 平台上。本着资源 共享的奉献精神,本工作室将移植过程整理成手册,发布于网络,希望对大家有用。
3. Libmad 移植
从前面的解码框图中我们知道,使用 libmad 解码,我们只需要把音频文件流读入 给 libmad,然后把解码得到的 PCM 数据进行播放就可以。
用Direct Sound为MP3解码器libmad播放输出

用Direct Sound为MP3解码器libmad播放输出WIN32平台下madplay默认采用WaveOut播放输出,本文实现为其增加Direct Sound输出。
在Windows XP,VC++ 6.0测试通过。
(一)优秀的MP3解码器libmad简介libmad是跨平台的基于命令行的MP3播放解码器,使用定点解码,可用于没有浮点运算的嵌入式系统。
(二)下载及测试1、从官方网站下载madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz,还要从下载libz-1.1.4.tar.gz,共四个文件。
将四个压缩包保存在同一目录,例如d:\madplay。
2、用WINRAR“解码压到当前目录”方法将四个压缩包解压,在d:\madplay下将有四个文件夹:madplay-0.15.2b,libmad-0.15.1b,libid3tag-0.15.1b,libz-1.1.4。
3、用VC++ 6.0打开D:\madplay\madplay-0.15.2b\msvc++下的madplay工程。
修改VC++ 6.0的编译环境:Tools -> Options -> Directories标签 -> Directories框下增加如下两行:D:\MADPLAY\LIBMAD-0.15.1B\MSVC++D:\MADPLAY\LIBID3TAG-0.15.1B点击OK保存设置退出。
再为编译连接后的可执行文件指定运行参数:Project -> settings -> 点中左侧madplay -> 右侧Program arguments框内填入你硬盘上保存的一个MP3文件,例如:D:\MP3\test.mp3,单击OK保存设置退出。
按Ctrl+F5编译连接运行,就可以听到播放你选择的MP3歌曲了。
(三)为madplay增加Direct Sound输出madplay采用WaveOut作为播放输出,用DS输出的优点不再我说了吧。
【STM32H7的DSP教程】第6章ARMDSP源码和库移植方法(MDK5的AC5和AC6)

【STM32H7的DSP教程】第6章ARMDSP源码和库移植⽅法(MDK5的AC5和AC6)第6章 ARM DSP源码和库移植⽅法(MDK5的AC5和AC6)本期教程主要讲解ARM官⽅DSP源码和库的移植以及⼀些相关知识的介绍。
6.1 初学者重要提⽰6.2 DSP库的下载和说明6.3 DSP库版本的区别6.4 DSP库的⼏个重要的预定义宏含义6.5 使⽤MDK的AC6编译器优势6.6 DSP库在MDK上的移植(AC5源码移植⽅式)6.7 DSP库在MDK上的移植(AC5库移植⽅式)6.8 DSP库在MDK上的移植(AC6源码移植⽅式)6.9 DSP库在MDK上的移植(AC6库移植⽅式)6.10 升级到最新版DSP库的⽅法6.11 简易DSP库函数验证6.12 总结6.1 初学者重要提⽰1. MDK请使⽤5.26及其以上版本,CMSIS软件包请使⽤5.6.0及其以上版本。
2. MDK的⼯程创建,下载和调试⽅法,在V7⽤户⼿册有详细说明:。
3. 鉴于MDK的AC6(ARM Compiler 6.X)编译器在浮点处理上的强劲性能,每个例⼦将必做⼀个AC6版,⽽且ARM编译好的DSP库也开始直接采⽤AC6。
4. MDK AC6有两个地⽅在使⽤的时候要注意:⼯程⽬录切记不要有中⽂路径,⽽且不要太长,否则会导致⽆法使⽤go to def以及调试的时候不正常。
MDK AC6⼯程模板的汉字编码问题,在本章6.8⼩节有详细说明。
6.2 DSP库的下载和说明下⾯详细的给⼤家讲解⼀下官⽅DSP库的移植。
6.2.1 DSP库的下载DSP库是包含在CMSIS软件包(Cortex Microcontroller Software Interface Standard)⾥⾯,所以下载DSP库也就是下载CMSIS软件包。
这⾥提供三个可以下载的地⽅:⽅式⼀:STM32CubeH7软件包⾥⾯。
每个版本的Cube软件包都会携带CMSIS⽂件夹,只是版本⽐较⽼,不推荐。
STM32中文参考手册

9.1 DMA简介
9.2 DMA主要特性
9.3 功能描述
STM32F10xxx参考手册
75
75 75 76 76 77 77 77
78
78 78 79 79 80 80 81 82 82
83
83 83 86 86 87 87
88
89
89
89 89
91
91 92 92 92 94
108
9.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)
108
9.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)
110
9.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7)
110
9.4.6 DMA通道x存储器地址寄存器(DMA_CPARx)(x = 1…7)
16
1.3 可用的外设
16
2 存储器和总线构架
17
2.1 系统构架
17
2.2 存储器组织
18
2.3 存储器映像
19
2.3.1 嵌入式SRAM
20
2.3.2 位段
20
2.3.3 嵌入式闪存
21
2.4 启动配置
23
3 CRC计算单元(CRC)
25
3.1 CRC简介
25
3.2 CRC主要特性
25
3.3 CRC功能描述
STM32F10xxx参考手册
38
38 39
39
39 39 40 40 42
45
45
45 45 46
46
48 48 49 49 49 50 50 50 50 50
STM32固件库之DAC

void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct) 用默认值填充 DAC_InitStruct 结构的每一个成员 - DAC_InitStruct : 指向将要被初始化的 DAC_InitTypeDef 结构指针 无 无 DAC_Trigger_None DAC_WaveGeneration_None DAC_LFSRUnmask_Bit0 DAC_OutputBuffer_Enable
输出参数: 返回参数: typedef struct {
无 无
uint32_t DAC_Trigger;
uint32_t DAC_WaveGeneration; uint32_t DAC_LFSRUnmask_TriangleAmplitude; uint32_t DAC_OutputBuffer; }DAC_InitTypeDef; DAC_Trigger DAC 通道 2 触发选择 DAC_Trigger DAC_Trigger_None DAC_Trigger_T6_TRGO DAC_Trigger_T8_TRGO DAC_Trigger_T3_TRGO DAC_Trigger_T7_TRGO DAC_Trigger_T5_TRGO DAC_Trigger_T15_TRGO DAC_Trigger_T2_TRGO DAC_Trigger_T4_TRGO DAC_Trigger_Ext_IT9 DAC_Trigger_Software DAC_WaveGeneration DAC 通道噪声/三角波生成使能 DAC_WaveGeneration DAC_WaveGeneration_None DAC_WaveGeneration_Noise DAC_WaveGeneration_Triangle DAC_LFSRUnmask_TriangleAmplitude DAC 通道屏蔽/幅值选择器 DAC_LFSRUnmask_TriangleAmplitude DAC_LFSRUnmask_Bit0 DAC_LFSRUnmask_Bits1_0 DAC_LFSRUnmask_Bits2_0 DAC_LFSRUnmask_Bits3_0 DAC_LFSRUnmask_Bits4_0 DAC_LFSRUnmask_Bits5_0 DAC_LFSRUnmask_Bits6_0 DAC_LFSRUnmask_Bits7_0 DAC_LFSRUnmask_Bits8_0 DAC_LFSRUnmask_Bits9_0 DAC_LFSRUnmask_Bits10_0 DAC_LFSRUnmask_Bits11_0 DAC_TriangleAmplitude_1 描述 对噪声波屏蔽 DAC 通道 LFSR 位 0 对噪声波屏蔽 DAC 通道 LFSR 位[1:0] 对噪声波屏蔽 DAC 通道 LFSR 位[2:0] 对噪声波屏蔽 DAC 通道 LFSR 位[3:0] 对噪声波屏蔽 DAC 通道 LFSR 位[4:0] 对噪声波屏蔽 DAC 通道 LFSR 位[5:0] 对噪声波屏蔽 DAC 通道 LFSR 位[6:0] 对噪声波屏蔽 DAC 通道 LFSR 位[7:0] 对噪声波屏蔽 DAC 通道 LFSR 位[8:0] 对噪声波屏蔽 DAC 通道 LFSR 位[9:0] 对噪声波屏蔽 DAC 通道 LFSR 位[10:0] 对噪声波屏蔽 DAC 通道 LFSR 位[11:0] 设置三角波振幅为 1 关闭波形生成 使能噪声波形发生器 使能三角波发生器 描述 关闭 DAC 通道触发 TIM6TRGO 事件 TIM8TRGO 事件 ,适用于大容量产品 TIM3TRGO 事件适用于互联型产品 TIM7TRGO 事件 TIM5TRGO 事件 TIM15TRGO 事件,适用于中、小容量产品 TIM2TRGO 事件 TIM4TRGO 事件 外部中断线 9 使能 DAC 通道软件触发 描述
基于STM32芯片的音频播放器设计

基于STM32芯片的音频播放器设计作者:吴社民来源:《科技视界》2014年第07期【摘要】本方案提出一种基于STM32F10X系列芯片的MP3解决方案。
STM32F10x系列芯片是ST公司基于ARM公司的Cortex-M3内核设计的一款低功耗、高性能、低门数、多接口的嵌入式微处理器芯片【关键词】STM32;SD Card;FAT32;MP30 引言本方案采用ST公司的STM32F103VBT6芯片完成MP3/WMA音频文件的解码播放功能。
其中STM32F103VBT6为主控芯片,采用VS1003芯片进行硬件解码,MP3/WMA格式音频文件存储在SD卡中。
由于采用新的数据压缩标准,MP3文件具有良好的音效和始于传输的体积大小。
本方案完成的功能包括:(1)SD卡文件的读写(2)FAT32文件系统的读写(3)支持“上一曲/下一曲”、“顺序播放”功能(4)支持歌词同步1 硬件设计1.1 器件介绍1.1.1 Cortex-M3内核Cortex-M3是ARM公司推出的新一代32位嵌入式微处理器内核。
它采用ARM-V7-M架构,具有高性能、低功耗、少门数的特点;因此,非常适合嵌入式系统领域的设计和应用。
Cortex-M3具有一个与内核系统紧密耦合的嵌套向量终端控制器NVIC(Nested Vectored Interrupt Controller)。
该NVIC可配置8级抢占式、256级优先级的1—240个外部中断,同时支持咬尾中断、迟到中断技术,大大缩短了中断响应时间。
1.1.2 STM32芯片STM32xxx系列芯片是ST公司基于ARM Cortex-M3设计的一个32位微处理器系列。
该系列处理器在继承ARM Cortex-M3内核优点的基础上,扩展了其外部接口、增强其定时器功能、增加了A/D、D/A模块。
1.1.3 VS1003音频解码芯片VS1003是VSL公司生产的一款单片MP3/WMA/MIDI音频解码和ADPCM编码芯片。
MP3软解码库Libmad详细解释

第1章
声明
本文档版权归属于 西安交通大学人工智能与机器人研究所 作者: 李国辉 g h l i @ a i a r . x j t u . e d u . c n
第2章 Mp3 解码算法流程
MP3 的全称为 MPEG1 Layer-3 音频文件, MPEG 音频文件是 MPEG1 标准中的声音部 分,也叫 MPEG 音频层,它根据压缩质分别对应 MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层 次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和 MP2 的压 缩率分别为 4:1 和 6:1-8:1,而 MP3 的压缩率则高达 10:1-12:1。一分钟 CD 音质的音 乐,未经压缩需要 10MB 的存储空间,而经过 MP3 压缩编码后只有 1MB 左右。不过 MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“ 心理声学模型”, 即编码时先对音频文件进行频谱分析,然后再根据心理声学模型把谱线分成若干个阈值分 区,并计算每个阈值分区的阈值,接着通过量化和熵编码对每个谱线进行编码,最后形成具 有较高压缩比的 MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效 果。
2.1. Mp3 文件格式
MP3 文件以一帧为一个编码单元, 各帧编码数据是独立的。 为了清晰而准确地描述 mp3 文件格式,下面采用位流语法描述,这种语法格式与 c 语言近似,易于理解,且描述清晰。 其中粗体表示码流中的数据项,bslbf 代表位串,即“Bit string, left bit first ”,uimsbf 代表无 符号整数,即”unsinged integer, most significant bit first”,数字表示该数据项所占的比特数。
基于STM32的MP3播放器设计与实现

基于STM32的MP3播放器设计与实现设计和实现基于STM32的MP3播放器需要完成以下几个主要步骤:硬件设计、软件编程以及调试。
以下将详细描述每个步骤,并提供基于Keil MDK的完整源代码。
硬件设计:1.硬件平台选择:选择适合于MP3播放器的STM32系列单片机,如STM32F4系列。
2.音频芯片选择:选择具有I2S或SPI接口的音频解码芯片,如VS1053芯片。
3.外设选择:选择适当的外设来控制用户输入(如按键)、显示屏幕和存储介质(如SD卡)。
4.硬件连接:按照芯片和外设的接口要求,连接单片机、音频解码芯片、按键、显示屏幕和SD卡等。
软件编程:1.硬件初始化:初始化单片机和外设的引脚配置、时钟和中断等。
2.外设驱动编写:编写外设的驱动程序,包括音频解码芯片驱动、SD 卡驱动、按键驱动、显示屏幕驱动等。
3.MP3解码器:基于音频解码芯片的通信协议,编写MP3解码器的相关程序,实现文件的解码和音频数据的播放。
4.用户接口:编写用户界面程序,实现按键控制、显示屏幕显示、菜单操作等功能,以便用户操作音乐播放器。
5.文件系统:编写文件系统程序,实现对SD卡中音乐文件的读取和管理。
调试:1. 编译:使用Keil MDK进行编译,检查程序是否能够正确编译通过。
3.调试:通过串口或调试器连接STM32单片机,查看程序运行过程中的输出信息,检查是否存在问题并进行调试。
以下是一个基于STM32F4系列的MP3播放器的部分源代码,完成了初始化、外设驱动、MP3解码器和用户接口的编写。
```c#include "stm32f4xx.h"#include "vs1053.h"#include "sdcard.h"#include "lcd.h"#include "key.h"void Delay(uint32_t nCount)for(; nCount != 0; nCount--);int main(void)LCD_Init(;Key_Init(;VS1053_Init(;SD_Init(;while(1)if (Key_Scan( == KEY_PLAY)SD_Play(;}}void EXTI0_IRQHandler(void)if (EXTI_GetITStatus(EXTI_Line0) != RESET)VS1053_TriggerInterrupt(;EXTI_ClearITPendingBit(EXTI_Line0);}```以上代码只是一个简单的示例,具体实现需要根据所选择的硬件平台和外设来编写相应代码,例如音频解码芯片的驱动程序、SD卡的读写程序等。
基于Qtopia Core的MP3播放器在ARM-Linux平台上的设计与实现

Design and Realization of MP3 Player Based on Qtopia Core in ARM - Linux
作者: 汪英[1] 余展然[2] 彭楚武[2]
作者机构: [1]长沙通信职业技术学院,湖南长沙410015 [2]湖南大学电气与信息工程学院,湖南长沙410082
出版物刊名: 湖南工业职业技术学院学报
页码: 13-15页
主题词: 嵌入式Linux Qtopia Core libmad MP3播放器
摘要:介绍了嵌入式GUI开发环境Qtopia Core和基于定点运算的高精度MPEG音频解码库libmad的移植,然后设计和实现了以ARM-Linux和Qtopia Core为平台的MP3播放器。
该播放器效率高,支持播放列表和均衡器,界面友好,具有全中文界面,能够满足中高端嵌入式产品的需求,在嵌入式产品的应用中具有一定的价值。
大学毕业设计---基于stm32的mp3音频播放器制作

2.2.1 MP3解码芯片选择
使用STM32主控芯片解码有两种方法,第一是通过处理器的软件解码,第二是通专用芯片解码,第一种方法要求芯片运算速度非常高,而且声音不是很流畅,对播放的采样有极大要求,故选择第二种专用芯片解码。
本设计使用解码MP3的芯片是VS1003,它支持WAV格式、MP3格式、MIDI格式、WMA格式等,同时可以设置调整音量高低等,而且还有一个功能是可以支持MICI,此外还可以扩展录音功能。
2.2.2 收音机芯片选择
本设计的收音功能只适用于FM收音,选用TEA5767芯片来实现,TEA芯片是飞利浦公司生产的一款低功耗电调谐调的立体声收音机芯片,该芯片通过IIC总线协议可以直接控制。可以实现调频接收,频率的范围在76MHZ~108MHZ,而且接收的是立体声,带信号强弱指示,但由于芯片体积较小,焊接困难,所以直接采用模块来实现,使用非常方便,可以提高本设计效果,节约时间以及成本。
2.2.4电源芯片选择
本设计要求系统电压输入: 2.5V, 3.3V,5V.所以对电源的处理需要满足能输出以上电压,
系统电源主要包括给数字芯片供电,这些电源需要的功率小,可以选用REG1117-2.5和REG1117-3.3V稳压芯片供给2.5V和3.3V的电压。REG1117的输出电流为800ma,符合设计要求。
图2.4 收音机模块电路
需要注意的是,收音机模块对电源敏感,同时对外部电路的干扰也较大,所以在这里,对模块电源的处理采用了RC滤波加大电容的方式,能有效的降低收音机模块对外部电源的干扰。也能保证收音机模块电源的稳定。图中ANT为天线接口,通过外接天线,可以提高收音机的灵敏度。
移植STM32固件库用于HID双向通信

/a827415225/article/details/51745013移植STM32固件库用于HID双向通信USB的应用中HID类是比较常见的方式。
通过修改STM32 USB固件库V4.0的JOYSTICK 应用,我们实现一个双向USB通信。
一、移植使用STM32源程序为点亮LED灯程序。
首先将USB固件库中有用的函数复制到源函数中,建立LIB文件夹其中放入USB2.0协议函数建立CFG文件夹放入USB应用函数将两个文件夹都放到源工程目录下将文件添加进来,设置好,配置好KEIL软件设置。
二、修改文件1、首先修改platform_config.h函数。
该文件是对于多种芯片对于USB库的支持。
我们使用STM32F103ZET6芯片,所以只保留与之相关的ID项,与USB_DISCONNECT线(PG11)的配置。
修改之后的头文件如下所示2、然后修改hw_config.c中Set_System函数实际上STM32F103zet6不需要对USB端口进行单独的配置,删掉Set_System函数中没用的部分,只对USB_DISCONNECT线(PG11)进行初始化。
修改后的函数如下图所示。
3、接下来修改hw_config.c文件中USB_Cable_Config函数因为我使用的是比较老的神舟III开发板,当PG11为高电平时实现上拉,所以修改后的函数为4、修改USB_Interrupt_Config函数,配置USB_LP_CAN1_RX0_IRQn和USBWakeUp_IRQn中断修改后的函数如下图所示。
5、接下来删掉hw_config.c文件中GPIO_AINConfig函数,没有什么用,只会报错6、删掉与按键相关的设置,因为我们并没有用到,主要是先清除JoyState和Joystick_Send 函数中内容,不用管。
7、最后我们处理USB挂起相关的问题。
在USB固件库中提供挂起相关的处理函数,主要有2个函数需要修改。
基于STM32的PWM音乐播放器应用设计_马志强

基于STM32的PWM音乐播放器应用设计_马志强一、引言随着科技的不断进步和人们对音乐的追求,音乐播放器已经成为人们日常生活中不可或缺的一部分。
本文将介绍一种基于STM32单片机的PWM 音乐播放器应用设计方案。
二、设计方案1.系统结构本系统主要由三个模块组成:音乐数据存储模块、音乐数据解码模块和PWM输出控制模块。
2.音乐数据存储模块音乐数据存储模块主要负责存储音乐文件,可以选择外部存储介质,如SD卡、U盘等。
STM32单片机通过相应的驱动和接口与外部存储介质进行通信。
3.音乐数据解码模块音乐数据解码模块主要负责将存储在外部存储介质上的音乐数据进行解码,转换为数字信号,用于PWM输出控制模块的控制。
可以选择合适的音乐解码芯片,如VS1053等。
4.PWM输出控制模块PWM输出控制模块主要负责控制音乐数据解码后的数字信号输出。
STM32单片机通过相应的PWM输出模块和控制寄存器进行设置和控制。
5.系统功能设计该音乐播放器应用设计方案具备以下功能:-支持常见的音乐文件格式,如MP3、WAV等。
-支持音乐的播放、暂停、停止、上一曲、下一曲等操作。
-支持音量调节功能,并具备音量记忆功能。
-支持音乐列表显示和选择功能。
-支持定时开关机功能,并具备关机记忆功能。
6.软件设计-操作界面:设计简洁、直观的音乐播放器操作界面,可通过按键、旋钮等控制音乐的播放、暂停、切换等操作。
-音乐解码:通过音乐解码芯片将音乐文件解码为数字信号,并通过I2S或SPI等接口传输给STM32单片机进行PWM输出控制。
-控制逻辑:通过编程实现音乐列表的显示和选择功能,控制音乐的播放、暂停、停止、切换等操作。
通过定时器实现定时开关机功能。
-存储管理:通过相应的文件系统和存储管理算法管理音乐文件的存储和读取。
7.硬件设计-选用STM32系列的合适型号单片机,具备足够的存储空间和计算能力。
-选用合适的音乐解码芯片,具备支持常见音乐文件格式的解码能力。
stm32 固件库3.5的移植

stm32 固件库3.5的移植昨天试了试使用STM32固件库3.5,以前都是使用开发板里移植好的例程,所以整了一天才整明白,在这里给大家分享下我的经验,我还是个菜鸟,有说错的地方请大家指出来哦。
我使用的是keil编译器。
首先建立一个工程,在这个工程中加如4个组,我的4个组名分别是 user, startup, CMSIS, stdperiph_driver。
user这个组里主要添加有关你自己工程的函数,有main.c , stm32f10x_conf.h(包含工程中要使用到的外设) , stm32f10x_it.c(中断函数) 。
CMSIS中有core_cm3.c ,system_stm32f10x.c 。
这两个文件都是下载的库压缩包里的,所在目录为STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 。
startup 文件夹里存放stm32 的启动文件,在STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\S TM32F10x\startup\arm 这个文件夹下,因为我使用的芯片是stm32f107VC 是互联型芯片,所以我选择的启动文件是startup_stm32f10x_cl.s 这是个汇编文件。
stdperiph_driver 中放的就是库函数了,在STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\s rc 在这个文件里,把这个文件里的所有*.c文件都添加进去就行了。
对了这些文件的添加只需要添加*.c文件就行了,*.h文件在后面的编译会由编译器自动加上的,*.h的添加在后面会讲到的。
然后就是需要更改的文件了。
这里的许多文件是只读的,要修改的时候得先在文件属性里去掉只读。
开源mp3解码库MAD(libmad)

开源mp3解码库MAD(libmad)开源mp3解码库 MAD (libmad)0 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer、xmms等都是使用这个开源库进行解码的;如果要设计mp3播放器而又不想研究mp3解码算法的话,libmad是个不错的选择。
MAD (libmad)是一个开源的高精度MPEG 音频解码库,支持MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。
LIBMAD 提供 24-bit 的PCM 输出,完全是定点计算,非常适合没有浮点支持的平台上使用。
使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3 数据解码工作。
在 libmad 的源代码文件目录下的 mad.h 文件中,可以看到绝大部分该库的数据结构和 API 等。
MAD is a high-quality MPEG audio decoder. It currently supports MPEG-1and the MPEG-2extension to lower sampling frequencies, as well as the de facto MPEG 2.5 format. All three audio layers — Layer I, Layer II, and Layer III (i.e. MP3) —are fully implemented.MAD does not yet support MPEG-2 multichannel audio (although it should be backward compatible with such streams) nor does it currently support AAC.MAD has the following special features:•24-bit PCM output•100% fixed-point (integer) computation•completely new implementation based on the ISO/IEC standards•available under the terms of the GNU General Public License (GPL)哪些应用程序使用了 MADThe following third party applications use or plan to use MAD for audio decoding. These links are provided for convenience only; no endorsement or any other representation is intended by this list.•AlsaPlayer audio player for UNIX•Apollo audio player for Linux•Aqualung music player for GNU/Linux•Audacity cross-platform audio editor•Audiere high-level audio API•Audio-MPEG Perl module •Avidemux audio editor •avifile media utilities for Linux•BEAST front-end to the Bedevilled Sound Engine •BeatForce computer dj-ing system•Cog audio player for Mac OS X•CoolPlayer audio player for Windows•cplay curses front-end for various audio players •Daisy_player for the blind and visually impairedusing Linux•Domo Qt/MySQL-based music organizer•ELMP-TNG embedded Linux media player•Final Scratch digital vinyl DJ system•Final Scratch Record Box Editor song organizer andutility•freebase SHOUTcast-compatible MP3 player •Geekradio virtual DJ •Gmerlin media player for Linux•GSMP audio editor for Linux•GSPlayer audio player for •MP3do pluggable bash script•MPD remote music player and playlist manager •mpega_libmad clone of mpega.library for Amiga •mpg321GPL command-line replacement for mpg123 •MPlayer movie player for Linux•MQ3 Qt media player •MusicBrainz Tagger automatic metadata (ID3)tagger•MythTV homebrew PVR project•NMM networked multimedia middleware for UNIX •normalize audio file volume normalizer•nvrec audio/video capture toolkit•Ogle DVD player for UNIX •Open Cubic Player for UNIX •OpenRISC 1000open source computing platform •OpiePlayer(part of Opie) media player for the SharpZaurus•OSKit operating system framework•phMAD MP3 player for QNX •pmp3Python/GTK front-end to madplay•Pocket DivX Player media player for Pocket PC•PT/Play(part of Pocket Tcl) media player forLinux handhelds •Rhythmbox music organizer and player for Linux •rtptsaudio audio client for RTP MPEG-2 TransportStreamsPocket PC•GStreamer streaming media framework•juked MP3 jukebox daemon •K3b KDE front-end for CD recording•Kwave sound editor for KDE •LIBWMP3 MP3 player library for Windows•MadFront front-end to madplay for Windows CE •MAD frontend for Windows •madlld MAD low-level API demonstration•madlldlib source code for creating a Win32 DLL •MAD Newton port of MAD for Newton OS•MAD Plug-in for Winamp decoder replacement •madplay audio player for UNIX•MadPlayer JNI port of madplay for Java •Madsoundz MP3 player for Windows•Mike’s Jukebox Distro CD boot image and audioplayer•Mixxx digital dj’ing system•MMIOMP3multimedia extender for OS/2•MOC console audio player •MortPlayer MP3/Ogg player for Pocket PC •scream Python front-end to madplay•ScummVM game interpreter engine•silencer audio silence removal tool •SimpleCDR front-end to various CD audio utilitiesfor Linux•SoX command-line sound processing utility •SQLshout Shoutcast compatible streamingsource client•Squash learning music player•Squirrel Jukebox for Linux •StreamRipperX Internet radio stream applicationfor Mac OS X•Sweep digital audio editor for UNIX•TCVP video and music player, transcoder andstreaming server •TodayPlayer MP3 player for Pocket PC•To Eleven MP3 player for Sega Dreamcast•VDR MP3 Extension for Linux•VideoLAN Client cross-platform multimedia player •winLAME front-end to LAME for Windows•XGMC MIDI sequencer•xine video player for UNIX •XMMP multimedia player for Linux•xmms-mad plug-in for XMMS。
基于STM32的MP3播放器设计与实现(提供MDK完整源码)

本文将介绍一个利用STM32处理器实现简易MP3 Player的设计实例,这个综合应用实例有助于读者了解STM32、SPI接口、SD卡、TIMER、中断、FAT文件系统、USB等的应用。
这里提供了两种设计方案,第一种方案是简易声波播放器,仅使用STM103V100评估板,令计时器TIM4工作在PWM模式下,将wav格式的声波文件从SD卡中读出,由TIM4产生不同频率的方波通过低通滤波器和放大器送喇叭,如图1所示;第二种方案则是简易MP3播放器,还需要使用额外的解码芯片,将MP3格式的文件从SD卡读出,然后送解码芯片解码播放,如图2所示。
本节将先介绍SD卡、FAT16文件格式、VS1003编解码器等关键部分,然后再分别给出两种设计方案的软件设计。
图1 简易声波播放器方案图2 简易MP3 Player方案1 SD卡的结构及读写方法STM103V100评估板有SD连接器,其使用SPI总线与STM32处理器连接,如图3所示。
图3 SD连接器与STM32处理器SPI连接图SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。
本小节仅简要介绍在SPI模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD 卡,可以参考相关资料。
SD卡内部结构及引脚如图4所示。
图4 SD卡内部结构及引脚SD卡主要引脚和功能为:CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz 之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz的频率;CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。
libmad音频解码库分析

libmad音频解码库分析MAD(libmad)是一个开源的高精度MPEG音频解码库,支持MPEG-1标准。
libmad提供24-bit的PCM输出,完全定点计算,非常适合在没有浮点支持的嵌入式硬件平台上使用。
使用libmad提供的一系列API可以实现MP3文件的解码。
“mad.h”头文件定义了libmad的数据结构及API函数[15]。
表4 libmad中的主要数据结构MAD通过回调函数机制来实现解码,每个回调函数会返回一个枚举类型mad_flow,通过mad_flow可以控制解码的过程。
在未经处理的情况下,MAD一般输出32bit,以little endian格式存放在mad_fixed_t中的数据。
但是大多数的声卡并不能支持输出高达32bit 精度的数据,因而还必须对mad_fixed_t进行量化,圆滑处理以及抖动,使到采样信号降到16bit精度。
MAD负责的只是解码的过程,它工作过程是:从外部获取输入,逐帧解码,在解码的过程中返回信息,然后得到解码结果。
开发人员要手动设置输入输出。
编程实现解码的方法为:初始化mad_decoder,里面包含了指向输入、输出、滤波、错误和消息回调函数的指针。
通过mad_decoder_init()实现初始化[16]。
struct mad_decoder decoder;struct my_playbuf playbuf; //设置数据缓冲区mad_decoder_init(&decoder,&playbuf,input_func,header_func,/*filter*/0, output_func, /*error*/ 0, /* message */ 0);在这个初始化函数里面,回调输入函数指向了input_func,处理帧头信息的函数指向了header_func,而输出函数则为output_func。
其它的滤波,错误和信息函数没有设置,置0。
基于STM32的音频解码器

基于STM32的音频解码器
熊锦玲;陈湘萍
【期刊名称】《现代机械》
【年(卷),期】2013(000)002
【摘要】本文介绍了一种基于STM32F103 ZET6的音频解码系统,利用MCU自带的FSMC接口外扩128M的nandflash,用于存储从PC机端拷贝的图片文件和音频文件.存储在flash中的文件利用FAT32文件系统进行管理,然后送LCD和wm8978进行图片显示和音频播放.音频解码芯片wm8978通过I2C和I2S分别和MCU通信,实现音频数据流的传输;LCD通过FSMC接口和MCU链接,实现图片数据流的传输.
【总页数】5页(P76-80)
【作者】熊锦玲;陈湘萍
【作者单位】贵州大学电气工程学院,贵州贵阳550025
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于CW5521的AC3音频解码器优化与接口设计 [J], 张曦
2.基于ARM嵌入式的无损音频解码器研究 [J], 张宁
3.基于WM8741的音频解码器设计 [J], 冀宏斌;罗浩;徐兴
4.基于PCM1794的音频解码器设计 [J], 田其树;滕秋霞
5.基于PCM1794的纯音频解码器的设计与实现 [J], 张志永;孔惠敏;朱涛;夏清华
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中同步及差错检查包括了头解码模块,在主控模块开始运行后,主控模块将比特流的 数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码, 根据它们的信息进行尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混 淆缩减,IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的 PCM 码流,再 由主控模块将其放入输出缓冲区输出到声音播放设备。
FrameSize = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit
例如: Bitrate = 128000, a SamplingRate =44100, and PaddingBit = 1
enum mad_layer layer;
/* audio layer (1, 2, or 3) */
enum mad_mode mode;
/* channel mode (see above) */
int mode_extension;
/* additional mode info */
enum mad_emphasis emphasis;
3. Libmad 移植
从前面的解码框图中我们知道,使用 libmad 解码,我们只需要把音频文件流读入 给 libmad,然后把解码得到的 PCM 数据进行播放就可以。
移植前,我们需要准备好已经能进行文件系统读写的工程模板,相信对文件系统的 应用,大家都不陌生,我采用的是 FatfsR0.09,从 SD 卡中读入 MP3 数据给 libmad 解 码,最后使用 PCM1770 进行 DA 转换。如果有对文件系统移植不熟悉的童鞋,可以参考 我例程中的文件系统移植模板的源码。
unsigned int samplerate;
/* sampling frequency (Hz) */
unsigned short channels;
/* number of channels */
unsigned short length;
/* number of samples per channel */
1.Libmad 简介
LIBMAD 是一个高质量的音频解码库,MAD 的全称是 MPEG Audio Decoder。LIBMAD 目前 支持 MPEG-1、低采样率的 MPEG-2 和 MPEG2.5 格式的 LayerⅠ、LayerⅡ、LayerⅢ(即 MP3) 的解码。
MAD 具有如下特性:
●高精度的 24-BIT PCM 输出;
本手册移植工作所对应的软硬件平台如下: 操作系统:windows XP 开发环境:MDK V4.23 STM 固件库版本号:V3.5.0 主芯片 :STM32F103RET6(512K flash 64KRAM)运行于 72M DA 芯片 :PCM1770PW
由于本人水平有限,文中若有不对的地方,欢迎拍砖。拍砖地址 447926737wangkai@
/* [ch][eo][peo][s][v] */
unsigned int phase;
/* current processing phase */
struct mad_pcm pcm;
/* PCM output */};
此数据结构存放解码合成滤波后的 PCM 数据,pcm 域比较重要:
struct mad_pcm {
●100%使用定点运算;
●完全基于 ISO/IEC 标准;
●支持 GNU GPL 协议。
MAD 完全采用 C 语言编写(里面的 IMDCT 部分和乘法运算可根据平台不同使用汇编来加 快运算速度),它对 MP3 解码算法做了很多优化,非常适合在没有浮点支持的嵌入式环境下 使用。利用 MAD 提供的 API,我们可以很容易的实现音频解码。
enum mad_error error;
/* error code (see above) */};
此数据结构存放解码前的位流数据。
struct mad_synth {
mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
struct mad_header header;
/* MPEG audio header */
int options;
/* decoding options (from stream) */
mad_fixed_t sbsample[2][36][32];
/* synthesis subband filter samples */
};
我们可以在 layer 这个域中得到音频数据所采的层,在 mode 域中得到音频数据的声道 个数,在 birrate 和 samplerete 中得到音频数据的位率(128kbps、384kbps 等等)和采样 率(22KHZ、44.1KHZ、48KHZ 等等)
Libmad 解码分同步方式和异步方式两种,所谓同步方式是指解码函数在解码完一帧 后才返回并带回出错信息,异步方式是指解码函数在调用后立即返回,通过消息传递解码状 态信息。我们采用裸奔的方式,当然只能使用同步解码。
Ok,废话少说,下面我们真正的开始移植
u 添加源码到工程
解压源码包内 libmad-0.15.1b.rar,然后将 libmad-0.15.1b 文件夹复制到工 程目录,把里面所有.c 文件都加入到 MDK 工程,并设置好包含路径,防止.h 和 .bat 文件在编译时被提示找不到,加入后如下图:
UP MCU 工作室 淘宝店:
原创教程
UP MCU 工作室
Libmad 音频解码库移植手册
本手册由 UP MCU 工作室编写,若要转载请注明出处 2012-8-12
UP MCU 工作室 淘宝店:
1
原创教程
UP MCU 工作室
前言
目前,网络上绝大都数关于 MP3 播放器的例子,大都采用 vs1003 这颗硬件解码芯片或 者使用 AT89C51SND1C 这颗含有内部音频解码电路的 NB 单片机,软件音频解码的例子少之又 少。UP MCU 工作室的相关人员花了些时间、精力,研究了目前 linux 领域很常用的一个开 源音频解码库——libmad 的解码流程,并将其成功移植到裸奔的 stm32 平台上。本着资源 共享的奉献精神,本工作室将移植过程整理成手册,发布于网络,希望对大家有用。
下面我们主要分析一下 libmad 里面用到的一些重要数据结构,这些都定义在 mad.h 文 件中。
struct mad_stream { unsigned char const *buffer; unsigned char const *bufend; unsigned long skiplen; int sync; unsigned long freerate; unsigned char const *this_frame; unsigned char const *next_frame; struct mad_bitptr ptr;
MAD 的源码我们可以在 /projects/mad/files/下载到。
UP MCU 工作室 淘宝店:
2
原创教程
UP MCU 工作室ห้องสมุดไป่ตู้
/products/mad 有关于 libmad 的介绍和其他相关的资料, 其中 madlld 这个项目是一个 libmad 低层 API 的 demon,我的解码工作就是移植 libmad 和 利用 madlld 搭好的框架解析 MP3 数据得到 PCM 格式的数据。
unsigned char (*main_data)[MAD_BUFFER_MDLEN];
/* Layer III main_data() */
unsigned int md_len;
/* bytes in main_data */
int options;
/* decoding options (see below) */
mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */};
上面数据结构记录 MPEG 帧解码后 PCM 数据的数据结构,其中 mad_header 这个结 构体比较重要,它的内容如下:
struct mad_header {
mad_fixed_t samples[2][1152];
/* PCM output samples [ch][sample]
*/};
它定义了音频的采样率,声道个数和 PCM 采样数据, 我们用这里面的信息来初始化音 频设备。libmad 是以桢(frame)为单位对 MP3 进行解码的,当正确的解码完一帧数据可 以得到(每声道)1152 个 PCM 数据。那么一帧数据量到底有多少呢?——这个值是变化 的,我们可以用下面的公式来计算:
/* sampling frequency (Hz) */ /* frame CRC accumulator */ /* final target CRC checksum */ /* flags (see below) */ /* private bits (see below) */ /* audio playing time of frame */
/* input bitstream buffer */ /* end of buffer */ /* bytes to skip before next frame */ /* stream sync found */ /* free bitrate (fixed) */ /* start of current frame */ /* start of next frame */ /* current processing bit pointer */