OpenEdv-开源电子网

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

USB FM 收音机,全部开源

  [复制链接]

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
发表于 2016-3-1 23:14:05 | 显示全部楼层 |阅读模式
本帖最后由 svwydh 于 2016-3-1 23:12 编辑

功能
1.调台
  刻度盘调台(快捷键:左右键100Khz微调)
  频道列表下拉框选台(快捷键:上下键)
2.搜台
  搜索全部频道并保存到频道列表,可选择是否还保留原有的频道
  搜索上一个可用的频道
  搜索下一个可用的频道
3.频道列表
  频道列表保存在注册表
  全部搜台自动保存和单一频道手动添加删除
  可编辑的频道名称,频道名称永久有效,不会因频道删除而消失
4.其他
  音量调节、开机/休眠,休眠恢复后回到原频道及音量
  可设置开机默认频道音量及频道搜索灵敏度阀值

硬件
  stm32F103C8T6最小板+RDA8705M

开发工具
  VS2010 C#(引用控件 LibUsbDotNet,IrisSkin)
  Keil uVision5(ST-link v2仿真)

     之前都是用AVR单片机,USB就用了AVRUSB模拟的USB,简单的LED控制等都没问题。后来用AVRUSB做了个电话来电弹屏显示姓名部门的东东,需要USB一直在线就发觉AVRUSB会无原因的失去响应(单片机还活着,就是USB没有数据发到PC),还有中断传输也会不固定的丢失最后一帧数据。一直找不到原因只能怀疑洞洞板干扰了,这些问题后来也只能靠软件来解决了。接触STM32很大的原因就是他内置了全速USB,看了例程中有声卡的代码,就想着把输出改成输入再加上收音机模块不就可以做个USB收音机了吗?说干就干。
     第一步,先调通STM32 Speaker声卡例程,精简了代码,把不相干宏定义及其他硬件代码都删除,上电后都正常但一播放就报错,网上找了一遍后发现要把采样率从22k改到22.5k,可能发布时是用在winXP上是支持的,WIN7非标频率就报错了。第一步还算顺利(废话,官方代码还能有什么问题),基本上是在边改边学STM32。
     第二步,把STM32声卡从播放改成录音(先用正弦波表模拟),先要修改USB描述符,没方向网上找,过程不说了,最后是对照着USB官网音频类文档最后的USB Microphone例子一点一点改的。上电后能识别、录音设备中也有了,说明描述符修改OK。为了方便将采样率设到16k(关键不知道22k每帧怎么分配),从最简单的8位单声道开始,直接定义了个16字节正弦波表,每次EP1_IN的时候将这些数据发送出去模拟麦克风数据,这样如果正常应该能听到1Khz的声波。接下来就改程序了,思路很简单,所有与EP1同步端口相关的设置都反一反,out变in,rx变tx,下载上电后没声音,用Bus Hound看了下,每个同步都报错。仿真调试也没用,因为就是进不了EP1_IN中断。接下来又是到处找到处改一直试,断断续续弄了一个多月没结果。最后只能单步执行并查手册检查寄存器,马上找到原因 ,原来改这行时SetEPRxStatus(ENDP1, EP_RX_VALID)时只把参数的RX改到了TX,而函数名却没有改,等于没有启用发送。改好后喇叭中终于发出‘嘟’的声音了。一大半的时间都花在这上面还好最后搞定了。
     第三步,搞定FM模块和ADC;FM模块我买了两种:TEA5767和RDA5807,测收音机代码时因RDA5807能直接推动耳机所以就一直就用RDA5807了。RDA5807的信号很好,不接天线都能收到很多台,不过底噪较大且与音量无关,不知道5767能否好点?RDA5807用了网上现成的代码,上电后程序中直接调到信号最好的频道。ADC端口连接FM左声道,在每次定时器16K的中断中读取ADC数据并手动开启下一次转换,EP1_IN时用ADC数据代替正弦波表模拟数据,现在插入usb就能听到广播了,音质还是可以的,只是没有上位机不能控制调台。本来还考虑处理USB的断流和溢出问题,后来看了下什么都不做好像也没什么问题的。
     第四步,上位机程序开发。windows开发只会C#,USB库用了LibUsbDotNet,好处是不用开发驱动,也很简单几句代码就可以了。上位机基本控制(调台、音量、开关、收音机状态回传)都通过EP0的控制传输,在usb_prop.c中增加相应代码处理就可以了。这样有了上位机的操作最基本的USB收音机就算做好了。不过搜索频道时有了问题,全部频道搜索大概要十多秒才能完成,用控制传输早就超时了,所以只能再增加中断传输端口了,搜到一个台就发送一个数据,同时也能在上位机中显示搜索状态。USB原有的2个接口都是标准音频类的,我也不确定加了中断端口是否会有影响,就再开第3个接口吧(用到输入输出2个端点,其实1个输入端点就可以了,为代码验证搜台就都用了中断端点,因同步端点将来要增加缓存,将同步端口改到了EP2,EP1用作中断端口),命名为Usb Radio Control。原来audio标准类是不需要驱动,现在加了个普通接口就需要驱动程序了(如改成HID类也可以是无驱的),很简单用LibUsbDotNet的USB InfWizard生成就可以了。USB开发其实是比较复杂的,USB协议、描述符、PC驱动,上位机等等,最大的问题是电脑驱动和上位机,好像还都需要用C++,我觉得一大半的单片机学习者都没有经验的,想象下你做了个USB控制LED这样最简单的单片机程序却没有上位机测试时该何等的尴尬?这里强烈推荐下LibUsbDotNet,有.net经验的(C#,VB)都能很快上手,而在这个程序中也演示了控制传输和中断传输的使用方法。
     最后,原想着要优化代码,将采样率和采样位数增加到32k/16bit,改成立体声,USB的断流和溢出问题也应该处理下。不过后来看到个有趣的东东,这些就都还没有动。看RDA5807手册时发现支持RDS(radio broadcast data system),就是电台可以在广播的同时发送一些数据如电台名称、节目名词、交通状况等,试了下上海有两个电台支持,读取RDA5807的RDS数据简单分析后能读到电台名称和时间还有‘高德欢迎你’的文本。电台名称和时间这些没太大意思,有高德就代表有路况信息,公司有辆新昊锐,内置的导航没有网络支持也能显示实时路况,当时不知道是什么原理,现在知道就是RDS-TMC。试着找资料解析TMC数据。TMC的报文由方向、范围、事件、位置等组成。方向和范围很简单,事件也有字典解释比如拥堵几公里、修路等到底发生了什么情况,但位置信息只有编码方式却没找到对应的数据库解析,没有位置数据库TMC也就解析不了具体发生在那里了,不知道是否有人研究过这个东西能提供下了。

