Golang终端音乐播放器 - Ditty的使用
Golang终端音乐播放器 - Ditty的使用 ditty 是一款基于 beep 和 cview 的终端用户界面音乐播放器。欢迎贡献代码。
代码仓库:https://gitlab.com/tslocum/ditty

1 回复
更多关于Golang终端音乐播放器 - Ditty的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Ditty是一个优秀的终端音乐播放器项目,结合了beep音频库和cview TUI框架。以下是一个基本的使用示例:
package main
import (
"log"
"time"
"gitlab.com/tslocum/ditty"
"gitlab.com/faiface/beep/mp3"
"gitlab.com/faiface/beep/speaker"
)
func main() {
// 初始化播放器
player, err := ditty.NewPlayer()
if err != nil {
log.Fatal(err)
}
defer player.Close()
// 加载音频文件
f, err := os.Open("music.mp3")
if err != nil {
log.Fatal(err)
}
defer f.Close()
streamer, format, err := mp3.Decode(f)
if err != nil {
log.Fatal(err)
}
defer streamer.Close()
// 初始化音频系统
err = speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
if err != nil {
log.Fatal(err)
}
// 播放音乐
done := make(chan bool)
speaker.Play(beep.Seq(streamer, beep.Callback(func() {
done <- true
})))
// 等待播放完成
<-done
}
对于播放列表管理:
// 创建播放列表
playlist := ditty.NewPlaylist()
playlist.Add("song1.mp3", "Artist 1", "Song Title 1")
playlist.Add("song2.mp3", "Artist 2", "Song Title 2")
// 设置播放列表到播放器
player.SetPlaylist(playlist)
// 播放特定曲目
player.PlayTrack(0)
// 控制播放
player.Play()
player.Pause()
player.Next()
player.Previous()
Ditty的TUI界面基于cview,可以自定义界面组件:
// 创建自定义界面布局
app := cview.NewApplication()
playerUI := ditty.NewPlayerUI(player)
// 设置键盘快捷键
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() {
case tcell.KeySpace:
player.TogglePlayPause()
case tcell.KeyRight:
player.Next()
case tcell.KeyLeft:
player.Previous()
}
return event
})
// 启动应用
if err := app.SetRoot(playerUI, true).Run(); err != nil {
log.Fatal(err)
}
音频格式支持方面,Ditty通过beep库支持多种格式:
// 支持WAV格式
import "gitlab.com/faiface/beep/wav"
// 支持FLAC格式
import "gitlab.com/faiface/beep/flac"
// 支持OGG Vorbis格式
import "gitlab.com/faiface/beep/vorbis"
Ditty的架构设计允许轻松扩展新功能,比如添加音频效果:
// 添加回声效果
import "gitlab.com/faiface/beep/effects"
echo := &effects.Echo{
Streamer: streamer,
Num: 2,
Delay: time.Second / 4,
Feedback: 0.6,
}
speaker.Play(echo)
项目采用模块化设计,各个组件(音频解码、播放控制、用户界面)分离清晰,便于贡献代码。

