当前位置: 首页 > news >正文

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(): 根据播放时间更新歌词高亮和滚动位置

三、编译

  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-gtk3pacman -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
mingw-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
  1. 下载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 

编译gtk3lyrics

源码地址

  1. 编译demo
    ** 无需下载deadbeef源码 **
make lyricdemo
  1. 编译插件
make lyricbar
http://www.dtcms.com/a/561268.html

相关文章:

  • 网站推广有什么好处咨询公司招聘条件
  • 网站定位授权开启权限怎么做精准营销模式
  • Flutter 开发环境配置教程
  • Go Gorm 深度解析:从内部原理到实战避坑指南
  • 保定企业建网站房产网站运营方案
  • 机械动力的能力
  • 山西省旅游网站建设分析廊坊网站制作网站
  • 【YashanDB认证】之二:Docker部署一体YashanDB(YDC,YCM)
  • C语言刷题(一)
  • 电子电气架构(EEA)最新调研-5
  • 【软考架构】案例分析-对比MySQL查询缓存与Memcached
  • 「经典图形题」集合 | C/C++
  • IT4IT是由The Open Group提出的面向数字化转型的IT管理参考架构框架
  • 学校网站怎么做的好南翔做网站公司
  • 解决 CentOS 8 报错:Failed to download metadata for repo ‘BaseOS‘
  • VS Code集成googletest-C/C++单元测试Windows
  • Vue 图片性能优化双剑客:懒加载与自动压缩实战指南
  • 网站之家查询qq空间网站是多少
  • Elasticsearch 与 Faiss 联合驱动自动驾驶场景检索:高效语义匹配 PB 级视频数据
  • 短租网站开发学术ppt模板免费
  • 设计模式——单例模式(singleton)
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析1
  • 计算机网络自顶向下方法25——运输层 TCP流量控制 连接管理 “四次挥手”的优化
  • LeetCode【高频SQL基础50题】
  • 清远做网站的有哪些wordpress判断浏览器
  • 自己做的网站怎样才有网址浏览找人做网站域名怎么过户
  • JavaScript中的闭包:原理与实战
  • 怎么看一个网站是否被k怎么找项目
  • 交易网站开发做的比较好的p2p网站
  • JavaScript异步编程:从回调地狱到优雅解决方案