无标题.png

UsbRadio.rar

10.53 MB, 下载次数: 9450

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

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-3-3 19:28:41 | 显示全部楼层
强帖!火前留名,先点个赞!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165369
金钱
165369
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-3-4 01:03:37 | 显示全部楼层
不错,cool
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2016-3-4 22:20:16 来自手机 | 显示全部楼层
真不错!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-9-30
在线时间
11 小时
发表于 2016-3-5 11:34:28 | 显示全部楼层
很强大,谢谢分享
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2013-8-16
在线时间
23 小时
发表于 2016-3-6 19:47:20 | 显示全部楼层
不错,谢谢分享
回复 支持 反对

使用道具 举报

2

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2015-12-22
在线时间
85 小时
发表于 2016-3-7 17:06:26 | 显示全部楼层
厉害。。。。。
回复 支持 反对

使用道具 举报

28

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
491
金钱
491
注册时间
2012-8-9
在线时间
57 小时
发表于 2016-3-28 21:46:14 | 显示全部楼层
楼主,我想问下。。。原子哥的USB声卡F1的历程WIN7上播放出错,你是不是解决了?能分享下这个代码吗?我一直没找到解决办法
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
36
金钱
36
注册时间
2016-3-10
在线时间
3 小时
发表于 2016-3-28 23:50:44 | 显示全部楼层
历害!有空也要玩玩!
回复 支持 反对

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
发表于 2016-5-6 15:46:26 | 显示全部楼层
楼主,你的这篇分享对我现在做的项目很有帮助。我这里想在f407的基础上实现声卡的录音,说白了就是把外接探索者开发板的mic采集的声音送到pc上。比你完成的要简单。
有两点不太明白“USB官网音频类文档最后的USB Microphone”这个我没有找到,st提供的文档也没有声卡录音的内容。
第二点,我看了你的代码好像和407探索者开发板的声卡实验不一样。407的声卡实验需要usb设备注册,单这些步骤好像你的103都没有,编译用到的库文件也不一样。我查了一下usb_sil这个文件,f4的usb库是没有的。不知道是不是芯片版本不一致造成的。
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-5-7 12:14:05 | 显示全部楼层
czdspeed 发表于 2016-5-6 15:46
楼主,你的这篇分享对我现在做的项目很有帮助。我这里想在f407的基础上实现声卡的录音,说白了就是把外接探 ...

