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

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

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

3天內不再提示

【RTT設計大賽】音樂播放器設計完成

RT_THREAD ? 2021-11-30 15:19 ? 次閱讀

無意中看大官方一個demo,關于audio功能的設計,現在學習一下。
從內部Flash讀取WAV音頻播放
主要的工作是安裝播放器,通過按鍵控制播放和停止。

1.使能相關組件
需要使用到 Audio 和 dfs 相關的組件

poYBAGGlsHiARX7zAABgA-MjRW0971.pngpYYBAGGlsIqAIH6vAAAjkTyQ7T8342.png

開啟 dfs 的時候會默認開啟 posix 的使能,需要關閉 posix 的使能,否則終端的輸入會有問題。

pYYBAGGlsKOAe6KSAAB-AwiKAJ8060.png

軟件包安裝
本次實驗實現音樂播放功能,單擊按鍵進行音樂切換。需要安裝的軟件包有 wavplayer/optparse/multibutton 三個軟件包。其中 optparse 在 wavplayer 勾選后,自動選擇。
進入軟件包選擇界面。

poYBAGGlsLSAF666AAD5Ap6kKNg960.pngpoYBAGGlsLyAcQ1mAADeuD1G2rM809.png

也可以通過`更多配置`查看所有軟件包來選擇個軟件包:
wavplayer 軟件包安裝

pYYBAGGlsNOAMDDDAAEaGd2dXkk369.png

multibutton 軟件包安裝

pYYBAGGlsOSAHACkAABW-otjzFs259.png

demo編寫
安裝完 wavplayer/optparse/multibutton 三個軟件包之后,就完成此次試驗所需要的依賴的軟件包。接下來開始編寫demo。
下載 romfs.c(本文件包含了兩個音頻文件用于demo播放) 放置到 applications 下
romfs.c
下載 mnt.c 替換 applications 下原有的文件,從而掛載 romfs,主要代碼在下方
mnt.c
#include #include "dfs_romfs.h"
int ab32_romfs_mount(void){
if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0)
{
rt_kprintf("ROM file system initializated!\n");
}
else
{
rt_kprintf("ROM file system initializate failed!\n");
}

return 0;}INIT_ENV_EXPORT(ab32_romfs_mount);
然后在 applications 下新建 event_async.c 文件,復制以下代碼
#include #include #include "board.h"#include #include "wavplayer.h"
#define BUTTON_PIN_0 rt_pin_get("PF.0")#define BUTTON_PIN_1 rt_pin_get("PF.1")
#define NUM_OF_SONGS (2u)
static struct button btn_0;static struct button btn_1;
static uint32_t cnt_0 = 0;static uint32_t cnt_1 = 0;
static char *table[2] ={
"wav_1.wav",
"wav_2.wav",};
void saia_channels_set(uint8_t channels);void saia_volume_set(rt_uint8_t volume);uint8_t saia_volume_get(void);
static uint8_t button_read_pin_0(void){
return rt_pin_read(BUTTON_PIN_0);}
static uint8_t button_read_pin_1(void){
return rt_pin_read(BUTTON_PIN_1);}
static void button_0_callback(void *btn){
uint32_t btn_event_val;

btn_event_val = get_button_event((struct button *)btn);

switch(btn_event_val)
{
case SINGLE_CLICK:
if (cnt_0 == 1) {
saia_volume_set(30);
}else if (cnt_0 == 2) {
saia_volume_set(50);
}else {
saia_volume_set(100);
cnt_0 = 0;
}
cnt_0++;
rt_kprintf("vol=%d\n", saia_volume_get());
rt_kprintf("button 0 single click\n");
break;

case DOUBLE_CLICK:
if (cnt_0 == 1) {
saia_channels_set(1);
}else {
saia_channels_set(2);
cnt_0 = 0;
}
cnt_0++;
rt_kprintf("button 0 double click\n");
break;

case LONG_PRESS_START:
rt_kprintf("button 0 long press start\n");
break;

case LONG_PRESS_HOLD:
rt_kprintf("button 0 long press hold\n");
break;
}}
static void button_1_callback(void *btn){
uint32_t btn_event_val;

btn_event_val = get_button_event((struct button *)btn);

switch(btn_event_val)
{
case SINGLE_CLICK:
wavplayer_play(table[(cnt_1++) % NUM_OF_SONGS]);
rt_kprintf("button 1 single click\n");
break;

case DOUBLE_CLICK:
rt_kprintf("button 1 double click\n");
break;

case LONG_PRESS_START:
rt_kprintf("button 1 long press start\n");
break;

case LONG_PRESS_HOLD:
rt_kprintf("button 1 long press hold\n");
break;
}}
static void btn_thread_entry(void* p){
while(1)
{
/* 5ms */
rt_thread_delay(RT_TICK_PER_SECOND/200);
button_ticks();
}}
static int multi_button_test(void){
rt_thread_t thread = RT_NULL;

/* Create background ticks thread */
thread = rt_thread_create("btn", btn_thread_entry, RT_NULL, 1024, 10, 10);
if(thread == RT_NULL)
{
return RT_ERROR;
}
rt_thread_startup(thread);

/* low level drive */
rt_pin_mode (BUTTON_PIN_0, PIN_MODE_INPUT_PULLUP);
button_init (&btn_0, button_read_pin_0, PIN_LOW);
button_attach(&btn_0, SINGLE_CLICK, button_0_callback);
button_attach(&btn_0, DOUBLE_CLICK, button_0_callback);
button_attach(&btn_0, LONG_PRESS_START, button_0_callback);
button_attach(&btn_0, LONG_PRESS_HOLD, button_0_callback);
button_start (&btn_0);

rt_pin_mode (BUTTON_PIN_1, PIN_MODE_INPUT_PULLUP);
button_init (&btn_1, button_read_pin_1, PIN_LOW);
button_attach(&btn_1, SINGLE_CLICK, button_1_callback);
button_attach(&btn_1, DOUBLE_CLICK, button_1_callback);
button_attach(&btn_1, LONG_PRESS_START, button_1_callback);
button_attach(&btn_1, LONG_PRESS_HOLD, button_1_callback);
button_start (&btn_1);

return RT_EOK;}INIT_APP_EXPORT(multi_button_test);
程序下載
demo編寫完成后,單擊編譯按鈕開始編譯,編譯成功后下載編譯后生成的.dcf固件到芯片
雙擊打開 Downloader

