deadbeef播放器歌词插件

deadbeef播放器歌词插件

起风了

一直在找一款在linux下能替代foobar2k的播放器,直到发现deadbeef,是一个小而美替代品, 但是没有好的歌词插件,看看自己能不能开发一个歌词插件。

第一版deadbeef歌词插件 是基于开源代码改的,使用gtkmm3.0, 随着deadbeef版本的升级,linux版本也无法正常使用,移植windows也有bug不能用,gtkmm依赖太多,所以萌生了直接用gtk3重写插件的想法,很多代码是AI写的。

Windows 效果

在这里插入图片描述

Linux(Debian) 效果

在这里插入图片描述
在这里插入图片描述

一、源码结构

  1. 代码目录结构
  • src 代码目录
  • Makefile make编译文件
    • make lyricdemo 编译目标文件:lyric_demo
    • make lyricbar 编译deadbeef插件 目标文件 ddb_lyricbar_gtk3
  • CmakeLists.txt cmake编译文件
  1. 程序代码主要入口
  • main.cpp 用于编译lyric_demo使用
  • plugin.cpp 用于编译deadbeef插件 ddb_lyricbar_gtk3

二、歌词面板调用流程

DeaDBeeF插件模式 (plugin.cpp)

  1. 面板创建: w_lyricbar_create() 创建歌词面板,保存到全局变量 current_lyric_widget
  2. 歌曲开始: message_handler() 监听 DB_EV_SONGSTARTED 事件
  3. 歌词更新: update_lyrics_wrapper() 线程函数:
    • 获取歌曲信息 (artist, title, location)
    • 检查是否需要加载新歌词
    • 调用 set_lyrics() 设置歌词内容
    • 调用 update_lyrics() 更新歌词显示
  4. 歌词加载: set_lyrics()clear_widget() 停止当前滚动歌词定时器、清空当前歌词数据
  5. 歌词加载: set_lyrics()loading_lyrics() 线程加载歌词
  6. UI初始化: g_idle_add_once()init_lyric_handle() 初始化歌词面板
  7. 定时器启动: start_time() 启动定时器
  8. 歌词滚动: lyric_timer_callback() 定时调用 update_lyrics() 滚动歌词

Demo模式 (main.cpp)

  1. 面板创建: lyric_widget_new() 创建歌词面板
  2. 歌曲进度: get_position() 模拟当前歌曲播放位置,自动累加时间
  3. 歌曲切换: 用户点击上一首、下一首按钮分别触发on_pre_clicked事件、on_next_clicked事件,调用 set_lyrics()切换歌曲
  4. 后续流程: 与插件模式相同

关键函数说明

  • set_lyrics(): 设置当前播放歌曲,开启线程加载歌词
  • loading_lyrics(): 后台线程加载歌词文件或从网络下载
  • init_lyric_handle(): UI线程初始化歌词面板显示
  • start_time(): 启动定时器进行歌词同步
  • lyric_timer_callback(): 定时器回调,调用 get_position() 获取播放位置并更新歌词
  • update_lyrics(): 根据播放时间更新歌词高亮和滚动位置

三、编译

3.1 环境

  • Linux
sudo apt install libgtk-3.0+-dev
sudo apt install libcurl4-openssl-dev
sudo apt install libtag1-dev
sudo apt-get install autoconf automake libtool autopoint 
  • Windows
  1. gtk3lyrics.sln只能编译demo,无法编译插件

  2. 使用MSYS2 MINGW64

pacman -S mingw-w64-x86_64-taglib
pacman -S mingw-w64-x86_64-curl
pacman -S mingw-w64-x86_64-gtk3

pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-autoconf
pacman -S mingw-w64-x86_64-automake
pacman -S mingw-w64-x86_64-pkg-config

如有缺失参考下我的

base 2022.06-1
filesystem 2025.02.23-1
git 2.49.0-1
libtool 2.5.4-1
make 4.4.1-2
mingw-w64-x86_64-clang 20.1.3-1
mingw-w64-x86_64-curl 8.13.0-2
mingw-w64-x86_64-dlfcn 1.4.2-1
mingw-w64-x86_64-faad2 2.11.2-1
mingw-w64-x86_64-ffmpeg 7.1.1-2
mingw-w64-x86_64-flac 1.5.0-1
mingw-w64-x86_64-glade 3.40.0-5
mingw-w64-x86_64-gtk2 2.24.33-6
mingw-w64-x86_64-gtk3 3.24.49-1
mingw-w64-x86_64-gtkmm3 3.24.10-2
mingw-w64-x86_64-jansson 2.14.1-2
mingw-w64-x86_64-libblocksruntime-swift 6.1-2
ingw-w64-x86_64-libdispatch 6.1-2
mingw-w64-x86_64-libmad 0.15.1b-5
mingw-w64-x86_64-libogg 1.3.5-1
mingw-w64-x86_64-libsamplerate 0.2.2-1
mingw-w64-x86_64-libsndfile 1.2.2-1
mingw-w64-x86_64-libvorbis 1.3.7-2
mingw-w64-x86_64-libzip 1.11.3-1
mingw-w64-x86_64-mpg123 1.32.10-1
mingw-w64-x86_64-opus 1.5.2-1
mingw-w64-x86_64-opusfile 0.12-3
mingw-w64-x86_64-pkg-config 0.29.2-6
mingw-w64-x86_64-portaudio 1~19.7.0-4
mingw-w64-x86_64-pulseaudio 17.0-2
mingw-w64-x86_64-taglib 2.0.2-1
mingw-w64-x86_64-wavpack 5.8.1-1
msys2-runtime 3.6.1-4
vim 9.1.1236-1

3.2 下载deadbeef

git clone https://github.com/DeaDBeeF-Player/deadbeef.git
  1. deadbeef依赖检查(可选)
./autogen.sh
./Configre
  1. 拷贝deadbeef头文件
# 拷贝头文件
cd deadbeef/include
sudo cp -r deadbeef /usr/local/include
# 拷贝GTKui头文件
cd deadbeef/plugins/gtkui
sudo cp *.h /usr/local/include/deadbeef 

3.3 编译gtk3lyrics

源码地址

  1. 编译demo
    ** 无需下载deadbeef源码 **
make lyricdemo
  1. 编译插件
make lyricbar
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值