音频类文档见官网白皮书最后的附录,可参考USB的描述符
http://www.usb.org/developers/docs/devclass_docs/audio10.pdf
st提供的文档我也找过,没找到声卡录音的内容。
407和103的USB库是完全两样的,一个是USB-otg库另一个是USB-FS库,代码上没有能参考的,不过我想开发的思路应该是一样的。
回复 支持 反对

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
发表于 2016-5-7 15:24:51 | 显示全部楼层
svwydh 发表于 2016-5-7 12:14
音频类文档见官网白皮书最后的附录,可参考USB的描述符
http://www.usb.org/developers/docs/devclass_d ...

我对照着修改,设备管理器里面出现了录音的设备。但是我不太理解怎么把采集的buf都送出去。现在所有的数据都在iis总线上,我开了一个dma通道把数据轮流覆盖到两个buf上。想找一个send函数送出去,看看pc能不能有数据。
看到你的程序是直接“USB_SIL_Write(EP1_IN, (uint8_t*) rds_data, 12);” Endpoint Addresses这个地址怎么确定的?我发送的时候也需要根据usb的状态去控制发送频率。不能收到数据就直接推送吧。
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-5-7 23:41:22 | 显示全部楼层
czdspeed 发表于 2016-5-7 15:24
我对照着修改,设备管理器里面出现了录音的设备。但是我不太理解怎么把采集的buf都送出去。现在所有的数 ...

其实完全不用看我的程序,2个库完全不一样的,我的是在原声卡的基础上改的,你的
也一样。你应该找到声卡程序接受数据的地方把他改成发送,EP地址也从out变为in。
我一共改了这几个地方,基本就是EP1同步端口相关的设置都反一反,out变in,rx变tx:
1。描述符
2。Speaker_Reset()中初始化EP1的相关代码
3。EP1_OUT_Callback改为EP1_IN_Callback
4。EP1_IN_Callback中的的相关代码

回复 支持 反对

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
发表于 2016-5-8 14:30:24 | 显示全部楼层
svwydh 发表于 2016-5-7 23:41
其实完全不用看我的程序,2个库完全不一样的,我的是在原声卡的基础上改的,你的
也一样。你应该找到声 ...

太感谢你了,407的usb库我和103做了仔细的对比。
首先描述符这个我应该改的没有问题。
后面三条:初始化和EP1_OUT_Callback这些回调的函数我在库里面都没有找到。但是我觉的你说的很有道理。写驱动的人应该思路是差不多的。
我再看一下,还有2点我不是太明白。我在103的驱动里面看到8个端点都做了callback的接口。但是在407的驱动里面只找到了0x81 ep1的宏定义。
还有一点是pc端需不需要做驱动这点我网上查了都说的不清楚。我看你fm有一个专门的pc驱动。所以劳烦你了。
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-5-8 23:42:12 | 显示全部楼层
czdspeed 发表于 2016-5-8 14:30
太感谢你了,407的usb库我和103做了仔细的对比。
首先描述符这个我应该改的没有问题。
后面三条:初始 ...

驱动定义了接口但都是空操作,真正使用的还需要写具体的callback函数。
407的可能只需要定义需要的接口,0x81 ep1已经是in端口录音模式了。
pc端肯定是不需要驱动的,win自带的。FM我是改过描述符的增加了新的接口才需要驱动。
给你我写的测试代码,一个是精简的官方声卡播放程序,另一个就是我在这基础上改的录音程序(不过是用16字节正弦波表模拟麦克风数据的,电脑里能听到1Khz的声波)
你自己对比下,改动的地方基本就下面几个文件了,别的我也帮不了你了。
usb_conf.h
usb_desc.c
usb_prop.c
usb_endp.c

Done.rar

5.52 MB, 下载次数: 812

回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-21
在线时间
4 小时
发表于 2016-5-9 00:06:52 | 显示全部楼层
强烈支持!强势点赞!
回复 支持 反对

使用道具 举报

36

主题

256

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2016-4-20
在线时间
169 小时
发表于 2016-5-9 09:00:12 | 显示全部楼层
svwydh 发表于 2016-5-8 23:42
驱动定义了接口但都是空操作,真正使用的还需要写具体的callback函数。
407的可能只需要定义需要的接口 ...

