https://github.com/cy745/fpcalc
Fpcalc of Chromaprint using MediaCodec for Android platform.
https://github.com/cy745/fpcalc
android chromaprint fpcalc mediacodec
Last synced: about 2 months ago
JSON representation
Fpcalc of Chromaprint using MediaCodec for Android platform.
- Host: GitHub
- URL: https://github.com/cy745/fpcalc
- Owner: cy745
- License: other
- Created: 2024-03-22T07:13:50.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2025-04-16T18:12:50.000Z (about 1 year ago)
- Last Synced: 2025-06-03T07:10:56.067Z (about 1 year ago)
- Topics: android, chromaprint, fpcalc, mediacodec
- Language: C
- Homepage:
- Size: 8.26 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Chromaprint fpcalc using MediaCodec for Android platform
## 简介
针对Android平台的一个基于Chromaprint的音频指纹计算库,可计算音频指纹用于判断音频是否“相同”,可用音频指纹调用 [Acoustid](https://acoustid.org/webservice) 的API查询 [MusicBrainz](https://musicbrainz.org/) 库中所存有的与该音频相似的数据的相关信息。
本仓库的核心代码基于Chromaprint的`fpcalc.cpp`。与原始实现不同,使用Android NDK提供的`MediaCodec`来替代`FFMpeg`的`AvCodec`进行音频解码。降低了动态库的大小。同时针对Android平台,提供了使用`FileDescriptor`读取文件的方法,以便更好地集成到Android应用中。
## 功能与特性
- 使用`MediaCodec`替代`FFMpeg`的`AvCodec`进行音频解码,降低动态库大小。
- 提供使用`FileDescriptor`读取文件的方法,方便Android应用集成。
## 参考与引用
- Chromaprint官方仓库: [https://github.com/acoustid/chromaprint](https://github.com/acoustid/chromaprint)
- fpcalc-android项目: [https://github.com/QuickLyric/fpcalc-android](https://github.com/QuickLyric/fpcalc-android)
- ffmpeg-android-maker项目: [https://github.com/Javernaut/ffmpeg-android-maker](https://github.com/Javernaut/ffmpeg-android-maker)
## 如何使用
[](https://jitpack.io/#cy745/fpcalc)
```gradle
// 导入jitpack源
maven(url = "https://jitpack.io")
// 所需使用的project中引入library
implementation("com.github.cy745:fpcalc:")
```
```kotlin
// 配置传入fpcalc的参数,fd为文件的FileDescriptor
val params: FpcalcParams = FpcalcParams(
targetFd = fd // Int
)
// 或者传入文件路径
val params: FpcalcParams = FpcalcParams(
targetFilePath = filePath // String
)
// 调用Fpcalc
val result: FpcalcResult = Fpcalc.calc(params)
// 输入的FpcalcParams定义如下
data class FpcalcParams(
val targetFd: Int = -1,
val targetFilePath: String? = null,
val gMaxDuration: Int = 120, // in second
val gRaw: Boolean = false,
val gSigned: Boolean = false,
val gAlgorithm: Int = 2,
)
// 输出的FpcalcResult定义如下
class FpcalcResult {
var fingerprint: String? = null
var rawFingerprint: String? = null
var errorMessage: String? = null
var sourceDurationMs: Long = 0
var sourceSampleRate: Int = 0
var sourceChannels: Int = 0
var sourceLength: Int = 0
}
```
## 参与开发
### 构建项目
```bash
# 拉取项目,注意要拉取子项目
git clone --recursive https://github.com/cy745/fpcalc
# 若只拉取了父项目,没加--recursive参数的话,进入项目目录后执行下面的命令即可
git submodule update --init --recursive
```
### 后续任务
- ✅ 解决各种闪退问题
- ✅ 完善API,降低Android平台使用的难度
- 🔘 完全剔除对libavutils的依赖(目前还有resample部分依赖libavutils用于缓冲区的创建)
- ......
## 贡献与反馈
欢迎任何形式的贡献和反馈。如果你在使用过程中遇到问题,或者有任何建议,请随时提交issue或pull request。