欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于MM32F0163D7P的USB Audio Class(UAC)音頻設(shè)備

靈動(dòng)MM32MCU ? 來(lái)源:靈動(dòng)MM32MCU ? 2023-07-27 16:34 ? 次閱讀

1TinyUSB(UAC)音頻簡(jiǎn)介

UAC是USB Audio Class的縮寫(xiě),USB音頻類(lèi),一個(gè)像USB這樣的通用數(shù)據(jù)接口,可以有很多種實(shí)現(xiàn)數(shù)字音頻數(shù)據(jù)傳輸?shù)姆绞?。不同?a target="_blank">開(kāi)發(fā)者可以根據(jù)自己的喜好和需求,定義任意的控制方式,傳輸模式,音頻格式等等參數(shù)。

在上一節(jié)我們?cè)?a target="_blank">MM32F0163D7P 平臺(tái)上成功的移植了TinyUSB,基于這個(gè)平臺(tái),今天我們來(lái)實(shí)現(xiàn)一個(gè) uac2_headset 音頻設(shè)備,這個(gè)設(shè)備支持基礎(chǔ)的錄音和放音功能,如果要支持音量調(diào)節(jié)/靜音功能,還需要再添加一個(gè) HID 變成復(fù)合設(shè)備。

2快速移植一個(gè)UAC+HID復(fù)合設(shè)備

按照前面兩篇文章,我們可以快速的移植出一個(gè)基于TinyUSB的UAC+HID復(fù)合設(shè)備,主要的代碼片段如下:

/*-------------MAIN-------------*/
intmain(void)
{
USB_DeviceClockInit();//board_init();

CONSOLE_Init(460800);//enableprintfdebug

//initdevicestackonconfiguredroothubport
tud_init(BOARD_TUD_RHPORT);

TU_LOG1("UACHeadset&HIDrunning
");//CFG_TUSB_DEBUGfordebugging#ifCFG_TUSB_DEBUG
//0:nodebug
//1:printerror
//2:printwarning
//3:printinfo

while(1)
{
tud_task();//TinyUSBdevicetask
audio_task();
hid_task();
}

return0;
}

#defineEPNUM_AUDIO_IN0x01
#defineEPNUM_AUDIO_OUT0x01

#defineEPNUM_HID0x03


uint8_tconstdesc_configuration[]=
{
//Interfacecount,stringindex,totallength,attribute,powerinmA
TUD_CONFIG_DESCRIPTOR(1,ITF_NUM_TOTAL,0,CONFIG_TOTAL_LEN,TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP,100),

//Interfacenumber,stringindex,EPOut&EPInaddress,EPsize
TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR(2,EPNUM_AUDIO_OUT,EPNUM_AUDIO_IN|0x80),

//Interfacenumber,stringindex,protocol,reportdescriptorlen,EPOut&Inaddress,size&pollinginterval
TUD_HID_INOUT_DESCRIPTOR(ITF_NUM_HID,6,HID_ITF_PROTOCOL_NONE,sizeof(desc_hid_report),EPNUM_HID,0x80|EPNUM_HID,CFG_TUD_HID_EP_BUFSIZE,10),

};

//--------------------------------------------------------------------+
//StringDescriptors
//--------------------------------------------------------------------+

//arrayofpointertostringdescriptors
charconst*string_desc_arr[]=
{
(constchar[]){0x09,0x04},//0:issupportedlanguageisEnglish(0x0409)
"TinyUSB",//1:Manufacturer
"TinyUSBheadset",//2:Product
"000001",//3:Serials,shouldusechipID
"TinyUSBSpeakers",//4:AudioInterface
"TinyUSBMicrophone",//5:AudioInterface
"TinyUSBHID",//6:HIDInterface
};

256709be-2c58-11ee-815d-dac502259ad0.png

圖1 枚舉過(guò)程

25ab9322-2c58-11ee-815d-dac502259ad0.png

圖2 枚舉設(shè)備

工程文件樹(shù):

1.TinyUSB_UAC_HID

2. │

3. ├─USER

4. │ main.c

5. │ usb_descriptors.c

6. │ usb_dcd_port.c

7. │

8. └─TinyUSB

9.

10. tusb.c

11. audio_device.c

12. tud_fifo.c

13. usbd.c

14. usb_control.c

15. hid_device.c

3耳機(jī)設(shè)備設(shè)置修改音量

在耳機(jī)屬性里面可以操作修改音量大小,同時(shí)通過(guò)抓包工具可以抓到主機(jī)下發(fā)的SET CUR命令。

25d1e6da-2c58-11ee-815d-dac502259ad0.png

圖3 設(shè)置音量

4耳機(jī)設(shè)備設(shè)置修改采樣頻率和位深度

在耳機(jī)屬性高級(jí)里面默認(rèn)格式可以看到下拉框有兩種格式,一個(gè)是2通道 16位48000Hz,另外一個(gè)是2通道 24位 48000Hz,播放聲音下發(fā)ISOC包的時(shí)候根據(jù)這個(gè)選擇傳輸。

260c005e-2c58-11ee-815d-dac502259ad0.png

圖4 設(shè)置采樣頻率和位深度

通過(guò)設(shè)置,下位機(jī)可以在播放或者錄音時(shí)處理不同的采樣頻率和位深度。樣例中全局變量current_resolution是位深度,current_sample_rate是采樣頻率。

5音頻數(shù)據(jù)的收發(fā)處理

播放時(shí)ISOC下發(fā)的數(shù)據(jù)包緩存在spk_buf里面。

錄用時(shí)麥克風(fēng)的聲音采樣數(shù)據(jù)寫(xiě)入mic_buf,通過(guò)ISOC同步上傳到電腦端。(例程是將播放的數(shù)據(jù)包處理后通過(guò)接口又返回電腦端,由tud_audio_write((uint8_t *)mic_buf, (uint16_t) (spk_data_size / 2))實(shí)現(xiàn))

//--------------------------------------------------------------------+
//AUDIOTask
//--------------------------------------------------------------------+

voidaudio_task(void)
{
//Whennewdataarrived,copydatafromspeakerbuffer,tomicrophonebuffer
//andsenditover
//Onlysupportspeaker&headphonebothhavethesameresolution
//Ifoneis16bitanotheris24bitbecareofLOUDnoise!
if(spk_data_size)
{
if(current_resolution==16)
{
int16_t*src=(int16_t*)spk_buf;
int16_t*limit=(int16_t*)spk_buf+spk_data_size/2;
int16_t*dst=(int16_t*)mic_buf;
while(src>1)+(right>>1));
}
memset(mic_buf,0xCC,sizeof(mic_buf));//mm32testcode
tud_audio_write((uint8_t*)mic_buf,(uint16_t)(spk_data_size/2));
spk_data_size=0;
}
elseif(current_resolution==24)
{
int32_t*src=spk_buf;
int32_t*limit=spk_buf+spk_data_size/4;
int32_t*dst=mic_buf;
while(src>1)+(right>>1))&0xffffff00ul);
}
tud_audio_write((uint8_t*)mic_buf,(uint16_t)(spk_data_size/2));
spk_data_size=0;
}
}
}

