99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

用PWM輸出方波

PWM輸出的方波頻率

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

f = Fcs / freq

其中,F(xiàn)cs是PWM時鐘源頻率;

PWM輸出方波的占空比

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

音符-頻率對應(yīng)關(guān)系

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

開發(fā)板可以輸出的最低頻率

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

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);
}

我們通過直接調(diào)用hi_pwm_set_clock接口,可以修改時鐘源:

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

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

晶體時鐘頻率是多少?

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

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

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

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

可以輸出的方波最低頻率

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

>>>40*1000*1000/65535
610.3608758678569

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

準備曲譜

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

簡譜說明

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

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

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

下面譜子上的豎線就是每個小節(jié)分隔符,和4/4對應(yīng);

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

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

編寫代碼

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

staticvolatileintg_buttonPressed=0;staticconstuint16_tg_tuneFreqs[]={0,//40MHz對應(yīng)的分頻系數(shù):
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應(yīng)該是低八度的,鏈接圖片中的曲譜不對,聲音到最后聽起來不太對勁};//曲譜時值,根據(jù)簡譜記譜方法轉(zhuǎn)寫,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);//設(shè)置時鐘源為晶體時鐘(40MHz,默認時鐘源160MHz)

for(size_ti=0;i

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

編輯:hfy

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

    關(guān)注

    0

    文章

    2

    瀏覽量

    1225
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【正點原子STM32MP257開發(fā)板試用】5.播放音樂

    前言 感謝正點原子和電子發(fā)燒友論壇提供的這次機會讓我有機會體驗這款正點原子STM32MP257開發(fā)板,希望可以借這個機會好好學(xué)習(xí)一下。 環(huán)境搭建 播放音樂有很多Python庫比如pygame
    發(fā)表于 06-28 14:27

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    為什么PCM2707做的聲卡可以播放音樂但是HID按鍵不能用?

    前幾天用PCM2707C做了個USB聲卡,插上電腦自動安裝了3個驅(qū)動,播放音頻沒問題,可是按鍵去沒有反應(yīng),手冊上說可以通過按鍵上一曲下一曲和暫停,不知是為何調(diào)了半天就是沒反應(yīng).功能選擇端口是按手冊接的.不知有沒有人遇到過同樣的問題,能否提供一點想法.謝了!
    發(fā)表于 10-16 06:02

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

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

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

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

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

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

    PCM2903無法透過Audio LINE IN實現(xiàn)音樂播放怎么辦

    這邊一個機種用的是 Windows XP系統(tǒng),Audio LINE-IN直接插入 LINEIN cable通過手機播放音樂,LINEOUT 沒有聲音輸出;當(dāng)打開聲音硬件測試向?qū)r,才有聲音輸出
    發(fā)表于 10-09 06:30

    設(shè)計的TPA3116D2功放電路,播放音樂最大輸出時部分IC出現(xiàn)斷音的原因?

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

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

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