在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用鴻蒙OS在蜂鳴器播放音樂

鴻蒙系統HarmonyOS ? 來源:oschina ? 作者:osc_2wq8ft8d ? 2020-11-11 12:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文介紹如何在HiSpark Wi-Fi IoT套件上,使用Harmony OS IoT硬件子系統的PWM接口 驅動蜂鳴器 播放音樂。

用PWM輸出方波

PWM輸出的方波頻率

通過PwmStart接口的注釋,可以知道freq參數是分頻倍數,PWM實際輸出的方波頻率等于 PWM時鐘源頻率 除以 分頻倍數,即

f = Fcs / freq

其中,Fcs是PWM時鐘源頻率;

PWM輸出方波的占空比

通過PwmStart接口的duty參數可以控制輸出方波的占空比,占空比是指PWM輸出的方波波形的高電平時間占整個方波周期的比例,具體占空比值是 duty 和 freq的比值,例如想要輸出占空比 50%的方波信號,那么duty填的值就要是 freq/2;

音符-頻率對應關系

參考:https://liam.page/2018/04/09/pitch-interval-and-harmonic/

開發板可以輸出的最低頻率

通過前面的公式,我們知道:

PWM輸出的方波頻率和freq成反比,freq越大,輸出的方波頻率越小;

freq是unsinged short類型,最大值為65535;
因此,輸出頻率的最小值取決于時鐘源,PWM的默認時鐘源為160M:

unsignedintHalPwmInit(HalWifiIotPwmPortport){if(hi_pwm_set_clock(PWM_CLK_160M)!=HI_ERR_SUCCESS){return(unsignedint)HAL_WIFI_IOT_FAILURE;
}returnhi_pwm_init((hi_pwm_port)port);
}

我們通過直接調用hi_pwm_set_clock接口,可以修改時鐘源:

