OpenEdv-开源电子网

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

谁用过,stm32的DAC直接播放声音,不知道音质如何???

[复制链接]

25

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2013-9-9
在线时间
21 小时
发表于 2013-12-3 15:21:48 | 显示全部楼层 |阅读模式
谁用过,stm32的DAC直接播放声音,不知道音质如何???
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-9-14
在线时间
4 小时
发表于 2016-9-2 23:51:45 | 显示全部楼层
试过参考原子哥的,利用定时器设定采样率,DAC输出,音质不比手机的差,唯一缺点就是,DAC中断太频繁,容易造成其他模块时序操作异常
回复 支持 1 反对 0

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-9-14
在线时间
4 小时
发表于 2016-9-2 23:57:08 | 显示全部楼层
1.jpg
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-3 15:56:45 | 显示全部楼层
不是很好。
回复 支持 反对

使用道具 举报

25

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2013-9-9
在线时间
21 小时
 楼主| 发表于 2013-12-4 11:09:15 | 显示全部楼层
回复【2楼】正点原子:
不是很好。
---------------------------------
stm32 DAC是12bit的.采用pcm的声音播放(16K采样以上),音质都不好吗?


普通的语音ic,DAC是8bit或9bit的,采用adpcm 4bit的压缩比(8K采样).声音都还可以哦.

对比一下,stm32做出的效果应该更好啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-4 12:03:39 | 显示全部楼层
回复【3楼】cheky77:
---------------------------------
你试试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-12-4
在线时间
0 小时
发表于 2013-12-4 14:25:41 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
播放的声音还可以 !我用STM32 ADC采样 然后用DAC播放 效果还行!
回复 支持 反对

使用道具 举报

27

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
280
金钱
280
注册时间
2013-8-28
在线时间
2 小时
发表于 2013-12-4 17:14:12 | 显示全部楼层
回复【3楼】cheky77:
---------------------------------
回复【4楼】正点原子:
---------------------------------
嗯,DAC,PWM的音质都还行,普通应用足够啦,而且硬件成本可以降低,WAV格式的音频直接送进去就可以了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-4 18:39:57 | 显示全部楼层
能接受就OK。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

45

主题

248

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2013-5-18
在线时间
0 小时
发表于 2014-2-5 20:48:09 | 显示全部楼层
mini板子的RB没有DAC吧?那么VE的呢?是哪个引脚呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-8 17:51:45 | 显示全部楼层
回复【8楼】王军强:
---------------------------------
PA4,PA5
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

45

主题

248

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2013-5-18
在线时间
0 小时
发表于 2014-2-8 19:28:09 | 显示全部楼层
谢谢
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-2-10 10:15:31 | 显示全部楼层
这个不难,
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-2-10 10:18:38 | 显示全部楼层
贴出我写的DA播放PCM的代码
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-2-10 10:29:16 | 显示全部楼层
/*
核心思想,配置定时器,DA,频率为16K,32K等
在读取数据的时候,使用双BUFFER切换,两个缓冲区的大小为64字节,
主循环一直填充BUFFER里面的数据
定时器中断则在BUFFER里面,读取数据
双通道
*/
//idx 要播放的文件编号
//DA_ChNum 要使用的PCM通道编号
void cm_PlayInit(unsigned int idx,unsigned int DA_ChNum)
{
/*
首先获取要播放的PCM音频的数据的起始地址和文件长度
*/
g_ReadSpiStartAdd[DA_ChNum] = cm_PlayInitAddr(idx);

g_ReadSpiEndAdd[DA_ChNum] = cm_PlayInitAddr(idx + 1);
/*
判断DA通道,将两个BUFFER都读取数据
*/
if(!DA_ChNum)
{
SPI_ReadNWords(gb_PCMBuffer1,c_ReadSpiSize_Byte,ReadSpiPcmOffset_Ch1);
g_ReadSpiOffset[DA_ChNum]+=c_ReadSpiSize_Byte;
SPI_ReadNWords(gb_PCMBuffer2,c_ReadSpiSize_Byte,ReadSpiPcmOffset_Ch1);
}
else
{
SPI_ReadNWords(R_DataBuffer1,c_ReadSpiSize_Byte,ReadSpiPcmOffset_Ch2);
g_ReadSpiOffset[DA_ChNum]+=c_ReadSpiSize_Byte;
SPI_ReadNWords(R_DataBuffer2,c_ReadSpiSize_Byte,ReadSpiPcmOffset_Ch2);
}
g_ReadSpiOffset[DA_ChNum] = c_BitClear;
/*
判断是否有DA播放正在进行,
*/
if(!(g_PcmDA_Sts[c_PCM_ID_CH1] | g_PcmDA_Sts[c_PCM_ID_CH2]))//无播放任务,初始化定时器
{
SACM_PCM_Init();
SACM_A1800_DAC_Timer_X1();
}
g_PcmDA_Sts[DA_ChNum] = c_PCM_Playing;//设置某个通道为播放状态
g_FlagPcmEn |= (c_BitSet << DA_ChNum);//使能某个播放通道,为DA输出
}


