600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android音乐播放器课程设计报告 音乐播放器课程设计报告

android音乐播放器课程设计报告 音乐播放器课程设计报告

时间:2021-11-19 18:05:03

相关推荐

android音乐播放器课程设计报告 音乐播放器课程设计报告

课 程 设 计 报 告

课程设计名称: 音乐播放器 院 系: 信息工程学院 学生姓名: 班 级: 学 号:

成 绩: 指导教师:

开课时间: - 学年 2 学期

音乐播放器

一、实践的内容和要求

1.1实验内容

学习WAV格式音频播放原理、数字音频接口及的相关知识。了解模拟音频信号和数字音频信号的概念。掌握编写音频播主要内容 放器的方法。实现音频播放,小键盘输入操作。 1.2实验要求

本系统要做一个音乐播放器,使用通用定时器定时,用比较输出功能,输出乐谱频率的方波产生声音,对 3 首歌曲编码, 其支持 WAV 格式音频播放(上键:暂停;左键:上一首;右键:下一首)。利用硬件ARM 嵌入式开发平台、 用于 ARM7TDMI 的 JTAG 仿 真器、PC 机 Pentium100开发实现实现音频播放。主要实现:上一首按键:当点击上一首按键时,当前播放歌曲的上 一首歌首被播放。下一首按键:当点击下一首按键时,当前播放歌曲的下一首歌曲即被 播放。当点击停止键时,当前歌曲即会被停止。 播放界面设计: 在歌曲进行播放时, 界面应包含所有的按键, 并且要歌曲的曲目单。

二、实践原理

WAV播放器系统要求能够对mp3、wav格式的音频文件进行解码,处理起来速度是有要求的,尤其是对320Kbps的MP3格式数据流的处理,必须非常快,才能实现MP3的流畅播放,可供选择的八位机有AVR、PIC,可供选择的32位处理器有SAMSUNG、STM32、ATMEL等。选择MCU优先考虑于拥有丰富的RAM,八位机RAM主要靠扩展,内部RAM一般在4Kbyte以内,32位机里面,SAMSUNG一般不内带RAM,也要外扩。

本实验使用了ARM7处理器,MP3解码可以有两种方法,一是通过ARM处理器软解码,通过对MP3数据格式的解析实现MP3播放,二是通过外部解码芯片直接解码。第一种方法在解码高码率的MP3时,ARM7处理能力吃紧,而且STM32还需要外部DAC来做音频输出,所以采用第二种方法进行解码。MP3常见的解码芯片有VS100X系列和STA01系列,STA01需要外接DAC做音频输出,而VS1003自带DAC,且解码的文件格式包含mp3和wav,另外它还可以实现录音功能,方便以后进行功能的拓展应用。

1

三、实践步骤

3.1功能设计

开机后,先初始化各外设,然后检测字库文件夹是否存在,如果有问题,则提示Error,如果检测无问题,则开始循环播放 SD卡内MUSIC 文件夹里面的歌曲,在 TFTLCD 上显示歌曲名字、播放时间、歌曲总时间、歌曲数目、当前歌曲的编号等信息。KEY0选择下一首,KEY2 选择上一首,KEY_UP 控制暂停/继续播放。 3.2实验步骤

1)初始化 WM8978,这个过程包括软复位、DAC 设置、输出设置 和音量设置等。 2)初始化 I2S,此过程主要设置 SPI_I2SCFGR 寄存器,设置 I2S 模式、I2S 标准、时钟空闲电平和数据帧长等,最后开启 I2S TX DMA,使能 I2S 外设。 在库函数中初始化 I2S 调用的函数为:void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct); 结构体 I2S_InitTypeDef 的定义为:

typedef struct

{ uint16_t I2S_Mode; uint16_t I2S_Standard;

uint16_t I2S_DataFormat; uint16_t I2S_MCLKOutput; uint32_t I2S_AudioFreq;

uint16_t I2S_CPOL; }I2S_InitTypeDef;

