5个月2天前IP:山东
950311
3楼

可以的,下面是我写的MP3播放器


import board

import audiopwmio

import audiomp3

import time

import microcontroller

import digitalio

import os

# ==================== 硬件配置 ====================

AUDIO_PIN = board.GP13 # 音频输出引脚

BUTTON_PIN = board.GP24 # 切歌按键(短接 GND 触发)

OVERCLOCK_FREQ_HZ = 150000000 # 超频以获得更流畅的解码

# ==================== 初始化按键(内置上拉,短接时为低电平) ====================

button = digitalio.DigitalInOut(BUTTON_PIN)

button.switch_to_input(pull=digitalio.Pull.UP)

# ==================== 扫描根目录下的 MP3 文件 ====================

def get_mp3_files():

files = []

for file in os.listdir("/"):

if file.lower().endswith(".mp3"):

files.append(file)

files.sort()

return files

playlist = get_mp3_files()

if not playlist:

# 没有歌曲时闪灯或仅保持静默,这里简单进入死循环

while True:

time.sleep(1)

current_index = 0

def next_song():

global current_index

current_index = (current_index + 1) % len(playlist)

# ==================== 主播放逻辑 ====================

microcontroller.cpu.frequency = OVERCLOCK_FREQ_HZ

audio_out = None

try:

audio_out = audiopwmio.PWMAudioOut(AUDIO_PIN)

while True:

mp3_file_name = playlist[current_index]

try:

with open(mp3_file_name, "rb") as mp3_file:

decoder = audiomp3.MP3Decoder(mp3_file)

audio_XXXXXXXXXXXXXXX(decoder)

button_last = button.value

while audio_out.playing:

# 检测按键下降沿(按下)

current_button = button.value

if button_last and not current_button:

audio_out.stop()

next_song()

# 等待按键释放,避免连续触发

while not button.value:

time.sleep(0.01)

time.sleep(0.2)

break # 退出内层循环,开始播放新歌

button_last = current_button

time.sleep(0.05) # 短延时,保证按键响应灵敏

else:

# 歌曲自然播放完毕,自动切下一首

next_song()

time.sleep(0.5)

except Exception as e:

# 单曲播放异常,等待 2 秒后尝试下一首

time.sleep(2)

next_song()

except Exception as e:

# 音频输出初始化失败,陷入死循环

while True:

time.sleep(1)

finally:

if audio_out:

audio_out.stop()

audio_out.deinit()

+1
科创币
Always_with_myself
2026/08/23
Star★ +1
评论
3
文号 / 950311

实习会员
名片发私信
学术分 0
总主题 0 帖总回复 4 楼拥有证书:进士 机友
注册于 2026/05/17 12:53:13最后登录 2026/10/02 21:23:04
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:山东

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的