12下一页
返回列表 发新帖 本帖赏金 100.00元(功能说明)
查看: 1719|回复: 50
收起左侧

【完结,领奖中】【活动】【嵌入式音频】第二期:电子音...

[复制链接]
      

54

主题

701

帖子

2342

积分

版主

 楼主| 发表于 2017-3-28 17:27 | 显示全部楼层 |返回版面||阅读模式
本帖最后由 zhanzr21 于 2017-4-10 17:02 编辑





本期代言人是初音miku, 宅男宅女们的偶像.
即使她只是一个代码与电路合成的虚拟幻象.








现在暂离虚幻, 回到现实.拿起板子来, 自己来播放一段音乐.


活动内容:
阅读这一篇文章: 第二篇 嵌入式系统硬件输出系统简介及播放实验(播放篇之一)
找任意一块有DAC的开发板(比如ST的Nucleo,Discovery板子),使用文章叙述的方法,播放任意音乐或者合成音频,上传代码工程即可(注明使用的开发板子,最好给出关键电路图).当然播放Miku的作品是最被欢迎的.
[唯一的限制就是: 请不要直接使用作者公布的参考代码上传, 有改动可以]

更新:大家还是发挥一下子原创精神, 共享文件夹中那个工程作为参考, 直接拿来上传就有点不合适. 你哪怕随便改改采样率, 改改DAC触发的定时器, 小小改动一下子代码结构, 也算通过. 如果你所有的都不改, 就换个板子, 把这个F722 Nucleo的实验移植一下子. 来参加这活动的都是热爱动手的DIYer, 相信这一点不难.

[3-29]更新: 手工帝驾到! @shanan 同学第一次正确提交答案, 来看看作品的照片!

又有几位同学提交了正确的代码:
@jinglixixi,
@Ketose    (Ketose实现的双通道!),
@荣丰宇
@WAMCNCN

活动奖励:

成功上传实验的,还是打赏20.并随机发放一个小礼品

耳机, 蜂蜜,毛巾、插线板、靠垫, 5选一

活动期间:

2017-3-28至2017-4-8


[2017-4-10更新] 这几位同学来领奖, 奖品是现金打赏+小奖品

@shanan (手工帝)
@jinglixixi
@Ketose    (Ketose实现的双通道!),
@荣丰宇
@WAMCNCN
打赏一会就发, 至于奖品, 请发送用户名+收货地址到
board@21ic.com 选择一下子礼品:

耳机, 蜂蜜,毛巾、插线板、靠垫, 5选一
这期活动暂时告一段落, 请期待后面的活动,更加精彩,奖励更加丰厚!
请关注: http://www.21ic.com/eva/audio/




   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x
每天都進步
     

17

主题

1754

帖子

5280

积分

高级工程师

发表于 2017-3-28 17:49 | 显示全部楼层 |返回版面
点赞!

点评

好,快来参加活动!  发表于 2017-3-28 18:18
     

473

主题

2万

帖子

7万

积分

版主

发表于 2017-3-28 18:19 | 显示全部楼层 |返回版面
支持下

点评

好,快来参加活动!  发表于 2017-3-28 18:20
欢迎进入21IC论坛
电子工程师技术交流群:16519783,124545085;
      

10

主题

128

帖子

394

积分

资深技术员

发表于 2017-3-29 10:19 | 显示全部楼层 |返回版面
ST的Nucleo开发板子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

我比较了一下, 你这个是直接把我共享的参考实现的7z文件后缀名改成zip上传的, 即你根本没有打开源文件夹,看也不看就上传这个,肯定不行的.  发表于 2017-3-29 13:48
这个貌似跟我公布的代码一模一样阿, 能不能告诉我改了哪些地方吗?  发表于 2017-3-29 13:22
     

24

主题

583

帖子

1915

积分

助理工程师

发表于 2017-3-29 17:23 | 显示全部楼层 |返回版面
本帖最后由 dawei360 于 2017-4-5 11:03 编辑

   要实现音频的播放,简单的方式就是找个带耳机插孔的ST开发板,比如STM32F769I_Discovery, 该板子自带SAI接口,而且还有WM8994 解码芯片;先来看看STM32F769上硬件电路的实现;