还是太感谢你了,我仔细对比下。今天我拿示波器看下接口到底有没有数据发出去。
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-6-17
在线时间
9 小时
发表于 2016-6-24 10:03:23 | 显示全部楼层
svwydh 发表于 2016-5-8 23:42
驱动定义了接口但都是空操作,真正使用的还需要写具体的callback函数。
407的可能只需要定义需要的接口 ...

楼主  我最近在做一个基于I2S的音频数据双向传输项目 想请教一下:
1、如果我修改打开EP1的IN和OUT,再修改什么地方 可以让音频数据既能发送到PC也能接收PC的音频
2、如果只能使用两个EP解决这个双向传输的问题  电脑端的支持驱动是不是需要修改
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
发表于 2016-6-26 11:00:35 | 显示全部楼层
@svwydh 代码非常的不错,能不能提供一个改成立体声的思路?
(1)我做了一个程序,采集两路,格式PCM也应该没有问题,但是就是录音的声音相差很大,声音噪声巨大,我看到USB中的数据,可能是丢包和溢出的问题。
(2)使用ADC DMA的时候,如果使用扫描声音波形的下半部分就没有了。
(3)USB Aduio的描述中,如何更改为双声道?
(4)我相当于采集了两路的MIC,一路的MIC声音已经很不错,但是两路就不行了,是否是USB的传输速度不够,如果极限能来几个mic?
(5)附上我的图,一张是录音文件,两路,噪声比较大,基本声音有,但是基本不是正确的声音,而且不知道为什么噪声自动增加。
如果调试OK,代码奉献出来
mic1.jpg

mic2.jpg
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-6-27 10:19:31 | 显示全部楼层
xavierchen 发表于 2016-6-26 11:00
@svwydh 代码非常的不错,能不能提供一个改成立体声的思路?
(1)我做了一个程序,采集两路,格式PCM也应 ...

改立体声,还是16K 8位采样率的话,改下面的描述符应该就可以了,如果要16位还是要改其他的。具体我没试过,你自己测下。

0x02,      //NrChannels:2 channel                                                                  

0x03,      //ChannelConfigeft Front,Right Front,  
0x00,

0x02,       /* bNrChannels */
0x20,       /* wMaxPacketSize 32 bytes*/

ep_in的时候,
原来是每包16byte,
单声道1,单声道2,。。。。单声道16
现在是每包32byte
左声道1,右声道1,左声道2,右声道2,。。。左声道16,右声道16,

噪声问题,我试的时候是单声道的,声音很完美,只有FM莎莎的底噪,有没有下半部波形我没看过,应该是没这个问题的。USB的断流和溢出会导致很大的咔的爆音,但我的一般都是在正常播放一分钟后才有可能出现。你一开始就有得噪声不会是这个问题。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
发表于 2016-6-27 10:47:04 | 显示全部楼层
svwydh 发表于 2016-6-27 10:19
改立体声,还是16K 8位采样率的话,改下面的描述符应该就可以了,如果要16位还是要改其他的。具体我没试 ...

@svwydh 非常感谢,我现在就测试。
回复 支持 反对

使用道具 举报

2

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2016-5-26
在线时间
35 小时
发表于 2016-6-27 14:30:29 | 显示全部楼层
MARK!!!
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-6-17
在线时间
9 小时
发表于 2016-6-28 13:58:06 | 显示全部楼层
楼主 使用你的源代码  编译下载后驱动没法识别 是因为我的板子里面没有radio模块吗  @svwydh
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-6-29 00:21:34 | 显示全部楼层
Neverfade 发表于 2016-6-28 13:58
楼主 使用你的源代码  编译下载后驱动没法识别 是因为我的板子里面没有radio模块吗  @svwydh

这个我也不确定。可以试下我15楼发的代码,只为测USB audio的,一个是录音一个是播放,硬件的不同也请注意,我的usb d+是直接上拉的,如果你的是由IO控制的,是要修改USB_Port_Set函数代码的
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-6-17
在线时间
9 小时
发表于 2016-6-29 23:24:14 | 显示全部楼层
svwydh 发表于 2016-6-29 00:21
这个我也不确定。可以试下我15楼发的代码,只为测USB audio的,一个是录音一个是播放,硬件的不同也请注 ...

我用的是 USB speak  源码 然后对比了你们两份文件中的USB库文件内容  使用的是战舰V3的板子 应该不会有太大问题吧?