/*
此函数为主程序调用
*/
void cm_ChangeBuffer(void)
{
if(!g_FlagPcmEn)//判断是否有DA播放那个使能
{
g_FlagPcmEn = c_BitClear;
}
if(g_FlagBufferPcmInit & c_PCM_UpdataCH1)//DA通道1
{
g_FlagBufferPcmInit &=~c_PCM_UpdataCH1;//清楚数据更新标记
g_ReadSpiOffset[c_PCM_ID_CH1]+=c_ReadSpiSize_Byte;//文件长度偏移
g_PcmDA_Sts[c_PCM_UpdataCH1] = c_PCM_Playing;//设置为播放状态
if(g_SendBufferIdx[c_PCM_ID_CH1] == 0)//双BUFFER切换,读取
{
SPI_ReadNWords(gb_PCMBuffer2,c_SendPCM_BufferSize,ReadSpiPcmOffset_Ch1);
}
else
{
SPI_ReadNWords(gb_PCMBuffer1,c_SendPCM_BufferSize,ReadSpiPcmOffset_Ch1);
}
}
if(g_FlagBufferPcmInit & c_PCM_UpdataCH2)
{
g_FlagBufferPcmInit &=~c_PCM_UpdataCH2;
g_ReadSpiOffset[c_PCM_ID_CH2]+=c_ReadSpiSize_Byte;
g_PcmDA_Sts[c_PCM_UpdataCH2] = c_PCM_Playing;
if(g_SendBufferIdx[c_PCM_ID_CH2] == 0)
{
SPI_ReadNWords(R_DataBuffer2,c_SendPCM_BufferSize,ReadSpiPcmOffset_Ch2);
}
else
{
SPI_ReadNWords(R_DataBuffer1,c_SendPCM_BufferSize,ReadSpiPcmOffset_Ch2);
}
}
}
void cm_MainLoop(void)
{
Pcm_ChangeBuffer();
}

void SendIrqBuffer(void)
{
if(!g_FlagPcmEn)
{
g_FlagPcmEn = c_BitClear;
}
if(g_FlagPcmEn & c_PCM_DA_En_Ch1)
{
//大于文件长度,设置播放状态为停止
if(g_ReadSpiOffset[c_PCM_ID_CH1] + g_ReadSpiStartAdd[c_PCM_ID_CH1]  >= g_ReadSpiEndAdd[c_PCM_ID_CH1])
{
g_ReadSpiOffset[c_PCM_ID_CH1] = c_BitClear;
g_PcmDA_Sts[0] = c_PCM_Stop;
return;
}

if(g_IrqSendBufferIdx[c_PCM_ID_CH1] >= c_SendPCM_BufferSize)//数据发送
{//双BUFFER切换
g_IrqSendBufferIdx[c_PCM_ID_CH1] = c_BitClear;
g_SendBufferIdx[c_PCM_ID_CH1]++;
if(g_SendBufferIdx[c_PCM_ID_CH1] >= c_BufferNum)
{
g_SendBufferIdx[c_PCM_ID_CH1] = c_BitClear;
}
g_FlagBufferPcmInit = c_BitSet;
}
if(g_SendBufferIdx[c_PCM_ID_CH1] == 1)
{
*P_DAC_CH1_Data = gb_PCMBuffer2[g_IrqSendBufferIdx[c_PCM_ID_CH1]];//往DA输出数据
}
else
{
*P_DAC_CH1_Data = gb_PCMBuffer1[g_IrqSendBufferIdx[c_PCM_ID_CH1]];
}
g_IrqSendBufferIdx[c_PCM_ID_CH1]++;
}
//ch2
if(g_FlagPcmEn & c_PCM_DA_En_Ch2)
{
if(g_ReadSpiOffset[c_PCM_ID_CH2] + g_ReadSpiStartAdd[c_PCM_ID_CH2]  >= g_ReadSpiEndAdd[c_PCM_ID_CH2])
{
g_ReadSpiOffset[c_PCM_ID_CH2] = c_BitClear;
g_PcmDA_Sts[1] = c_PCM_Stop;
return;
}

if(g_IrqSendBufferIdx[c_PCM_ID_CH2] >= c_SendPCM_BufferSize)
{
g_IrqSendBufferIdx[c_PCM_ID_CH2] = c_BitClear;
g_SendBufferIdx[c_PCM_ID_CH2]++;
if(g_SendBufferIdx[c_PCM_ID_CH2] >= c_BufferNum)
{
g_SendBufferIdx[c_PCM_ID_CH2] = c_BitClear;
}
g_FlagBufferPcmInit |= 2;
}
if(g_SendBufferIdx[c_PCM_ID_CH2] == 1)
{
*P_DAC_CH2_Data = R_DataBuffer2[g_IrqSendBufferIdx[c_PCM_ID_CH2]];
}
else
{
*P_DAC_CH2_Data = R_DataBuffer1[g_IrqSendBufferIdx[c_PCM_ID_CH2]];
}
g_IrqSendBufferIdx[c_PCM_ID_CH2]++;
}
}
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-7-8
在线时间
6 小时
发表于 2014-2-10 16:57:08 | 显示全部楼层

