发新帖本帖赏金 100.00元(功能说明)我要提问
12下一页
返回列表
打印

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

[复制链接]
3867|51
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanzr21|  楼主 | 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/




   

相关帖子

沙发
荣丰宇| | 2017-3-28 17:49 | 只看该作者
点赞!

使用特权

评论回复
评论
zhanzr21 2017-3-28 18:18 回复TA
好,快来参加活动! 
板凳
mmuuss586| | 2017-3-28 18:19 | 只看该作者
支持下

使用特权

评论回复
评论
zhanzr21 2017-3-28 18:20 回复TA
好,快来参加活动! 
地板
fgh_asd| | 2017-3-29 10:19 | 只看该作者
ST的Nucleo开发板子

f722_nucleo_dactest.zip

900.81 KB

代码

使用特权

评论回复
评论
zhanzr21 2017-3-29 13:48 回复TA
我比较了一下, 你这个是直接把我共享的参考实现的7z文件后缀名改成zip上传的, 即你根本没有打开源文件夹,看也不看就上传这个,肯定不行的. 
zhanzr21 2017-3-29 13:22 回复TA
这个貌似跟我公布的代码一模一样阿, 能不能告诉我改了哪些地方吗? 
5
dawei360| | 2017-3-29 17:23 | 只看该作者
本帖最后由 dawei360 于 2017-4-5 11:03 编辑

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

代码实现:
int main(void)
{
  uint32_t PlaybackPosition = PLAY_BUFF_SIZE + PLAY_HEADER;
  CPU_CACHE_Enable();
  HAL_Init();
  SystemClock_Config();

  Playback_Init();

  /* Initialize the data buffer */
  for(int i=0; i < PLAY_BUFF_SIZE; i+=2)
  {
    PlayBuff[i]=*((__IO uint16_t *)(AUDIO_FILE_ADDRESS + PLAY_HEADER + i));
  }
   
  /* Start the playback */
  if(0 != audio_drv->Play(AUDIO_I2C_ADDRESS, NULL, 0))
  {
    Error_Handler();
  }

  if(HAL_OK != HAL_SAI_Transmit_DMA(&SaiHandle, (uint8_t *)PlayBuff, PLAY_BUFF_SIZE))
  {
    Error_Handler();
  }
  
  /* Start loopback */
  while(1)
  {
    BSP_LED_Toggle(LED2);

    /* Wait a callback event */
    while(UpdatePointer==-1);
   
    int position = UpdatePointer;
    UpdatePointer = -1;

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

    /* check the end of the file */
    if((PlaybackPosition+PLAY_BUFF_SIZE/2) > AUDIO_FILE_SIZE)
    {
       PlaybackPosition = PLAY_HEADER;
    }
   
    if(UpdatePointer != -1)
    {
    /* Buffer update time is too long compare to the data transfer time */
    Error_Handler();
    }
  }
}
实现效果:当LED2开始闪烁时候,就可以通过CN7的耳机孔听到播放的声音了。


使用特权

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

硬件:

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


开发板原理图
LY-S3A(STM32)原理图.pdf (31.6 KB)


工程文件:
STM32_WAV20170329.rar (948.35 KB)

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


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


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

使用特权

评论回复

打赏榜单

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

评论
zhanzr21 2017-3-29 23:36 回复TA
同学, 你是个手工帝! 有个一次性杯子盛住喇八太有型了! 
7
xiaohu941| | 2017-3-30 09:24 | 只看该作者
进来学习下新知识

使用特权

评论回复
评论
zhanzr21 2017-3-30 15:49 回复TA
快来参加活动! 
8
CYJMCU| | 2017-3-30 14:57 | 只看该作者
我来看看

使用特权

评论回复
评论
zhanzr21 2017-3-30 15:49 回复TA
快来参加活动! 
9
shanan| | 2017-3-30 20:34 | 只看该作者
本帖最后由 shanan 于 2017-4-7 19:05 编辑

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

STM32_WAV20170407.rar (949.63 KB)

使用特权

评论回复
10
Ketose| | 2017-4-1 00:45 | 只看该作者
本帖最后由 Ketose 于 2017-4-1 00:47 编辑

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

使用特权

评论回复
评论
zhanzr21 2017-4-1 14:18 回复TA
挑战一下子双声道, 我们都很看好你! 
11
jinglixixi| | 2017-4-2 09:15 | 只看该作者
jinglixixi 发表于 2017-3-31 16:50
基于KL26Z开发板的音频播放器,音频文件存放再SD卡中,并将音频文件与触摸键或小按键建立对应关系来播放。 ...

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

使用特权

评论回复
12
荣丰宇| | 2017-4-2 09:59 | 只看该作者
早上起来发个帖~
手上正好有一块F722,楼主同款哦~
借用楼主的工程代码,重新定制了stm32Cubemx的IAR工程,这个用起来还真是方便,不用自己写初始化了~

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


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

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

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




附上工程代码和音频文件~
嵌入式音频活动二_21IC荣丰宇.zip (3.7 MB)

使用特权

评论回复

打赏榜单

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

评论
zhanzr21 2017-4-2 12:56 回复TA
不错, 不过有一个概念搞混了, 这里DAC其实是软件触发更新的,你如果使用TIM6触发更新,那么其实更新了两次, 对音质是有影响的, 自动触发留着下一集 
13
TCsbx| | 2017-4-3 12:09 | 只看该作者
好活动,支持下!


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


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

捕获_看图王.png (379.35 KB )

捕获_看图王.png

main.zip

5 KB

使用特权

评论回复
14
Ketose| | 2017-4-4 22:37 | 只看该作者
双通道带PWM指示灯,但是感觉不是很明显。
源码:
stm32f4_DAC1.rar (2.97 MB)
音频资源:
bxh.rar (146.21 KB)

使用特权

评论回复

打赏榜单

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

评论
zhanzr21 2017-4-5 15:10 回复TA
恩的< 的确是双通道, 不明显的原因是因为原始音频两个通道就差不多, 代码中已经表达了双通道意思的! 
15
changzhumai| | 2017-4-7 08:29 | 只看该作者
第二期了,不错

使用特权

评论回复
16
WAMCNCN| | 2017-4-7 12:09 | 只看该作者
本帖最后由 WAMCNCN 于 2017-4-7 12:15 编辑

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

f722_t1_dactest.rar (649.48 KB)

使用特权

评论回复

打赏榜单

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

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

使用特权

评论回复
18
dawei360| | 2017-4-10 18:03 | 只看该作者
dawei360 发表于 2017-3-29 17:23
要实现音频的播放,简单的方式就是找个带耳机插孔的ST开发板,比如STM32F769I_Discovery, 该板子自带SAI ...

抱歉,我理解错了,

使用特权

评论回复
19
zhanzr21|  楼主 | 2017-4-10 19:00 | 只看该作者
dawei360 发表于 2017-4-10 18:03
抱歉,我理解错了,

没事情, 这个活动是个系列, 后面还有很多期,
看得出你也是禧欢这个话题的,
希望继续关注, 一起学习进步!

使用特权

评论回复
20
zhanzr21|  楼主 | 2017-4-10 19:02 | 只看该作者
下期活动正在酝酿中, 力求形式更加多样化, 希望给大家带来更多娱乐性, 更多干货内容,



当然奖励也会增加!


使用特权

评论回复
发新帖 本帖赏金 100.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天都進步

91

主题

1013

帖子

34

粉丝