终于实现USB Microphone录音功能

2019-07-20 02:21发布

本帖最后由 lvehe 于 2016-6-7 15:47 编辑

目前仅实现单一的USB Microphone录音功能,没有Speaker的功能。二者结合实现起来感觉比较困难,毕竟对USB学习还不太深入。
板子上使用的是一颗带IIS数字输出的MEMS麦克风,要移植到其他咪头和CODEC芯片(比如WM8978)组合的板子也是很容易的,因为都是IIS数字输出接口。
源码主要参考https://github.com/iliasam/STM32F4_USB_MICROPHONE
QQ截图20160525103932.png

QQ截图20160525122217.png

2016-5-31更新:
添加FeatureUnit,实现静音和音量调节功能。
已知问题:Win7和XP下的音量设置数据不一样,目前程序以Win7为依据。
QQ截图20160531135334.png
2016-6-7更新:
修改音量调节为0dB~20dB,步进值为4dB。使Win7和XP下的音量设置数据保持一致。
添加多频选择功能,可选4种常用频率。
QQ截图20160607152619.png
QQ截图20160607152640.png
至此,USB Microphone功能基本完备,此帖完结,不再更新。






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
czdspeed
1楼-- · 2019-07-21 00:47
我刚才调试了一下,因为我把iis先屏蔽了想直接看看能不能把数据送上来。这个usbd_audio_DataIn写的是1ms进去一次,这个是在什么地方设置的?
请多多指教。
czdspeed
2楼-- · 2019-07-21 03:03
 精彩回答 2  元偷偷看……
lvehe
3楼-- · 2019-07-21 06:51
407的,在USB FS模式,配置描述符里面定义的数据传输模式为isochronous等时模式,就是1ms发送或接收一次数据。对于48kHz,16bits的麦克风数据,1ms发送48000*2/1000=96Bytes数据。PC会主动请求发送数据,收到请求后先由sof函数发起传输,然后usbd_audio_DataIn里面取24bits的IIS数据的高16位数据发送出去。
czdspeed
4楼-- · 2019-07-21 08:56
 精彩回答 2  元偷偷看……
czdspeed
5楼-- · 2019-07-21 11:50
 精彩回答 2  元偷偷看……
lvehe
6楼-- · 2019-07-21 12:52
czdspeed 发表于 2016-5-27 15:24
楼主,我用的模板试验了,把dma屏蔽之后只用了固定的数据去发送,上位机录音可以收到数据。下午把usb的部 ...

为了与speaker区分,我部分代码是写在usbd_audio_in_if.c里面的,但实际上和out_if没什么大的区分,基本上是注释了用不到的地方。在我的程序里,out_if这个文件基本没用。不清楚你改了哪些地方,可能需要你自己仔细对比一下了。反正描述符的确很难弄,我一直想加Feature Unit,一加上PC就无法识别。

一周热门 更多>