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

基于ffmpeg+sdl的audio player

以下是一篇关于本工程的博客介绍,项目地址为:audio_player: 此程序实现了一个基于 FFmpeg 和 SDL2 的简单音频播放器,并支持歌词(LRC)同步显示。其主要功能包括: 音频解码与播放:使用 FFmpeg 打开并解码 MP3 等音频文件,将音频数据转换为 PCM 格式,通过 SDL2 实现音频播放。 歌词同步显示:解析 LRC 歌词文件,提取每行歌词的时间戳和内容,在音频播放过程中根据当前播放时间实时输出对应歌词,实现歌词与音频的同步显示。


基于 FFmpeg 和 SDL2 的简易音频播放器 —— 支持歌词同步

git地址:git@gitee.com:fahati-champion-and-runner-up/audio_player.git

audio_player: 此程序实现了一个基于 FFmpeg 和 SDL2 的简单音频播放器,并支持歌词(LRC)同步显示。其主要功能包括: 音频解码与播放:使用 FFmpeg 打开并解码 MP3 等音频文件,将音频数据转换为 PCM 格式,通过 SDL2 实现音频播放。 歌词同步显示:解析 LRC 歌词文件,提取每行歌词的时间戳和内容,在音频播放过程中根据当前播放时间实时输出对应歌词,实现歌词与音频的同步显示。

项目简介

本项目实现了一个基于 FFmpeg 和 SDL2 的简易音频播放器,支持 MP3 等音频文件的解码与播放,并可同步显示 LRC 歌词。适合音视频开发初学者学习 FFmpeg 解码流程和 SDL2 音频播放机制。

主要特性

  • 音频解码与播放:利用 FFmpeg 解码音频文件,通过 SDL2 播放 PCM 数据。
  • 歌词同步显示:解析 LRC 歌词文件,实时输出与音频同步的歌词。
  • 跨平台支持:支持 Windows 和 Linux。
  • 代码简洁,易于理解:适合音视频开发入门学习。

依赖环境

  • FFmpeg
  • SDL2
安装依赖(以 Ubuntu/Debian 为例)

sudo apt-get update

sudo apt-get install ffmpeg libsdl2-dev

 为了方便初学者运行,具体的头文件与库已经放到了工程的include 与lib下

Windows 用户请参考 FFmpeg 官网 和 SDL2 官网 配置开发环境。

快速开始

  1. 克隆项目代码

    git clone git@gitee.com:fahati-champion-and-runner-up/audio_player.git

    cd audio_player

  2. 准备音频和歌词文件

    将音频文件(如 M500000jJ2Kz4G3ZT7.mp3)和对应的 LRC 歌词文件(如 test.lrc)放在项目根目录下,文件名需一致。

  3. 编译项目

    Linux 下可直接运行:

    ./compile_gcc.sh

    Windows 下可使用 Visual Studio 工程文件或 MinGW 脚本编译。

  4. 运行播放器

    ./audio_player

    播放过程中,歌词会在终端同步输出。按 Ctrl+C 可退出程序。

  5. 运行效果

核心代码说明

播放器主逻辑位于 ffmpeg_audio_player.cpp。主要流程如下:

  1. 使用 FFmpeg 打开音频文件,查找音频流并解码为 PCM 数据。
  2. 通过 SDL2 初始化音频设备,设置回调函数进行音频播放。
  3. 解析 LRC 歌词文件,将时间戳与歌词内容存入内存。
  4. 在音频播放过程中,根据当前播放时间实时输出对应歌词,实现歌词同步。

适用人群

  • FFmpeg、SDL2 初学者
  • 需要实现音频播放及歌词同步功能的开发者
  • 音视频开发相关课程实验

欢迎大家 Star、Fork 和贡献代码!
项目地址:git@gitee.com:fahati-champion-and-runner-up/audio_player.git

http://www.xdnf.cn/news/950563.html

相关文章:

  • uniapp 实现腾讯云IM群文件上传下载功能
  • 基于亚博K210开发板——WiFi 模块联网
  • C语言 学习 文件操作(开关,读写,定位,大小)操作 2025年6月8日12:19:24
  • C语言 学习 模块化编程 2025年6月9日19:39:17
  • 论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
  • 触发DMA传输错误中断问题排查
  • Redis哨兵模式以及主从
  • LLM基础5_从零开始实现 GPT 模型
  • CMIP6气候模式资料概览
  • 免费在线PDF转图片工具
  • gephi绘制网络拓扑图:批量给节点着色
  • nginx安装和部署
  • 免费PDF转图片工具
  • NVIDIA CUDA 技术详解:开启 GPU 并行计算的大门
  • CocosCreator 之 JavaScript/TypeScript和Java的相互交互
  • 创建型模式-单例模式
  • Python网页自动化Selenium中文文档
  • 24.解释器模式:思考与解读
  • 从零手写Java版本的LSM Tree (四):SSTable 磁盘存储
  • 9个数据分析指令为工作赋能
  • 升级背后:CANOPEN转MODBUS TCP技术如何实现精准控制?
  • 精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
  • SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
  • C# 表达式和运算符(求值顺序)
  • 李沐--动手学深度学习--GRU
  • RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
  • 人工智能与无人机的组合如何撕开俄空天军的 “核心“
  • [docker]镜像操作:关于docker pull、save、load一些疑惑解答
  • ubuntu 22.04搭建SOC开发环境
  • “详规一张图”——新加坡土地利用数据