{"id":28411992,"url":"https://github.com/cy745/fpcalc","last_synced_at":"2026-05-14T22:38:48.373Z","repository":{"id":229137315,"uuid":"775854986","full_name":"cy745/fpcalc","owner":"cy745","description":"Fpcalc of Chromaprint using MediaCodec for Android platform.","archived":false,"fork":false,"pushed_at":"2025-04-16T18:12:50.000Z","size":8666,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-03T07:10:56.067Z","etag":null,"topics":["android","chromaprint","fpcalc","mediacodec"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cy745.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-22T07:13:50.000Z","updated_at":"2025-04-16T18:12:54.000Z","dependencies_parsed_at":"2024-03-24T18:28:07.339Z","dependency_job_id":"9c6f455f-9b67-4e6e-a5f8-9ee8ffd1b8f7","html_url":"https://github.com/cy745/fpcalc","commit_stats":null,"previous_names":["cy745/fpcalc"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/cy745/fpcalc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cy745%2Ffpcalc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cy745%2Ffpcalc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cy745%2Ffpcalc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cy745%2Ffpcalc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cy745","download_url":"https://codeload.github.com/cy745/fpcalc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cy745%2Ffpcalc/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261628167,"owners_count":23186768,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","chromaprint","fpcalc","mediacodec"],"created_at":"2025-06-02T19:18:51.841Z","updated_at":"2026-05-14T22:38:48.368Z","avatar_url":"https://github.com/cy745.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chromaprint fpcalc using MediaCodec for Android platform\n\n## 简介\n\n针对Android平台的一个基于Chromaprint的音频指纹计算库，可计算音频指纹用于判断音频是否“相同”，可用音频指纹调用 [Acoustid](https://acoustid.org/webservice) 的API查询 [MusicBrainz](https://musicbrainz.org/) 库中所存有的与该音频相似的数据的相关信息。\n\n本仓库的核心代码基于Chromaprint的`fpcalc.cpp`。与原始实现不同，使用Android NDK提供的`MediaCodec`来替代`FFMpeg`的`AvCodec`进行音频解码。降低了动态库的大小。同时针对Android平台，提供了使用`FileDescriptor`读取文件的方法，以便更好地集成到Android应用中。\n\n## 功能与特性\n\n- 使用`MediaCodec`替代`FFMpeg`的`AvCodec`进行音频解码，降低动态库大小。\n- 提供使用`FileDescriptor`读取文件的方法，方便Android应用集成。\n\n## 参考与引用\n\n- Chromaprint官方仓库: [https://github.com/acoustid/chromaprint](https://github.com/acoustid/chromaprint)\n- fpcalc-android项目: [https://github.com/QuickLyric/fpcalc-android](https://github.com/QuickLyric/fpcalc-android)\n- ffmpeg-android-maker项目: [https://github.com/Javernaut/ffmpeg-android-maker](https://github.com/Javernaut/ffmpeg-android-maker)\n\n## 如何使用\n\n[![](https://jitpack.io/v/cy745/fpcalc.svg)](https://jitpack.io/#cy745/fpcalc)\n\n```gradle\n// 导入jitpack源\nmaven(url = \"https://jitpack.io\")\n\n// 所需使用的project中引入library \nimplementation(\"com.github.cy745:fpcalc:\u003cversion\u003e\")\n```\n\n```kotlin\n// 配置传入fpcalc的参数，fd为文件的FileDescriptor\nval params: FpcalcParams = FpcalcParams(\n  targetFd = fd    // Int\n)\n\n// 或者传入文件路径\nval params: FpcalcParams = FpcalcParams(\n  targetFilePath = filePath    // String\n)\n\n// 调用Fpcalc\nval result: FpcalcResult = Fpcalc.calc(params)\n\n// 输入的FpcalcParams定义如下\ndata class FpcalcParams(\n    val targetFd: Int = -1,\n    val targetFilePath: String? = null,\n    val gMaxDuration: Int = 120,    // in second\n    val gRaw: Boolean = false,\n    val gSigned: Boolean = false,\n    val gAlgorithm: Int = 2,\n)\n\n// 输出的FpcalcResult定义如下\nclass FpcalcResult {\n    var fingerprint: String? = null\n    var rawFingerprint: String? = null\n    var errorMessage: String? = null\n    var sourceDurationMs: Long = 0\n    var sourceSampleRate: Int = 0\n    var sourceChannels: Int = 0\n    var sourceLength: Int = 0\n}\n```\n\n## 参与开发\n\n### 构建项目\n\n```bash\n# 拉取项目，注意要拉取子项目\ngit clone --recursive https://github.com/cy745/fpcalc\n\n# 若只拉取了父项目，没加--recursive参数的话，进入项目目录后执行下面的命令即可\ngit submodule update --init --recursive\n```\n\n### 后续任务\n\n- ✅ 解决各种闪退问题 \n- ✅ 完善API，降低Android平台使用的难度\n- 🔘 完全剔除对libavutils的依赖（目前还有resample部分依赖libavutils用于缓冲区的创建）\n- ......\n\n## 贡献与反馈\n\n欢迎任何形式的贡献和反馈。如果你在使用过程中遇到问题，或者有任何建议，请随时提交issue或pull request。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcy745%2Ffpcalc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcy745%2Ffpcalc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcy745%2Ffpcalc/lists"}