/**
*@ingroupiot_pwm
*
*EnumeratesthePWMclocksources.CNcomment:PWM時鐘源枚舉。CNend
*/typedefenum{
PWM_CLK_160M,/**

通過注釋我們知道hi_pwm_set_clock(PWM_CLK_XTAL);可以將時鐘源設置為晶體時鐘,晶體時鐘可能為24M或40M;
那么問題來了——晶體時鐘到底是多少?

晶體時鐘頻率是多少?

我們可以通過通過實驗,測算出晶體時鐘頻率,具體步驟如下:

使用hi_pwm_set_clock(PWM_CLK_XTAL);設置時鐘源為晶體時鐘;

使用PwmStart(WIFI_IOT_PWM_PORT_PWM0, 20*1000, 40*1000);輸出方波信號;

使用示波器測量方波頻率;
經實際測量,方波評率為1000Hz,因此,時鐘頻率為1000 * 40 * 1000也就是 40 MHz;

可以輸出的方波最低頻率

因此,方波最低頻率就是 40M / 65535 ,也就是:

>>>40*1000*1000/65535
610.3608758678569

對照上面的頻率表,可以知道,能夠輸出E?以上的所有音符;

準備曲譜

為了代碼實現起來簡單,我選擇了《兩只老虎》的曲譜作為素材,很快找到了簡譜:

簡譜說明

對于缺乏音樂基礎的同學,簡譜上的一些記號可能不太清楚是什么意思,這里簡單說明一下:

左上角的1=C是表示調式(可以不用關心),1是唱名,C是音名,1=C是正調(就是常規的對應關系: 1-C,2-D, 3-E, 4-F, 5-G, 6-A, 7-B);

左上角的 4/4 是四四拍,是指 四分音符為一拍, 每小節有四拍;

下面譜子上的豎線就是每個小節分隔符,和4/4對應;

“跑得快”上面5后面的橫線表示延時一拍;

“一直沒有眼睛”一句,5后面的點表示順延半拍,一條下劃線表示二分之一時間,兩條下劃線表示四分之一時間;

編寫代碼

有了以上知識,我們就可以編寫代碼了,關鍵部分代碼如下:

staticvolatileintg_buttonPressed=0;staticconstuint16_tg_tuneFreqs[]={0,//40MHz對應的分頻系數:
38223,//11046.5
34052,//21174.7
30338,//31318.5
28635,//41396.9
25511,//51568
22728,//61760
20249,//71975.5
51021//5_783.99//第一個八度的5};//曲譜音符staticconstuint8_tg_scoreNotes[]={//《兩只老虎》簡譜:http://www.jianpu.cn/pu/33/33945.htm
1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,1,8,1,1,8,1,//最后兩個5應該是低八度的,鏈接圖片中的曲譜不對,聲音到最后聽起來不太對勁};//曲譜時值,根據簡譜記譜方法轉寫,4/4拍中下面劃一條線是半拍,劃兩條線是四分之一拍,點是順延半拍staticconstuint8_tg_scoreDurations[]={4,4,4,4,4,4,4,4,4,4,8,4,4,8,3,1,3,1,4,4,3,1,3,1,4,4,4,4,8,4,4,8,
};staticvoid*BeeperMusicTask(constchar*arg){
(void)arg;printf("BeeperMusicTaskstart!\r\n");

hi_pwm_set_clock(PWM_CLK_XTAL);//設置時鐘源為晶體時鐘(40MHz,默認時鐘源160MHz)

for(size_ti=0;i

其中譜子最后兩個5是譜子的錯誤,應該是低八度的5,也就是5下面應該打一個點;我修改了代碼,讓整個曲子聽起來更自然;

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 有源無源蜂鳴器

    關注

    0

    文章

    2

    瀏覽量

    1215
  • 鴻蒙
    +關注

    關注

    59

    文章

    2564

    瀏覽量

    43876
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TLV320AIC3100播放音頻的時候,拔插耳機然后插入就無法播放了,為什么?

    TLV320AIC3100播放音頻的時候. 拔插耳機.然后插入就無法播放....有幾個DAC寄存器被關閉..這個是什么問題? 是不是DAC哪個寄存器設置錯誤.... 如果停止播放
    發表于 11-08 07:23

    使用TLV320AIC3254EVM-U用PPS控制時候播放音樂,突然中斷,然后又恢復,為什么?

    我使用TLV320AIC3254EVM-U 用PPS 控制時候播放音樂,突然中斷,然后又恢復。出現頻率很高。用TI的固件并用CS軟件播放時候沒有出現這個問題。 請問大家我需要做什么部分參數設置?power tune or 其他?
    發表于 11-01 07:15

    TPA3116加了MUTE電路后播放音樂音量開到最大喇叭出現雜音怎么解決?

    TPA3116加了MUTE電路后播放音樂音量開到最大喇叭出現雜音(低音最明顯)
    發表于 10-24 07:23

    用freescale的CPU做host連接tlv320aic3254,播放音樂時,i2s上Wclk,Bclk都沒有信號怎么解決?

    目前我們的項目是:用freescale的 CPU做host連接tlv320aic3254,是通過i2s連接傳輸信號的;the sampling rate 設置是44.1KHz,Mclk是24M; 目前問題是:播放音樂時,i2s上Wclk,Bclk都沒有信號;
    發表于 10-22 07:40

    TAS5733L按照初始化的寄存器配置,播放音樂無聲是怎么回事?

    按照貴司提供的初始化的寄存器配置(如附件)設置,讀取0x05,0x06也是設定的值。播放音樂此時仍然無聲。 請問,是否還有額外的寄存器需要配置? 謝謝!
    發表于 10-21 07:41

    PCM2706C電腦端播放音樂后,點擊暫停出現10s左右的微弱噪聲如何解決?

    請教TI工程師,我的系統架構為PCM2706C + I2S DAC解碼,到耳機輸出, 出現的問題是電腦端播放音樂后,點擊暫停出現10s左右的微弱噪聲, 用邏輯分析儀可捕捉到這10s存在數據,10s
    發表于 10-17 07:50

    TAS5766上電后用PPC3調試播放音樂時,喇叭間隔1秒出現一次消音,是什么原因呢?

    TAS5766上電后用PPC3調試播放音樂時,喇叭間隔1秒出現一次消音,沒動過其他軟件設置,如上次的視頻,請問是什么原因呢?
    發表于 10-16 06:58

    用TAS5805功放,每次暫停后再播放音樂,開始的1-2s聲音較小后面恢復正常,如何解決?

    用TAS5805功放,發現每次暫停后再播放音樂,聲音的開始1-2s聲音較小,后面恢復正常,這種聲音由小變大的漸變問題如何解決?
    發表于 10-15 06:52

    TAS5805BYPASS狀態下小音量播放音樂遇到低頻大動態時會有“POPO”的爆音,怎么解決?

    TAS5805測試電路的失真1%以下。但在BYPASS狀態下小音量播放音樂遇到低頻大動態時會有“POPO”的爆音。請問怎么解決。
    發表于 10-12 06:37

    TAS2521播放音樂的時,將音量調到最大,喇叭就會自動mute,這種情況是不是輸出功率過大導致過流保護?

    你好,想請教以下幾個問題 1.播放音樂的時候,只要將音量調到最大,喇叭就會自動mute。這種情況的是不是輸出功率過大導致的過流保護? 2.為什么播放單頻或者粉噪聲的時候,就算
    發表于 10-10 08:16

    PCM2903無法透過Audio LINE IN實現音樂播放怎么辦

    這邊一個機種用的是 Windows XP系統,Audio LINE-IN直接插入 LINEIN cable通過手機播放音樂,LINEOUT 沒有聲音輸出;當打開聲音硬件測試向導時,才有聲音輸出
    發表于 10-09 06:30

    設計的TPA3116D2功放電路,播放音樂最大輸出時部分IC出現斷音的原因?

    我設計的TPA3116D2功放電路,供電24V,輸出電感33uH,IC頂部加了散熱器,雙聲道2個4歐喇叭,3.3UF接2個高音喇叭,播放音樂最大輸出時部分IC出現斷音(保護),重新更換TPA3116就好了,請教是可能什么原因會導致3116損害,有什么對策嗎,
    發表于 08-16 11:25

    TPA3116播放音樂時,聲音非常大時會啪啪響,請問有辦法解決嗎?

    TPA3116播放音樂時,聲音非常大時(已出現截止失真)會啪啪響,請問有辦法解決么? 用TCD-781曲目測試發現,當播放曲目3,4,5時(17hz/0db正弦波),推挽輸出幅度只要超過最大
    發表于 08-13 08:32

    wifi的STA模式下無法播放sdcard音樂是什么原因?

    pipeline_sdcard_mp3_control的基礎上加了一個wifi的sta,本來想一邊連接熱點一邊播放音樂。后來運行之后按play就沒法正常播放了。剛開始還以為要用線程。后來創建了一
    發表于 06-28 06:55

    如何通過BLE播放音頻?

    現在是我有一個android app,有一塊esp32板子上面有喇叭,板子刷了a2dp_sink例子的固件。如果用bluetooth 和板子pair之后,可以播放音樂。 現在要求不用bluetooth,而是用ble連接,然后播放音樂,請問可以實現嗎?求指點迷津,謝謝。
    發表于 06-26 06:36
    主站蜘蛛池模板: 国产亚洲精品美女久久久 | 国产资源免费观看 | 亚洲天堂亚洲天堂 | 久久夜色撩人精品国产 | baoyu777永久免费视频 | 国产又爽又黄又粗又大 | 亚洲无吗在线视频 | 毛片网站免费 | 久草天堂| 综合激情婷婷 | 97爱爱| 免费观看在线视频 | 久久国产美女免费观看精品 | 永久黄色免费网站 | 国产欧美一区二区日本加勒比 | 色wwww| 全黄h全肉边做边吃奶在线观看 | 亚洲色啦啦狠狠网站 | 一级毛片免费不卡在线视频 | 亚洲国产精品热久久2022 | 日日摸夜夜爽 | 欧美综合精品一区二区三区 | 五月天色婷婷丁香 | 奇米7777第四色 | 欧美三级 欧美一级 | 黄 色 片 在 线 看 | 黄色片香蕉视频 | 国产日韩欧美综合色视频在线 | 亚洲精品网站日本xxxxxxx | 亚洲先锋资源 | 手机看片1024手机在线观看 | 国产精品视频一区国模私拍 | 色婷婷一区二区三区四区成人网 | 色一欲一性一乱一区二区三区 | 国产美女视频黄a视频免费全过程 | 日韩性插| 婷婷四房综合激情五月性色 | avtom影院永久地址人人影院 | 午夜免费福利网站 | 手机在线观看你懂得 | 亚洲天堂一区二区三区 |