此外  如果添加了驱动描述后  插入到PC上显示黄色感叹号 应该从哪些方面调试问题呢
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
发表于 2016-6-30 08:47:26 | 显示全部楼层
Neverfade 发表于 2016-6-29 23:24
我用的是 USB speak  源码 然后对比了你们两份文件中的USB库文件内容  使用的是战舰V3的板子 应该不会有 ...

主要是描述了,USB audio的描述看起来很复杂。主要看看几处长度是否是添加后的总和。这个直接影响是否能用。
另外,我的双声道mic完成了,比较完美。声音清晰,16k 16bit的(转的16bit),全平台支持。
@svwydh 4路6路是否有思路?
能否可以出复合设备,来两个立体声的?
这个添加复合设备需要怎么修改?请指导~~
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-6-30 12:06:49 | 显示全部楼层
xavierchen 发表于 2016-6-30 08:47
主要是描述了,USB audio的描述看起来很复杂。主要看看几处长度是否是添加后的总和。这个直接影响是否能 ...

   6路MIC?这个是准备做声学实验室的节奏!
不知道你具体要做什么?不过既然2路立体声已经有了,定义的是左前、右前。那么还可以有左后、右后、中置...,audio 1.0是支持杜比的,6声道绝对没问题。如果你声卡只接了普通2声道喇叭,系统会把6声道处理成2声道播放的。不过只要不是笔记本现在声卡都支持6声道的,只要接上6个喇叭并设置下喇叭组态为5.1,那你就能在6个喇叭中听到不同的声音啦,AC3录音!哈哈!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-6-30
在线时间
2 小时
发表于 2016-6-30 14:49:22 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-6-17
在线时间
9 小时
发表于 2016-6-30 17:40:58 | 显示全部楼层
@svwydh  楼主   你的usbradio驱动怎么安装的  能介绍一下吗
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-6-30 23:11:17 | 显示全部楼层
Neverfade 发表于 2016-6-30 17:40
@svwydh  楼主   你的usbradio驱动怎么安装的  能介绍一下吗

驱动是标准用法,但需要能识别usb设备,如果是unknown device,那就是STM程序有问题了,驱动也是装不上的。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
发表于 2016-6-30 23:32:26 | 显示全部楼层
svwydh 发表于 2016-6-30 12:06
6路MIC?这个是准备做声学实验室的节奏!
不知道你具体要做什么?不过既然2路立体声已经有了,定义的 ...

@svwydh 两声道的没有问题,看了USB audio的说明,确实理论上改成6通道不是问题,但是USB的传输速度是否能行?stm32的应用做了不少,但是深入研究的太少了,USB的话,应该也可以的。
声学实验?哈哈,算是吧。下一步就是波束成形、噪音消除,再加上声源识别。
qq:815485126 能加个qq一起讨论吗?讨论完,给大家说说
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-7-2 23:25:29 | 显示全部楼层
xavierchen 发表于 2016-6-30 23:32
@svwydh 两声道的没有问题,看了USB audio的说明,确实理论上改成6通道不是问题,但是USB的传输速度是否 ...

USB的速度绝对没问题,就算44.1k/16位那每声道90KB/s,6声道也只有540KB/s。stm32 USB块传输网友实测能到700KB/s,更不用说音频同步传输了。单片机就是自己玩玩的,做点自己感兴趣的小玩意,和专业研究就相去太远。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-6-23
在线时间
21 小时
发表于 2016-7-3 14:12:00 | 显示全部楼层
@svwydh 4声道没有问题,传输速度确实不是问题,尝试路ADC6路采集发送数据,可能编码好要研究研究。录音也OK,声音清晰。6声道16k的音频,完全没有问题。就看下一步怎么做这个算法了,这个OK,分享大家一个心得。
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-6-17
在线时间
9 小时
发表于 2016-7-27 21:39:53 | 显示全部楼层
@svwydh 楼主  你的上位机源码能共享一下吗  最近在PC端用libusb 接收音频数据丢包率比较严重
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2016-7-29 03:36:04 | 显示全部楼层
Neverfade 发表于 2016-7-27 21:39
@svwydh 楼主  你的上位机源码能共享一下吗  最近在PC端用libusb 接收音频数据丢包率比较严重