第一个参数用来设置 I2S 的模式,也就是设置 SPI_I2SCFGR 寄存器的 I2SCFG 相关位。可以配置为主模式发送 I2S_Mode_MasterTx,主模式接受 I2S_Mode_MasterRx,从模式发送 I2S_Mode_SlaveTx 以及从模式接受 I2S_Mode_SlaveRx 四种模式。第二个参数 I2S_Standard 用来设置 I2S 标准,这个前面已经讲解过。可以设置为:飞利浦 标准 I2S_Standard_Phillips,MSB 对齐标准 I2S_Standard_MSB,LSB 对齐标准

I2S_Standard_LSB 以及 PCM 标准 I2S_Standard_PCMShort。 第三个参数 I2S_DataFormat 用来设置 I2S 的数据通信格式。这里实际包含设置 SPI_I2SCFGR 寄存器的 HCLEN 位(通道长度)以及 DATLEN 位(传输的数据长度)。当我们 设置为 16 位标准格式

I2S_DataFormat_16b 的时候,实际上传输的数据长度为 16 位,通道长度 为 16 位。当我们设置为其他值的时候,通道长度都为 32 位。第四个参数 I2S_MCLKOutput用来设置是否使能主时钟输出。我们实验会使能主时钟输出。第五个参数 I2S_AudioFreq 用来设置 I2S

2

频率。实际根据输入的频率值,会来计算 SPI 预 分频寄存器 SPI_I2SPR 的预分频奇数因子以及 I2S 线性预分频器的值。这里支持 10 中频率:

#define I2S_AudioFreq_192k ((uint32_t)192000) #define I2S_AudioFreq_96k ((uint32_t)96000) #define I2S_AudioFreq_48k ((uint32_t)48000) #define I2S_AudioFreq_44k ((uint32_t)44100) #define I2S_AudioFreq_32k ((uint32_t)32000) #define I2S_AudioFreq_22k ((uint32_t)22050) #define I2S_AudioFreq_16k ((uint32_t)16000) #define I2S_AudioFreq_11k ((uint32_t)11025) #define I2S_AudioFreq_8k ((uint32_t)8000) #define I2S_AudioFreq_Default ((uint32_t)2)

第六个参数 I2S_CPOL 用来设置空闲状态时钟电平,取值为高电平 I2S_CPOL_High 以及低电平 I2S_CPOL_Low。

3)解析 WAV 文件,获取音频信号采样率和位数并设置 I2S 时钟分频器这里,要先解析 WAV 文件,取得音频信号的采样率(fs)和位数(16 位或 32 位),根据这两个参数,来设置 I2S 的时钟分频,这里我们用前面介绍的查表法来设置即可。这是我们单独写了一个设置频率的函数为 I2S2_SampleRate_Set。

4)设置 DMA I2S 播放音频的时候,一般都是通过 DMA 来传输数据的,所以必须配置 DMA,本章我们用 I2S2,其 TX是使用的 DMA1 数据流 4 的通道 0 来传输的。并且STM32F4 的 DMA 具有双缓冲机制,这样可以提高效率,大大方便了我们的数据传输,本章将 DMA1 数据流 4 设置为:双缓冲循环模式,外设和存储器都是 16 位宽,并开启 DMA 传输完成中断(方便填充数据)。

5)编写 DMA 传输完成中断服务函数为了方便填充音频数据,我们使用 DMA 传输完成中断,每当一个缓冲数据发送完后,硬件自动切换为下一个缓冲,同时进入中断服务函数,填充数据到发送完的这个缓冲。

6)开启 DMA 传输,填充数据 最后,我们就只需要开启 DMA 传输,然后及时填充 WAV 数据到 DMA 的两个缓存区即 可。此时,就可以在 WM8978 的耳机和喇叭通道听到所播放音乐了。操作方法为: DMA_Cmd(DMA1_Stream4,ENABLE);//开启 DMA TX 传输,开始播放。

3

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。