12bit足够了,主要是阶跃噪声影响音质,多加几级有源低通滤波器,效果就好多了

QQ:909428831
回复 支持 反对

使用道具 举报

16

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2014-9-22
在线时间
2 小时
发表于 2015-1-7 13:26:18 | 显示全部楼层
回复【5楼】ximidefeng:
---------------------------------
# ximidefeng
你好,我想用STM32 ADC采样语音,然后用DAC播放,想请教你一下,可以把你的程序发给我参考一下吗?谢谢!!
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-12-10
在线时间
9 小时
发表于 2016-1-12 16:51:11 | 显示全部楼层
您好,很高兴读到您这个帖子,我正好也想做这样的一个方案,可是才疏学浅,您能把代码给我发一份么,我想参考一下,万分感谢!!!我的邮箱是53004011@qq.com;再次感谢
回复 支持 反对

使用道具 举报

11

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2016-1-21
在线时间
35 小时
发表于 2016-3-2 13:28:07 | 显示全部楼层
@ximidefeng,你好!可以将你的ADC采集音频信号,DAC输出的代码给我参考一下吗!O(∩_∩)O谢谢了!qq邮箱: 303458528@qq.com
回复 支持 反对

使用道具 举报

11

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2016-1-21
在线时间
35 小时
发表于 2016-3-2 13:28:38 | 显示全部楼层
@ximidefeng
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-5-16
在线时间
37 小时
发表于 2016-5-18 14:17:35 | 显示全部楼层
你好  ,能发给个代码,谢谢2317218068@qq.com
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-8-17
在线时间
16 小时
发表于 2016-6-1 08:55:04 | 显示全部楼层
我也在研究这个问题,没搞定。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-9-14
在线时间
4 小时
发表于 2016-9-2 23:53:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-10-11
在线时间
0 小时
发表于 2016-10-11 15:24:21 | 显示全部楼层
正点圆子 发表于 2013-12-4 17:14
回复【3楼】cheky77:
---------------------------------
回复【4楼】正点原子:
------------------------- ...

你好,可以把你的源码发给我吗?谢谢你563045009@qq.com
回复 支持 反对

使用道具 举报

4

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
622
金钱
622
注册时间
2016-5-11
在线时间
40 小时
发表于 2017-4-27 14:13:39 | 显示全部楼层
好东西,路过...
回复 支持 反对

使用道具 举报

20

主题

93

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
420
金钱
420
注册时间
2010-12-16
在线时间
20 小时
发表于 2017-12-21 16:01:46 | 显示全部楼层
ximidefeng 发表于 2013-12-4 14:25
**** 作者被禁止或删除 内容自动屏蔽 ****

能不能给我发一份代码,参考一下 ppxia@vip.qq.com,最近也在做这个试验,发现点问题,交流一下,谢谢
我就是我,等待爆发那一刻......
回复 支持 反对

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-6
在线时间
26 小时
发表于 2017-12-21 18:18:50 | 显示全部楼层

好东西,路过...
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-1-31
在线时间
1 小时
发表于 2018-1-31 14:40:22 | 显示全部楼层
ximidefeng 发表于 2013-12-4 14:25
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,我想用STM32 ADC采样语音,然后用DAC播放,可以把你的程序发给我参考一下吗?谢谢!!122547945@qq.com
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-8-15
在线时间
0 小时
发表于 2018-8-15 09:42:09 | 显示全部楼层
你好,5000开发 STM32F051 DAC播放语音代码。可以的话联系我18158195530
回复 支持 反对

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2019-7-5 10:06:19 | 显示全部楼层
可以试过音质还不错,比很多老人家音质好
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-6-20
在线时间
22 小时
发表于 2020-5-23 08:54:44 | 显示全部楼层
你好,我想用STM32 ADC采样语音,然后用DAC播放,可以把你的程序发给我参考一下吗?谢谢!!2521387240@qq.com
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2020-5-29 16:34:00 | 显示全部楼层
有语音IC.便宜,好用,架构别人都搭好了.直接应用 .
回复 支持 反对

使用道具 举报

87

主题

569

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2014-9-30
在线时间
140 小时
发表于 2020-5-29 17:29:28 | 显示全部楼层

你这 都是 wav 文件啊,一首歌 40兆字节吧 ??

按照 CD 音质 44.1 kHz 12比特 双声道 300秒 估算。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2020-5-29
在线时间
4 小时
发表于 2020-5-30 09:21:29 | 显示全部楼层
caosix 发表于 2020-5-29 17:29
你这 都是 wav 文件啊,一首歌 40兆字节吧 ??

按照 CD 音质 44.1 kHz 12比特 双声道 300秒 估算 ...

我猜是外挂Flash或TF卡
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 08:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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