代码实现:
  1. int main(void)
  2. {
  3.   uint32_t PlaybackPosition = PLAY_BUFF_SIZE + PLAY_HEADER;
  4.   CPU_CACHE_Enable();
  5.   HAL_Init();
  6.   SystemClock_Config();

  7.   Playback_Init();

  8.   /* Initialize the data buffer */
  9.   for(int i=0; i < PLAY_BUFF_SIZE; i+=2)
  10.   {
  11.     PlayBuff[i]=*((__IO uint16_t *)(AUDIO_FILE_ADDRESS + PLAY_HEADER + i));
  12.   }
  13.    
  14.   /* Start the playback */
  15.   if(0 != audio_drv->Play(AUDIO_I2C_ADDRESS, NULL, 0))
  16.   {
  17.     Error_Handler();
  18.   }

  19.   if(HAL_OK != HAL_SAI_Transmit_DMA(&SaiHandle, (uint8_t *)PlayBuff, PLAY_BUFF_SIZE))
  20.   {
  21.     Error_Handler();
  22.   }
  23.   
  24.   /* Start loopback */
  25.   while(1)
  26.   {
  27.     BSP_LED_Toggle(LED2);

  28.     /* Wait a callback event */
  29.     while(UpdatePointer==-1);
  30.    
  31.     int position = UpdatePointer;
  32.     UpdatePointer = -1;

  33.     /* Upate the first or the second part of the buffer */
  34.     for(int i = 0; i < PLAY_BUFF_SIZE/2; i++)
  35.     {
  36.       PlayBuff[i+position] = *(uint16_t *)(AUDIO_FILE_ADDRESS + PlaybackPosition);
  37.       PlaybackPosition+=2;
  38.     }

  39.     /* check the end of the file */
  40.     if((PlaybackPosition+PLAY_BUFF_SIZE/2) > AUDIO_FILE_SIZE)
  41.     {
  42.        PlaybackPosition = PLAY_HEADER;
  43.     }
  44.    
  45.     if(UpdatePointer != -1)
  46.     {
  47.     /* Buffer update time is too long compare to the data transfer time */
  48.     Error_Handler();
  49.     }
  50.   }
  51. }
复制代码
实现效果:当LED2开始闪烁时候,就可以通过CN7的耳机孔听到播放的声音了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

你这个是官方的F769的DMA+SAI播放的例子. 以后会有这方面的活动的, 到时候再欢迎来参加. 用官方例子的话,最好是有点原创的改动.  发表于 2017-4-8 21:29
多谢你的参与! 但是与本期文章和活动的方向不是很符合. 现在不是想找最简单的, 或者别人写好的API来实现功能. 而是想探究一下基本原理, 搞点DIY.  发表于 2017-4-8 21:26
就等你了!:-D  发表于 2017-3-29 17:54
     

3

主题

27

帖子

91

积分

初级技术员

发表于 2017-3-29 23:13 | 显示全部楼层 |返回版面
本帖最后由 shanan 于 2017-3-29 23:14 编辑

硬件:

开发板采用某宝上不知名的低价清货的LY-S3A,主要芯片是STM32F103RCT6。
功放采用8002A,BTL输出,应该是AB类功放。
喇叭采用8欧姆0.5W,为了效果更佳,用一次性杯子做音腔,效果比裸奔好多了。


开发板原理图



工程文件:


注意:
工程文件里的RES文件夹附带了一个py脚本,可以把bin转为C语言数组,这样就可以把音频数据连同程序一同烧录。


心得:
音频重采样后,最好做高通滤波,否则小喇叭振得厉害,电流消耗也很大。我试了截止频率500Hz和1KHz的情况,有改善。


其他:
哈哈,千万不要戴耳机听,因为开场音是!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

同学, 你是个手工帝! 有个一次性杯子盛住喇八太有型了!  发表于 2017-3-29 23:36

打赏榜单

zhanzr21 打赏了 20.00 元 2017-04-10
理由:成功参与活动!

     

0

主题

4

帖子

12

积分

实习生

发表于 2017-3-30 09:24 | 显示全部楼层 |返回版面
进来学习下新知识

点评

快来参加活动!  发表于 2017-3-30 15:49

19

主题

88

帖子

273

积分

中级技术员

发表于 2017-3-30 14:57 | 显示全部楼层 |返回版面
我来看看

点评

快来参加活动!  发表于 2017-3-30 15:49
     

3

主题

27

帖子

91

积分

初级技术员

发表于 2017-3-30 20:34 | 显示全部楼层 |返回版面
本帖最后由 shanan 于 2017-4-7 19:05 编辑

谢谢版主的肯定!
这个喇叭是我在做这个音乐盒的时候用的:
http://bbs.21ic.com/forum.php?mo ... 2&page=1#pid7718990
闲来无事,受上面的启发,我把PWM输出也增加到这个工程,PB6和PB7可以直接接喇叭,没有功放也可以听音乐了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x
     

88

主题

646

帖子

2852

积分

初级工程师

发表于 2017-3-31 16:50 | 显示全部楼层 |返回版面
基于KL26Z开发板的音频播放器,音频文件存放再SD卡中,并将音频文件与触摸键或小按键建立对应关系来播放。使用时只需将音频文件名改为1~6.wav即可。

原理图:





源代码:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

这个跟题中意思差不多, 只是既然已经定义了音频数据表格audiodata.h, 又为何要SD卡读取, 如果是直接播放表格数据就更贴题, 不管怎样, 算是实现了功能!  发表于 2017-4-1 14:14

打赏榜单

zhanzr21 打赏了 20.00 元 2017-04-10
理由:成功参加活动

     

47

主题

2547

帖子

7739

积分

高级工程师

发表于 2017-4-1 00:45 | 显示全部楼层 |返回版面
本帖最后由 Ketose 于 2017-4-1 00:47 编辑

在STM32F413ZH的板子上试验成功,用耳机能听到声音。素才用楼主现成的素材。
准备换成双声道的自己来完成。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

