OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15122|回复: 12

WM8978声卡同时录音与播放的程序

[复制链接]

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-7-1 09:06:41 | 显示全部楼层 |阅读模式
WM8978声卡芯片是支持录音的同时进行播放,该功能可以作实时对讲,只需要设置好对应的寄存器即可。以下程序是在原子哥STM32F407探索者开发板的例程上修改的,先附上原理图:


WM8978原理图.jpg

大致思路就是先分别申请好录音与播放使用到的内存,然后对WM8978寄存器进行设置,最后是实现录音与播放功能。下面就贴出对WM8978寄存器的设置程序,录音是通过中断进行,播放可以参考原子哥的音乐播放例程。
void  recorder_init_device(u32 samplerate)
{
recorder_do_init();//录音内存申请
           wav_do_init();//播放内存申请
           WM8978_ADDA_Cfg(1,1);          //开启DAC、ADC
           WM8978_Input_Cfg(1,0,0);   //开启输入通道(MIC&LINE IN)
           WM8978_MIC_Gain(46);       //MIC增益设置      
           WM8978_Output_Cfg(1,0);         //开启DAC输出 ,关闭BYPASS输出   
           app_wm8978_volset(wm8978set.mvol);//输出声音      
           WM8978_I2S_Cfg(2,0);        //飞利浦标准,16位数据长度
           I2S2_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_16b);            //飞利浦标准,主机发送,时钟低电平有效,16位帧长度            I2S2ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_16b);          //飞利浦标准,从机接收,时钟低电平有效,16位帧长度      I2S2ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2);   //配置RX DMA         I2S2_TX_DMA_Init(audiodev.i2sbuf1,audiodev.i2sbuf2,WAV_I2S_TX_DMA_BUFSIZE/2);//配置TX DMA
           i2s_tx_callback=wav_i2s_dma_tx_callback;          //回调函数指向wav_i2s_dma_tx_callback      
           i2s_rx_callback=rec_i2s_dma_rx_callback;//回调函数指rec_i2s_dma_rx_callback
//设置采样率等
      I2S_Play_Stop();
      I2S_Rec_Stop();
      I2S2_SampleRate_Set(samplerate);//录音采样率选择,默认选择22Khz录音
      I2S_Play_Start();     //开始I2S数据发送(主机)
      I2S_Rec_Start();      //开始I2S数据接收(从机)
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-6-9
在线时间
10 小时
发表于 2017-7-14 16:57:20 | 显示全部楼层
能具体一点吗? app_wm8978_volset(wm8978set.mvol);是怎么实现的
回复 支持 1 反对 0

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2017-7-14 17:06:02 | 显示全部楼层
会会问情 发表于 2017-7-14 16:57
能具体一点吗? app_wm8978_volset(wm8978set.mvol);是怎么实现的

具体的可以参考原子哥的音乐播放例程或者综合实验例程,那个比较详细
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-6-9
在线时间
10 小时
发表于 2017-7-14 19:00:41 | 显示全部楼层
我按照您的那个设置了一下  没有声音,怎么设置录音和播放同时进行呢,使用文件吗?两个程序操作一个文件  一个写一个读?
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2017-7-15 08:43:48 | 显示全部楼层
会会问情 发表于 2017-7-14 19:00
我按照您的那个设置了一下  没有声音,怎么设置录音和播放同时进行呢,使用文件吗?两个程序操作一个文件   ...

你是把录音的数据发出去,然后又从其他地方拿到播放的数据,这样来同时录音和播放的吧?主要就是先对WM8978设置好相应的寄存器,录音是在DMA中断里面进行的,这个只要初始化好就可以,播放的话,就看你怎么把获取的数据拿来解码和播放了,我是单独开一个任务来播放的
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-7-17
在线时间
7 小时
发表于 2017-8-1 14:29:13 | 显示全部楼层
请教楼主一个问题,同时录音和放音是在什么情况下进行的?
1:录音后台进行,比如录制FM收音机的音频。播放在前台进行,比如播放任何一首音乐。这时有个问题,如何控制信号的采集频率?录音和放音的采集频率可以不同?
2:录音和放音同时进行,但是是同一个音源,比如录制FM收音机的音频的同时,通过WM8978进行播放。这个过程应该可以直接将录制音源通过8978进行播放了吧?无需再通过I2S发送给8978了,也就是用了一路录制的功能。
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2017-8-1 14:54:48 | 显示全部楼层
yankaiyutong 发表于 2017-8-1 14:29
请教楼主一个问题,同时录音和放音是在什么情况下进行的?
1:录音后台进行,比如录制FM收音机的音频。播 ...

你这个应用也可以,但录音和放音同时进行我们是用在对讲上面的
回复 支持 反对

使用道具 举报

11

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1154
金钱
1154
注册时间
2014-11-9
在线时间
228 小时
发表于 2017-11-17 14:21:17 | 显示全部楼层
能够贴个例程么?
回复 支持 反对

使用道具 举报

11

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-12-21
在线时间
30 小时
发表于 2018-1-6 11:01:42 | 显示全部楼层
我现在在做的比如说正在播放MP3,在不停止播放MP3的前提下播放通过MIC/LINE_IN输入的音频和MP3声音混合通过耳麦播放并录制下来,是不是和您的一样,我用的是VS1053,但是实现不了,就在找WM8978能不能实现
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-8-7
在线时间
4 小时
发表于 2018-3-1 09:09:51 | 显示全部楼层
楼主大大可以告知 app_wm8978_volset(wm8978set.mvol);这个函数的用途嘛,我没有看懂
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-11-19
在线时间
8 小时
发表于 2019-11-30 15:58:15 | 显示全部楼层
会会问情 发表于 2017-7-14 19:00
我按照您的那个设置了一下  没有声音,怎么设置录音和播放同时进行呢,使用文件吗?两个程序操作一个文件   ...

只需设置 wm8978麦克风输入,耳机输出 就能实时播放录音了呀
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-7-31
在线时间
7 小时
发表于 2021-1-31 23:14:58 来自手机 | 显示全部楼层
那个两个dma中断如何写的,
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-8-20
在线时间
3 小时
发表于 2022-6-6 11:57:30 | 显示全部楼层
楼主大大 能分享下源码吗 最近也在调试这个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 15:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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