吴忠躺衫网络科技有限公司

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

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

3天內不再提示

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

鴻蒙系統(tǒng)HarmonyOS ? 來源:oschina ? 作者:osc_2wq8ft8d ? 2020-11-11 12:04 ? 次閱讀

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

用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;

音符-頻率對應關系

參考: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);
}

我們通過直接調用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);輸出方波信號;

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

可以輸出的方波最低頻率

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

>>>40*1000*1000/65535
610.3608758678569

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

準備曲譜

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

簡譜說明

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

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

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

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

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

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

編寫代碼

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

staticvolatileintg_buttonPressed=0;staticconstuint16_tg_tuneFreqs[]={0,//40MHz對應的分頻系數(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應該是低八度的,鏈接圖片中的曲譜不對,聲音到最后聽起來不太對勁};//曲譜時值,根據(jù)簡譜記譜方法轉寫,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

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

    關注

    0

    文章

    2

    瀏覽量

    1173
  • 鴻蒙
    +關注

    關注

    57

    文章

    2392

    瀏覽量

    43059
收藏 人收藏

    評論

    相關推薦

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

    我使用TLV320AIC3254EVM-U 用PPS 控制時候播放音樂,突然中斷,然后又恢復。出現(xiàn)頻率很高。用TI的固件并用CS軟件播放時候沒有出現(xiàn)這個問題。 請問大家我需要做什么部分參數(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 設置是44.1KHz,Mclk是24M; 目前問題是:播放音樂時,i2s上Wclk,Bclk都沒有信號;
    發(fā)表于 10-22 07:40

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

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

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

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

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

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

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

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

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

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

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

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

    如何通過BLE播放音頻?

    現(xiàn)在是我有一個android app,有一塊esp32板子上面有喇叭,板子刷了a2dp_sink例子的固件。如果用bluetooth 和板子pair之后,可以播放音樂。 現(xiàn)在要求不用bluetooth,而是用ble連接,然后播放音樂,請問可以實現(xiàn)嗎?求指點迷津,謝謝。
    發(fā)表于 06-26 06:36

    請問用蜂鳴器播放音樂的時候如何同時播放兩段音樂

    我用 PWM 控制的音樂播放,可以按照樂譜播放音符 但現(xiàn)在有個需求,是播放背景音樂的時候同時疊
    發(fā)表于 06-14 08:23

    HarmonyOS實戰(zhàn)開發(fā)-如何實現(xiàn)音頻低時延錄制和播放,AudioVivid音樂播放的相關功能

    介紹 本示例主要展示了音頻低時延錄制和播放,AudioVivid音樂播放的相關功能: 低時延錄制。 低時延播放。 AudioVivid播放.
    發(fā)表于 05-11 20:26

    KT148A語音芯片串口版本播放音樂的時候,直接導致單片機工作異常

    使用你們KT148A串口版本播放音樂的時候,直接導致單片機工作異常,測了一下供電發(fā)現(xiàn)每次播放音樂的時候,供電會有很大波動。看了一下你們的手冊,說是帶載能力不夠,但是我把供電接出來,接到你們的測試板上時,單片機又正常工作了
    的頭像 發(fā)表于 05-07 10:50 ?555次閱讀
    KT148A語音芯片串口版本<b class='flag-5'>播放音樂</b>的時候,直接導致單片機工作異常

    藍牙連接手機播放音樂的同時傳輸少量數(shù)據(jù),那些藍牙芯片可以實現(xiàn)呢

    藍牙連接手機播放音樂的同時連接另一藍牙芯片傳輸少量數(shù)據(jù),那些藍牙芯片可以實現(xiàn)呢? 這個需求,其實就是雙模的需求 簡單描述就是:播放音樂的同時,還可以連接ble,進行數(shù)據(jù)的傳輸。二者同時進行,互不
    的頭像 發(fā)表于 04-30 11:26 ?792次閱讀
    藍牙連接手機<b class='flag-5'>播放音樂</b>的同時傳輸少量數(shù)據(jù),那些藍牙芯片可以實現(xiàn)呢

    鴻蒙HarmonyOS開發(fā)實戰(zhàn):【分布式音樂播放

    本示例使用fileIo獲取指定音頻文件,并通過AudioPlayer完成了音樂播放完成了基本的音樂播放、暫停、上一曲、下一曲功能;并使用DeviceManager完成了分布式設備列表
    的頭像 發(fā)表于 04-10 17:51 ?943次閱讀
    <b class='flag-5'>鴻蒙</b>HarmonyOS開發(fā)實戰(zhàn):【分布式<b class='flag-5'>音樂</b><b class='flag-5'>播放</b>】
    网上百家乐官网赌场娱乐网规则| 在线玩百家乐官网的玩法技巧和规则| 百家乐官网大| 试玩区百家乐1000| 博彩现金开户| 百家乐官网赌场代理合作| 北京百家乐网上投注| 大发888被查| 澳门百家乐官网游戏说明书| 百家乐视频计牌器| 大发888官方6222.com| 信誉百家乐官网平台| 百家乐怎么样投注| 利博亚洲| 巴厘岛百家乐官网的玩法技巧和规则 | 大发888娱乐厂场| 百家乐官网庄闲局部失衡| 解析百家乐投注法| bet365体育在线15| 百家乐官网大小牌路的含义| 涂山百家乐的玩法技巧和规则| 516棋牌游戏| 路虎百家乐官网的玩法技巧和规则 | 百家乐扫瞄光纤洗牌机扑克洗牌机扑克洗牌机 | 大发888棋牌游戏官网| 百家乐官网投注怎么样| 百家乐大西洋城v| 百家乐官网心态研究| 百家乐分析网| 迪威百家乐官网娱乐| 百家乐大小桌布| 盛世国际娱乐博彩| 百家乐园胎教网| 真博娱乐| 百家乐正网包杀| 网上真钱棋牌游戏| 百家乐最佳下注方法| 金尊国际娱乐城| 澳门百家乐国际| 波音百家乐官网现金网| 百家乐23珠路打法|