上位机源码有共享是c#的,用usb音频类 音频数据是由windows处理的,应该没有丢包的问题。
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-7-27
在线时间
23 小时
发表于 2016-7-29 15:53:47 | 显示全部楼层
虽然不懂但支持
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-8-3
在线时间
16 小时
发表于 2016-8-3 23:15:24 | 显示全部楼层
厉害厉害厉害厉害。。。。。
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2015-9-24
在线时间
41 小时
发表于 2016-8-4 10:11:06 | 显示全部楼层
强大楼主   赞 and mark
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
245
金钱
245
注册时间
2015-11-30
在线时间
54 小时
发表于 2016-8-4 13:43:33 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2011-4-4
在线时间
2 小时
发表于 2016-11-23 16:08:11 来自手机 | 显示全部楼层
好文章,学习。
回复 支持 反对

使用道具 举报

12

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2014-10-30
在线时间
98 小时
发表于 2016-12-24 13:55:38 | 显示全部楼层
xavierchen 发表于 2016-6-26 11:00
@svwydh 代码非常的不错,能不能提供一个改成立体声的思路?
(1)我做了一个程序,采集两路,格式PCM也应 ...

xavierchen 兄弟您好! 看到您已经实现双声道录音驱动,我也很想尝试一下,不知能否在此共享或者发我邮件学习学习? 13603052469@139.com, 多谢!
回复 支持 反对

使用道具 举报

7

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2016-12-30
在线时间
75 小时
发表于 2017-1-21 01:20:09 | 显示全部楼层
我想问一下,stm32的adc录音,音频的负电压部分采集不到,全是0。我下载了楼主15楼的程序,作为usb麦克风,音源直接用手机输出,电脑上播放噪音很大,音质差得难以接受,用goldwave录音发现电压的负半轴全部没有,你们是怎么解决的啊,能直接用stm32的adc录音吗,不行的话是不是只有用外部专门的音频adc芯片呢?
回复 支持 反对

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2017-1-21 11:00:37 | 显示全部楼层
这个厉害
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2017-1-22 09:39:56 | 显示全部楼层
youguang360 发表于 2017-1-21 01:20
我想问一下,stm32的adc录音,音频的负电压部分采集不到,全是0。我下载了楼主15楼的程序,作为usb麦克风, ...

STM32的ADC采集电压范围是0-3.3V,你的音频有负压就要抬高电压,使得电压落在可采集范围内。一般用VCC分压叠加,2个电阻一个电容即可。
回复 支持 反对

使用道具 举报

7

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2016-12-30
在线时间
75 小时
发表于 2017-1-22 23:17:32 | 显示全部楼层
svwydh 发表于 2017-1-22 09:39
STM32的ADC采集电压范围是0-3.3V,你的音频有负压就要抬高电压,使得电压落在可采集范围内。一般用VCC分 ...

请问楼主,你用运放做位加法器没有?只用两个电阻和一个电容怎么实现?
回复 支持 反对

使用道具 举报

4

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2016-2-22
在线时间
85 小时
 楼主| 发表于 2017-1-23 10:28:26 | 显示全部楼层
youguang360 发表于 2017-1-22 23:17
请问楼主,你用运放做位加法器没有?只用两个电阻和一个电容怎么实现?

耳机音频应该不用运放再放大了,用2个20K电阻串联接VCC/GND,中间点的电压就是1.65V,音频信号串个1UF的电容耦合到这里再接ADC就可以了,保证音频幅度不超1.6V就可以了。
回复 支持 反对

使用道具 举报

7

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2016-12-30
在线时间
75 小时
发表于 2017-1-23 18:30:06 | 显示全部楼层
svwydh 发表于 2017-1-23 10:28
耳机音频应该不用运放再放大了,用2个20K电阻串联接VCC/GND,中间点的电压就是1.65V,音频信号串个1UF的 ...

是这样画的电路图吧,从仿真结果来看应该成功了
音频升压电路.jpg
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2014-12-24
在线时间
10 小时
发表于 2017-2-4 11:35:37 | 显示全部楼层
牛,,,火钳刘明
回复 支持 反对

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1847
金钱
1847
注册时间
2012-9-16
在线时间
286 小时
发表于 2017-2-4 15:29:16 | 显示全部楼层
厉害!
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-12-17
在线时间
1 小时
发表于 2017-2-7 11:11:58 | 显示全部楼层
楼主,后来有做到16Bit,44.1KHz吗?STM32F1的传输速率能不能行?stm32 USB块传输网友实测能到700KB/s,但有点担心同步传输不稳定会带来噪音
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-1-19 02:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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