Golang终端音乐播放器 - Ditty的使用

Golang终端音乐播放器 - Ditty的使用 ditty 是一款基于 beepcview 的终端用户界面音乐播放器。欢迎贡献代码。

代码仓库: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)

项目采用模块化设计,各个组件(音频解码、播放控制、用户界面)分离清晰,便于贡献代码。

回到顶部