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

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

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

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

【RTT大賽作品連載】AB32VG1評(píng)估板 音樂(lè)播放器

磐石11 ? 2021-11-12 21:11 ? 次閱讀

之前,記錄了從新建項(xiàng)目到點(diǎn)燈,按鈕控制彩燈測(cè)試!接下來(lái)看看在如何AB32VG1評(píng)估板實(shí)現(xiàn)音樂(lè)播放器!

硬件如圖:

pYYBAGGOV26AclLeAAil8f1AsAY884.png要用到TF卡,和美標(biāo)3.2mm耳機(jī)

RT-ThreadStudio的音樂(lè)播放器項(xiàng)目到對(duì)應(yīng)開發(fā)配置!??!整體配置:

poYBAGGOWUKAHighAADabe-yFgI912.png

詳細(xì)配置如下:

內(nèi)核設(shè)置如圖(注意不要多選,或者少選!!?。?/p> pYYBAGGOWiCAKwz9AADy5qegeM8756.pngpoYBAGGOWm6AOoJKAAC9JSRg9os028.png

組件如圖:

pYYBAGGOWyOAIYNaAADoqsr-8R8912.pngpoYBAGGOW6OAak81AADzYSEvOus826.png

軟件包如圖:

poYBAGGOXBGAZvzWAACU8kdvYDI997.pngpoYBAGGOXKCAaSkPAADeO2Bcc8o353.png

硬件設(shè)置如圖:

poYBAGGOXOSAYZApAACQGAx0gR4739.png

以上就是在RT-ThreadStudio的設(shè)置,這是我驗(yàn)證過(guò)的設(shè)置?。?!其他的設(shè)置是否可用存在很大問(wèn)題?。。∥易约涸囘^(guò)選擇MP3格式,結(jié)果異常一大堆!!!所以建議在設(shè)置項(xiàng)目的時(shí)候盡量要注意?。?!我也希望用截圖這種直觀的方式,快速記錄項(xiàng)目設(shè)置的每個(gè)細(xì)節(jié)!盡量保證照著這個(gè)記錄重新建類似的項(xiàng)目一次成功?。。?/p>

下面就是軟件實(shí)現(xiàn)!有了前兩次的AB32VG1評(píng)估板項(xiàng)目調(diào)試經(jīng)驗(yàn)!這次相對(duì)就順利多了!

軟件邏輯是初始化后先獲取對(duì)應(yīng)目錄下的.wav格式文件列表!在自動(dòng)播放第一首歌!效果如圖!

pYYBAGGOYESABlZMAACTOET9t4c696.png

接下來(lái)就是通過(guò)按鍵實(shí)現(xiàn)各種操作!如圖:

pYYBAGGOYLSAMmCQAADO7YSwBS4339.png

增加了兩個(gè)關(guān)聯(lián)變量,控制聲音,及播放完畢

poYBAGGOYvmANlNiAADXDPtO8PM762.png

配合以下源碼:

/* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-11-12 panshi90 the first version
*/
#include
#include
#include "board.h"
#include
#include "wavplayer.h"
#include
#include
#include
#include
//S3
#define BUTTON_PIN_0 rt_pin_get("PF.0")
//S2
#define BUTTON_PIN_1 rt_pin_get("PF.1")
//#define NUM_OF_SONGS (1000u)
static struct button btn_0;
static struct button btn_1;
uint8_t cur_volume = 50;
int stopstate = 0;
rt_mutex_t mutex1;
int EndState = 0;
static uint32_t cnt_0 = 0;
//static uint32_t cnt_1 = 0;
uint16_t currentSong = 0;
static uint32_t NUM_OF_SONGS = 0;
char table[200];

static struct dfs_fd fd1;
static struct dirent dirent1;
void readFileListos()
{
struct stat stat;
int length, fd;
char* fullpath, * path;

fullpath = RT_NULL;
NUM_OF_SONGS = 1;
//system("cd .");
rt_thread_mdelay(10);
rm("wav.txt");
rt_thread_mdelay(50);
fd = open("wav.txt", O_WRONLY | O_CREAT | O_APPEND);
path = rt_strdup("/WAV");
if (dfs_file_open(&fd1, path, O_DIRECTORY) == 0)
{
//rt_kprintf("Directory %s:\n", path);
do
{
memset(&dirent1, 0, sizeof(dirent1));
length = dfs_file_getdents(&fd1, &dirent1, sizeof(dirent1));
if (length > 0)
{
memset(&stat, 0, sizeof(struct stat));

// build full path for each file
fullpath = dfs_normalize_path(path, dirent1.d_name);
if (fullpath == RT_NULL)
break;

if (dfs_file_stat(fullpath, &stat) == 0)
{
char songPath[200] = "WAV/";
strcat(songPath, dirent1.d_name);
strcat(songPath, "\n");
write(fd, songPath, sizeof(songPath));
//rt_kprintf("%s\n", songPath);
if (S_ISDIR(stat.st_mode))
{
rt_kprintf("%-25s\n", "

while (read(fd, songPath, sizeof(songPath)) > 0)
{
if (i == currentSong) {
int32_t len = strlen(songPath);
songPath[len - 1] = '\0';
strcpy(table, songPath);
}
i++;
}
}
close(fd);
}
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_S3_callback(void* btn)
{
uint32_t btn_event_val;
btn_event_val = get_button_event((struct button*)btn);
switch (btn_event_val)
{
case SINGLE_CLICK:
cnt_0++;
cur_volume = cnt_0 * 10;
if (cnt_0 == 10)
{
cnt_0 = 1;
}
saia_volume_set(cur_volume);
rt_kprintf("vol=%d\n", saia_volume_get());
rt_kprintf("button S3 single click\n");
break;
case DOUBLE_CLICK:
if (cnt_0 > 1)
{
cnt_0--;
}
cur_volume = cnt_0 * 10;
wavplayer_volume_set(cur_volume);
rt_kprintf("button S3 double click\n");
break;
case LONG_PRESS_START:
rt_kprintf("button S3 long press start\n");
break;
case LONG_PRESS_HOLD:
rt_kprintf("button S3 long press hold\n");
break;
}
}

static void button_S2_callback(void* btn)
{
uint32_t btn_event_val;
int state = 0;
EndState = 1;
btn_event_val = get_button_event((struct button*)btn);

switch (btn_event_val)
{
case SINGLE_CLICK:
if (currentSong == NUM_OF_SONGS) {
currentSong = 0;
}
GetCurrentPath();
stopstate = 0;
wavplayer_play(table);
currentSong++;

rt_kprintf("button S2 single click\n");
break;
case DOUBLE_CLICK:
state = wavplayer_state_get();
switch (state)
{
case PLAYER_STATE_PLAYING:
wavplayer_pause();
break;
case PLAYER_STATE_PAUSED:
wavplayer_resume();
break;
case PLAYER_STATE_STOPED:
GetCurrentPath();
wavplayer_play(table);
rt_kprintf("button S2 double click\n");
break;
default:
break;
}
default:
break;
}

stopstate = 0;
EndState = 0;
}

static void btn_thread_entry(void* p)
{
while (1)
{
rt_thread_delay(RT_TICK_PER_SECOND / 500);
rt_err_t result = rt_mutex_take(mutex1, 2);
if (result == RT_EOK) {
button_ticks();
rt_mutex_release(mutex1);
}
}
}
static void endCheck_thread_entry(void* p)
{
while (1)
{
rt_thread_mdelay(2500);
rt_err_t result = rt_mutex_take(mutex1, 2);
int state = wavplayer_state_get();
if (result == RT_EOK) {
if ((state == PLAYER_STATE_STOPED) && (EndState == 0)) {
if ((stopstate == 1)) {
stopstate = 0;
if (currentSong == NUM_OF_SONGS) {
currentSong = 0;
}
GetCurrentPath();
wavplayer_play(table);
currentSong++;
}
}
rt_mutex_release(mutex1);
}
}
}

static int multi_button_test(void)
{
rt_thread_t thread = RT_NULL, thread1 = RT_NULL;
mutex1 = rt_mutex_create("xx", RT_IPC_FLAG_PRIO);
//Create background ticks thread
rt_thread_mdelay(2000);
readFileListos();
GetCurrentPath();
saia_volume_set(cur_volume);
wavplayer_play(table);
currentSong++;
thread = rt_thread_create("btn", btn_thread_entry, RT_NULL, 2048, 10, 10);
thread1 = rt_thread_create("endCHeck", endCheck_thread_entry, RT_NULL, 2000, 11, 10);
if (thread == RT_NULL)
{
return RT_ERROR;
}
rt_thread_startup(thread);
if (thread1 == RT_NULL)
{
return RT_ERROR;
}
rt_thread_startup(thread1);
// 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_S3_callback);
button_attach(&btn_0, DOUBLE_CLICK, button_S3_callback);
button_attach(&btn_0, LONG_PRESS_START, button_S3_callback);
button_attach(&btn_0, LONG_PRESS_HOLD, button_S3_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_S2_callback);
button_attach(&btn_1, DOUBLE_CLICK, button_S2_callback);
button_attach(&btn_1, LONG_PRESS_START, button_S2_callback);
button_attach(&btn_1, LONG_PRESS_HOLD, button_S2_callback);
button_start(&btn_1);
return RT_EOK;
}

INIT_APP_EXPORT(multi_button_test);

即可實(shí)現(xiàn)AB32VG1評(píng)估板 音樂(lè)播放器!

目前只支持.WAV格式,其實(shí)一個(gè)好的播放器應(yīng)該支持多種音頻文件格式!如:MP3,AIFF!有興趣的愛(ài)好者可以在此基礎(chǔ)上實(shí)現(xiàn)更多或者自己更喜歡的方式?。?!

歡迎留言點(diǎn)贊!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    819

    瀏覽量

    119890
  • RISC
    +關(guān)注

    關(guān)注

    6

    文章

    465

    瀏覽量

    83876
  • RTThread
    +關(guān)注

    關(guān)注

    8

    文章

    132

    瀏覽量

    41002
  • 中科藍(lán)訊
    +關(guān)注

    關(guān)注

    9

    文章

    57

    瀏覽量

    9933
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    海貝HiBy R1播放器體驗(yàn)

    之前分享過(guò)用接入便攜耳放來(lái)提升音質(zhì),讓手機(jī)端也能享受HiFi級(jí)的聽感體驗(yàn)。這個(gè)方案對(duì)于沒(méi)有數(shù)碼播放器的初燒用戶來(lái)說(shuō),確實(shí)是種非常高效的方法。 但缺點(diǎn)也是有的,比如歌曲存放需要占用手機(jī)存儲(chǔ)空間,手機(jī)
    的頭像 發(fā)表于 01-24 11:27 ?112次閱讀
    海貝HiBy R<b class='flag-5'>1</b><b class='flag-5'>播放器</b>體驗(yàn)

    云服務(wù) Flexus X 實(shí)例,Docker 集成搭建 YesPlayMusic 網(wǎng)易云音樂(lè)播放器

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

    畢業(yè)設(shè)計(jì)競(jìng)賽選題推薦 | 嵌入式Linux應(yīng)用之音樂(lè)播放器項(xiàng)目實(shí)戰(zhàn)(含文檔及源碼)

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

    海貝R1便攜音樂(lè)播放器開箱

    ,插上耳機(jī),你就擁有了一片獨(dú)立的小天地。 海貝R1這款便攜音樂(lè)播放器的顏值相當(dāng)出色,75克的機(jī)身塞進(jìn)去了3英寸的高清觸摸屏。圓潤(rùn)的外形配合透明中框和多色可選主題配色,顏值非常的能打。純凈的HiBy OS不僅簡(jiǎn)單易用,也進(jìn)一步優(yōu)化
    的頭像 發(fā)表于 12-09 09:40 ?276次閱讀
    海貝R<b class='flag-5'>1</b>便攜<b class='flag-5'>音樂(lè)</b><b class='flag-5'>播放器</b>開箱

    變速播放器1和2的區(qū)別

    關(guān)于變速播放器1和2的區(qū)別,由于這里并未明確指出“變速播放器1”和“變速播放器2”具體指的是哪兩款軟件,因此我無(wú)法提供這兩款特定軟件之間的對(duì)
    的頭像 發(fā)表于 10-14 09:48 ?272次閱讀

    步步高AB915D DVD播放器維修圖紙

    步步高AB915D DVD播放器采用ZIVA-4.1芯片方案
    發(fā)表于 09-29 10:18 ?0次下載

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

    好的播放器之所以需要配備解碼,是因?yàn)橐纛l和視頻文件的編碼和解碼是一個(gè)復(fù)雜的過(guò)程,涉及到多種技術(shù)和標(biāo)準(zhǔn)。解碼的作用是將壓縮的音頻和視頻數(shù)據(jù)還原成可以被播放設(shè)備識(shí)別和
    的頭像 發(fā)表于 09-23 18:02 ?1731次閱讀

    數(shù)字播放器和解碼

    數(shù)字播放器和解碼的組合能夠提供更優(yōu)質(zhì)的音頻體驗(yàn)。數(shù)字播放器負(fù)責(zé)處理和傳輸音頻數(shù)據(jù),而解碼則負(fù)責(zé)將這些數(shù)據(jù)轉(zhuǎn)換為高質(zhì)量的模擬信號(hào)。它們的配合可以確保你聽到的音頻既清晰又真實(shí)。
    的頭像 發(fā)表于 09-06 17:35 ?1366次閱讀
    數(shù)字<b class='flag-5'>播放器</b>和解碼<b class='flag-5'>器</b>

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

    錄制 點(diǎn)擊暫停按鈕,暫停錄制,錄音時(shí)間也停止計(jì)時(shí) 點(diǎn)擊繼續(xù)按鈕,繼續(xù)錄制,錄音時(shí)間繼續(xù)計(jì)時(shí) 停止錄制后,會(huì)生成錄制結(jié)果,界面上有一個(gè)低時(shí)延播放開關(guān)和錄制成功的音頻播放器,點(diǎn)擊低時(shí)延播放開關(guān)可打開低時(shí)延
    發(fā)表于 05-11 20:26

    串口音樂(lè)播放IC:音樂(lè)播放的新革命

    播放IC是一種集成電路,它能夠通過(guò)串口接口接收音頻數(shù)據(jù),然后通過(guò)內(nèi)部的解碼將數(shù)字音頻信號(hào)轉(zhuǎn)換為模擬音頻信號(hào),從而驅(qū)動(dòng)揚(yáng)聲發(fā)出聲音。這種技術(shù)相較于傳統(tǒng)的音樂(lè)
    的頭像 發(fā)表于 05-06 14:32 ?664次閱讀

    HarmonyOS開發(fā)案例:【視頻播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)視頻播放器,主要包括主頁(yè)面和視頻播放頁(yè)面
    的頭像 發(fā)表于 04-24 14:52 ?989次閱讀
    HarmonyOS開發(fā)案例:【視頻<b class='flag-5'>播放器</b>】

    HarmonyOS開發(fā)案例:【視頻播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)視頻播放器,主要包括主界面和視頻播放界面,
    的頭像 發(fā)表于 04-23 17:25 ?789次閱讀
    HarmonyOS開發(fā)案例:【視頻<b class='flag-5'>播放器</b>】

    HarmonyOS開發(fā)案例:【音樂(lè)播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的音樂(lè)播放器應(yīng)用
    的頭像 發(fā)表于 04-23 15:44 ?1161次閱讀
    HarmonyOS開發(fā)案例:【<b class='flag-5'>音樂(lè)</b><b class='flag-5'>播放器</b>】

    HarmonyOS開發(fā)案例:【視頻播放器

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

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

    最近用STM32F105的USB做了一個(gè)讀U盤MP3的播放器,使用I2S2_DMA輸出音頻數(shù)據(jù),再使用TAS5711數(shù)字功放進(jìn)行輸出聲音。讀出文件的采樣為44.1khz, I2S也設(shè)置為此采樣率。不知為何,聽到的音樂(lè)播放速度很快
    發(fā)表于 04-02 06:52
    主站蜘蛛池模板: 激情综合色五月丁香六月亚洲 | 欧美人另类zooz | 色老头综合 | 全免费一级毛片在线播放 | 五月天婷五月天综合网在线 | 三级在线观看免播放网站 | 久久在草 | 青青热久久国产久精品秒播 | 成 人 a v黄 色 | 一区卡二区卡三区卡视频 | 狠狠干天天色 | 欧美精品一区在线看 | 超级淫小黄文大全很污的那种 | 成人在线一区二区三区 | 欧美黄页| 亚州色吧 | 日日噜噜夜夜狠狠tv视频免费 | 欧美日韩性猛交xxxxx免费看 | 六月丁香六月婷婷 | 欧美三级在线免费观看 | 欧美一欧美一区二三区性 | 99视频网址| 亚洲68283精品人体 | 日本一区二区三区四区不卡 | 免费抓胸吻胸激烈视频网站 | 狠狠干天天干 | 亚洲免费一级视频 | 久久永久免费视频 | 天天插夜夜爽 | 欧美成人鲁丝片在线观看 | 中国一级生活片 | 久久亚洲成人 | 国产美女视频黄a视频全免费网站 | 午夜小视频免费观看 | 亚洲αv久久久噜噜噜噜噜 亚洲аv电影天堂网 | 少妇被按摩 | 性视频软件 | 2018天天干夜夜操 | 特黄特色大片免费播放路01 | 在线播放国产一区 | 黄色国产在线视频 |