poYBAGGlsP6AGRjDAAMH157mP-I474.png

下載成功后會在串口界面打印"Hello World", 并會有led燈閃爍

pYYBAGGlsRSAHhcOAAgHXsnHPt8509.png

思考:在這個demo學習過程中,發現了這樣幾個問題,一些函數看不懂,不知道參數代表的是什么意思。
對于需要配置什么也不是很明白,應該是對thread還不是很明白,不知道哪里有相關的資料可以學習下。
還有就是安裝的這些軟件包是如何開發的。
因為電腦比較卡,圖片使用的是原demo的。實際工程已經測試完。

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

    關注

    0

    文章

    68

    瀏覽量

    15803
收藏 人收藏

    評論

    相關推薦

    云服務 Flexus X 實例,Docker 集成搭建 YesPlayMusic 網易云音樂播放器

    YesPlayMusic 是一款基于 Electron 的開源網易云音樂桌面播放器,以簡潔的界面和豐富的功能受到了許多用戶的喜愛,特別是對于希望在桌面上享受網易云音樂服務的用戶 Docker 安裝并
    的頭像 發表于 01-13 18:17 ?135次閱讀
    云服務<b class='flag-5'>器</b> Flexus X 實例,Docker 集成搭建 YesPlayMusic 網易云<b class='flag-5'>音樂</b><b class='flag-5'>播放器</b>

    畢業設計競賽選題推薦 | 嵌入式Linux應用之音樂播放器項目實戰(含文檔及源碼)

    01引言隨著數字化娛樂日益普及,音樂播放器作為人們生活中不可或缺的一部分,扮演著重要的角色。無論是通勤途中、健身鍛煉還是工作學習,一個好用的音樂播放器都能為用戶提供愉悅的音頻體驗,豐富
    的頭像 發表于 12-23 16:50 ?330次閱讀
    畢業設計競賽選題推薦 | 嵌入式Linux應用之<b class='flag-5'>音樂</b><b class='flag-5'>播放器</b>項目實戰(含文檔及源碼)

    海貝R1便攜音樂播放器開箱

    作為一個愛聽音樂打發時間的玩家,我已經習慣隨身攜帶一款小巧輕便的音樂播放器,從早期的CD播放器到現在的數碼播放器,它總能在不經意間中給我帶來
    的頭像 發表于 12-09 09:40 ?219次閱讀
    海貝R1便攜<b class='flag-5'>音樂</b><b class='flag-5'>播放器</b>開箱

    變速播放器1和2的區別

    關于變速播放器1和2的區別,由于這里并未明確指出“變速播放器1”和“變速播放器2”具體指的是哪兩款軟件,因此我無法提供這兩款特定軟件之間的對比。不過,我可以從一般意義上探討變速播放器
    的頭像 發表于 10-14 09:48 ?236次閱讀

    為什么好的播放器還要配解碼

    的關系 播放器是用于播放音頻和視頻文件的軟件或硬件設備。它通常包括一個用戶界面,允許用戶選擇文件、控制播放、調整音量等。然而,播放器本身并不直接處理音頻和視頻數據的解碼過程,而是依賴于
    的頭像 發表于 09-23 18:02 ?1527次閱讀

    數字播放器和解碼

    數字播放器和解碼的組合能夠提供更優質的音頻體驗。數字播放器負責處理和傳輸音頻數據,而解碼則負責將這些數據轉換為高質量的模擬信號。它們的配合可以確保你聽到的音頻既清晰又真實。
    的頭像 發表于 09-06 17:35 ?1231次閱讀
    數字<b class='flag-5'>播放器</b>和解碼<b class='flag-5'>器</b>

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

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

    串口音樂播放IC:音樂播放的新革命

    播放IC是一種集成電路,它能夠通過串口接口接收音頻數據,然后通過內部的解碼將數字音頻信號轉換為模擬音頻信號,從而驅動揚聲發出聲音。這種技術相較于傳統的音樂
    的頭像 發表于 05-06 14:32 ?629次閱讀

    HarmonyOS開發案例:【視頻播放器

    使用ArkTS語言實現視頻播放器,主要包括主頁面和視頻播放頁面
    的頭像 發表于 04-24 14:52 ?942次閱讀
    HarmonyOS開發案例:【視頻<b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【視頻播放器

    使用ArkTS語言實現視頻播放器,主要包括主界面和視頻播放界面,
    的頭像 發表于 04-23 17:25 ?745次閱讀
    HarmonyOS開發案例:【視頻<b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【音樂播放器

    使用ArkTS語言實現了一個簡易的音樂播放器應用
    的頭像 發表于 04-23 15:44 ?1110次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>音樂</b><b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【視頻播放器

    基于video、swiper和slider組件,實現簡單的視頻播放器,可支持海報輪播、視頻播放等功能。
    的頭像 發表于 04-22 21:06 ?512次閱讀
    HarmonyOS開發案例:【視頻<b class='flag-5'>播放器</b>】

    鴻蒙HarmonyOS開發實戰:【分布式音樂播放

    本示例使用fileIo獲取指定音頻文件,并通過AudioPlayer完成音樂播放完成了基本的音樂播放、暫停、上一曲、下一曲功能;并使用D
    的頭像 發表于 04-10 17:51 ?915次閱讀
    鴻蒙HarmonyOS開發實戰:【分布式<b class='flag-5'>音樂</b><b class='flag-5'>播放</b>】

    用STM32F105的USB做了一個讀U盤MP3的播放器,為什么聽到的音樂播放速度很快?

    最近用STM32F105的USB做了一個讀U盤MP3的播放器,使用I2S2_DMA輸出音頻數據,再使用TAS5711數字功放進行輸出聲音。讀出文件的采樣為44.1khz, I2S也設置為此采樣率。不知為何,聽到的音樂播放速度很快
    發表于 04-02 06:52

    鴻蒙開發-視頻播放器方案

    使用on(\'stateChange\')方法監聽狀態變化。如果應用在視頻播放器處于錯誤狀態時執行操作,系統可能會拋出異常或生成其他未定義的行為。 圖1 播放狀態變化示意圖 當播放處于prepared
    發表于 02-19 17:20
    主站蜘蛛池模板: 免费看国产黄色片| 成人毛片一区二区三区| 成人免费黄色网| 色视频在线观看免费| 四虎最新永久在线精品免费| 亚1洲二区三区四区免费| 亚洲国产福利精品一区二区| 2021国产精品午夜久久 | 添人人躁日日躁夜夜躁夜夜揉| 亚洲a免费| 国产精品自线在线播放| 一区二区三区四区国产精品| 天堂在线免费| 两性色午夜视频自由成熟的性| 国产精品久久婷婷六月丁香| 午夜免费观看| 五月天男人的天堂| 女同毛片| 91大神在线精品网址| 丁香六月激情综合| 免费观看黄视频网站| 性欧美f| 欧美日韩中文字幕| 国产成人教育视频在线观看| 国产单男| 欧美女同网站| 34看网片午夜理| 一级做a爱片在线播放| 日本免费大黄在线观看| 国产你懂的在线观看| 国产一级特黄高清在线大片| 午夜性福| 五月天丁香激情| 国产免费好大好硬视频| 最新天堂| 亚洲色图综合网站| 欧美一区二区三区性| 97色在线播放| 深夜桃色影院| 一色屋精品免费视频 视频| 女人张开腿男人桶|