6功能驗(yàn)證測(cè)試

將uac2_headset 音頻設(shè)備插入PC,在計(jì)算機(jī)管理->設(shè)備管理器->音頻輸入和輸出里面出現(xiàn)耳機(jī)和麥克風(fēng)兩個(gè)TinyUSB headset設(shè)備證明枚舉成功。

262fb1ca-2c58-11ee-815d-dac502259ad0.png

圖5 設(shè)備管理器音頻設(shè)備

電腦端播放音樂(lè)使用抓包工具抓到ISOC的數(shù)據(jù)包:

264ef58a-2c58-11ee-815d-dac502259ad0.png

圖6 ISOC數(shù)據(jù)包

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7985

    瀏覽量

    266186
  • audio
    +關(guān)注

    關(guān)注

    1

    文章

    320

    瀏覽量

    59431
  • 音頻設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    14075
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4830

    瀏覽量

    69091
  • uac
    uac
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    4137

原文標(biāo)題:靈動(dòng)微課堂 (第265講)|基于MM32F0163D7P的USB Audio Class(UAC)音頻設(shè)備

文章出處:【微信號(hào):MindMotion-MMCU,微信公眾號(hào):靈動(dòng)MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    USB音頻設(shè)備沒(méi)有得到任何數(shù)據(jù)

    我有一個(gè)FX2LP設(shè)計(jì)與一組描述符來(lái)創(chuàng)建一個(gè)USB音頻設(shè)備。該設(shè)備實(shí)現(xiàn)了揚(yáng)聲器,所以我有一個(gè)USB流輸入和揚(yáng)聲器輸出。該設(shè)備被Windows
    發(fā)表于 05-30 08:10

    使用USB_Audio_Class進(jìn)行語(yǔ)音設(shè)備設(shè)計(jì)時(shí)需要解決的音頻信號(hào)同步問(wèn)題是什么?

    不同方向的設(shè)計(jì)者進(jìn)行開(kāi)發(fā),定義了不同的USB設(shè)備類(lèi)(USB Device Class)。本文針對(duì)使用USB_Audio_Class進(jìn)行語(yǔ)音
    發(fā)表于 06-08 06:32

    基于Linux內(nèi)核的Rockchip USB Gadget UAC開(kāi)發(fā)資料分享

    1、Rockchip USB Gadget UAC開(kāi)發(fā)步驟本文檔提供 Rockchip 平臺(tái)基于 Linux 內(nèi)核的 USB Gadget UAC
    發(fā)表于 08-10 16:03

    USB音頻設(shè)備的設(shè)計(jì)與實(shí)現(xiàn)

             在介紹USB 音頻設(shè)備及其驅(qū)動(dòng)程序結(jié)構(gòu)的基礎(chǔ)上,對(duì)USB Audio 功能節(jié)
    發(fā)表于 09-14 08:26 ?68次下載

    D類(lèi)音頻放大器是什么;Class D Audio Ampli

    Class D amplif iers, f irst proposed in 1958, have becomeincreasingly popular in recent years. What
    發(fā)表于 03-05 10:14 ?45次下載

    Class D Audio Amplifier Output

    Abstract: This application note examines the effect of the output filter on audio Class D amplifier
    發(fā)表于 05-06 11:59 ?1571次閱讀
    <b class='flag-5'>Class</b> <b class='flag-5'>D</b> <b class='flag-5'>Audio</b> Amplifier Output

    音頻設(shè)備

    音頻設(shè)備              音頻設(shè)備主要是對(duì)音
    發(fā)表于 01-07 11:48 ?804次閱讀

    音頻設(shè)備類(lèi)型

    音頻設(shè)備類(lèi)型              設(shè)備類(lèi)型指音頻設(shè)備的類(lèi)型,就是音頻設(shè)備屬于功
    發(fā)表于 01-07 11:46 ?2270次閱讀

    High-efficiency Class D audio

    High-efficiency Class D audio amplifiers extend battery life in portable applications
    發(fā)表于 09-22 09:21 ?1787次閱讀
    High-efficiency <b class='flag-5'>Class</b> <b class='flag-5'>D</b> <b class='flag-5'>audio</b>

    USB音頻設(shè)備類(lèi)的音頻信號(hào)同步解決方案

    本文針對(duì)使用USB_Audio_Class進(jìn)行語(yǔ)音設(shè)備設(shè)計(jì)時(shí)需要解決的音頻 信號(hào)同步 問(wèn)題進(jìn)行了介紹,并給出了相應(yīng)的解決方法和部分源代碼。 引 言 USB總線(xiàn)協(xié)議經(jīng)歷了從
    發(fā)表于 10-26 14:52 ?1w次閱讀
    <b class='flag-5'>USB</b><b class='flag-5'>音頻設(shè)備</b>類(lèi)的<b class='flag-5'>音頻</b>信號(hào)同步解決方案

    Class-D音頻功放的應(yīng)用及方案

    隨著高品質(zhì)音頻持續(xù)上升以及對(duì)音頻設(shè)備小型化高效節(jié)能的追求,音頻功放從Class A和Class AB向C
    的頭像 發(fā)表于 06-24 09:27 ?7812次閱讀
    <b class='flag-5'>Class-D</b><b class='flag-5'>音頻</b>功放的應(yīng)用及方案

    基于MM32F0163D7P的I2S接口的音樂(lè)播放器實(shí)驗(yàn)

    I2S(Inter-IC Sound)總線(xiàn),又稱(chēng)集成電路內(nèi)置音頻總線(xiàn),是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線(xiàn)標(biāo)準(zhǔn)。
    發(fā)表于 07-12 11:42 ?1070次閱讀
    基于<b class='flag-5'>MM32F0163D7P</b>的I2S接口的音樂(lè)播放器實(shí)驗(yàn)

    基于MM32F0163D7PUSB接口TinyUSB應(yīng)用:移植和新增設(shè)備(二)

    如果用戶(hù)想增加一個(gè)device設(shè)備但是在TinyUSB class里面又沒(méi)有參考示例,本次我們一起來(lái)移植一個(gè)CDC+printer復(fù)合設(shè)備。操作步驟還是和上篇一樣,先將TinyUSB 從GitHub上克隆下來(lái),將src 整個(gè)文件
    的頭像 發(fā)表于 07-20 17:05 ?1340次閱讀
    基于<b class='flag-5'>MM32F0163D7P</b>的<b class='flag-5'>USB</b>接口TinyUSB應(yīng)用:移植和新增<b class='flag-5'>設(shè)備</b>(二)

    基于MM32F0163D7PUSB Audio Class(UAC)音頻設(shè)備

    UACUSB Audio Class的縮寫(xiě),USB音頻類(lèi),一個(gè)像
    的頭像 發(fā)表于 09-01 16:40 ?1116次閱讀
    基于<b class='flag-5'>MM32F0163D7P</b>的<b class='flag-5'>USB</b> <b class='flag-5'>Audio</b> <b class='flag-5'>Class</b>(<b class='flag-5'>UAC</b>)<b class='flag-5'>音頻設(shè)備</b>

    USB音頻設(shè)備介紹

    USB專(zhuān)業(yè)錄音聲卡不僅僅是用于一般消費(fèi)者級(jí)別的USB音頻設(shè)備,而是專(zhuān)門(mén)為專(zhuān)業(yè)音頻制作環(huán)境設(shè)計(jì)的工具,其功能和性能遠(yuǎn)超普通USB
    的頭像 發(fā)表于 06-24 17:59 ?1944次閱讀
    <b class='flag-5'>USB</b><b class='flag-5'>音頻設(shè)備</b>介紹