挑战一下子双声道, 我们都很看好你!  发表于 2017-4-1 14:18
我最讨厌两种人:一是有种族歧视的; 二是黑人;三是不识数的!
     

88

主题

646

帖子

2852

积分

初级工程师

发表于 2017-4-2 09:15 | 显示全部楼层 |返回版面
jinglixixi 发表于 2017-3-31 16:50
基于KL26Z开发板的音频播放器,音频文件存放再SD卡中,并将音频文件与触摸键或小按键建立对应关系来播放。 ...

只考虑能播放音频的要求就没多改,它以前是本人实现的一个触摸式语音故事书的代码。实物图上的线是连接TFT屏的,已显示图像文件。使用SD卡存储的音频文件可以多些,灵活性能大一点。
     

17

主题

1754

帖子

5280

积分

高级工程师

发表于 2017-4-2 09:59 | 显示全部楼层 |返回版面
早上起来发个帖~
手上正好有一块F722,楼主同款哦~
借用楼主的工程代码,重新定制了stm32Cubemx的IAR工程,这个用起来还真是方便,不用自己写初始化了~

工作后的diy环境大不如以前在实验室的时候,很多条件不具备了,好歹看看


去除了项目不必要的外设,剩下必要的外设
dac做音频输出、dma做数据搬运、tim6做dac输出定时、uart3显示输出信息

音频文件烧了经典的Miku 甩葱歌,虽然只有15秒哦~

定制项目的时候遇到一坑,纪念一下




附上工程代码和音频文件~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

不错, 不过有一个概念搞混了, 这里DAC其实是软件触发更新的,你如果使用TIM6触发更新,那么其实更新了两次, 对音质是有影响的, 自动触发留着下一集  发表于 2017-4-2 12:56

打赏榜单

zhanzr21 打赏了 20.00 元 2017-04-10
理由:成功参加活动

     

38

主题

301

帖子

916

积分

高级技术员

发表于 2017-4-3 12:09 | 显示全部楼层 |返回版面
好活动,支持下!


时间不太多,就改了下输出音频的采样率


因为文件限制,只上传了MAIN.C文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

太忙了就算了额, 记得来参加下次活动, 谢谢参与!  发表于 2017-4-3 16:57
你这不是上传了main.zip吗, 工程打包是一样的, 改了采样率, 定时器的周期没有改,还是125us中断一次额,  发表于 2017-4-3 16:56
可以上传zip文件的, 别人都传成功了.  发表于 2017-4-3 16:53
     

47

主题

2547

帖子

7739

积分

高级工程师

发表于 2017-4-4 22:37 | 显示全部楼层 |返回版面
双通道带PWM指示灯,但是感觉不是很明显。
源码:

音频资源:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

恩的< 的确是双通道, 不明显的原因是因为原始音频两个通道就差不多, 代码中已经表达了双通道意思的!  发表于 2017-4-5 15:10

打赏榜单

zhanzr21 打赏了 20.00 元 2017-04-10
理由:成功参加活动

我最讨厌两种人:一是有种族歧视的; 二是黑人;三是不识数的!
     

0

主题

50

帖子

160

积分

中级技术员

发表于 2017-4-7 08:29 | 显示全部楼层 |返回版面
第二期了,不错
     

45

主题

1765

帖子

5287

积分

高级工程师

发表于 2017-4-7 12:09 | 显示全部楼层 |返回版面
本帖最后由 WAMCNCN 于 2017-4-7 12:15 编辑

学习学习,还不太熟悉,使用例程,更改了采样率为16K。另外使用介绍的软件截取了一段音频。
开发板,前段时间活动的NUCLEO 144 F722ZE。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 手机登录

x

点评

理论上是有损于音质的, 应该设置为软件触发或者无触发(写数据时自动触发)  发表于 2017-4-7 15:07
算是有点改动的, 只是你这DAC事实上跟参考代码一样,是用TIM6触发的软件标志来软件触发的, 而你设置了TIM6溢出触发, 这样的话其实是触发了两次  发表于 2017-4-7 15:06

打赏榜单

zhanzr21 打赏了 20.00 元 2017-04-10
理由:成功参加活动

0

主题

36

帖子

108

积分

中级技术员

发表于 2017-4-10 16:24 | 显示全部楼层 |返回版面
     

24

主题

583

帖子

1915

积分

助理工程师

发表于 2017-4-10 18:03 | 显示全部楼层 |返回版面
dawei360 发表于 2017-3-29 17:23
要实现音频的播放,简单的方式就是找个带耳机插孔的ST开发板,比如STM32F769I_Discovery, 该板子自带SAI ...

抱歉,我理解错了,
      

54

主题

701

帖子

2342

积分

版主

 楼主| 发表于 2017-4-10 19:00 | 显示全部楼层 |返回版面
dawei360 发表于 2017-4-10 18:03
抱歉,我理解错了,

没事情, 这个活动是个系列, 后面还有很多期,
看得出你也是禧欢这个话题的,
希望继续关注, 一起学习进步!
每天都進步
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

关闭

热门推荐上一条 /2 下一条

分享 快速回复 返回顶部 返回列表