基于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

相关推荐
枫叶梨花3 天前
从 M4S 到 MP4:用 FFmpeg 轻松合并音视频文件
ffmpeg·音视频
米优3 天前
FFmpeg添加水印
ffmpeg
blanks20204 天前
qt mac 解决 info.plist 自定义问题
ffmpeg
学而知不足~5 天前
FFmpeg03:多媒体文件处理基础
ffmpeg
dualven_in_csdn5 天前
ffmpeg编译
ffmpeg
Kevin Wang7275 天前
FFmpeg如何使用GPU加速
ffmpeg
feiyangqingyun7 天前
纯Qt结合ffmpeg实现本地摄像头采集/桌面采集/应用程序窗口采集/指定采集帧率和分辨率等
qt·ffmpeg·qt桌面采集·qt摄像头采集·qt程序窗口采集
shelutai7 天前
ubuntu 编译ffmpeg6.1 增加drawtext,libx264,libx265等
linux·ubuntu·ffmpeg
陆远方7 天前
AttributeError: module ‘ffmpeg‘ has no attribute ‘probe‘
ffmpeg
进击ing小白7 天前
FFmpeg的基本概述(二)
ffmpeg