2
2
3
3
## 简介
4
4
5
- 针对Android平台的一个基于Chromaprint的音频指纹计算库,可计算音频指纹用于判断音频是否“相同”,可用音频指纹调用 [ MusicBrainz] ( https://musicbrainz.org/ ) 的API查询音频的相关信息 。
5
+ 针对Android平台的一个基于Chromaprint的音频指纹计算库,可计算音频指纹用于判断音频是否“相同”,可用音频指纹调用 [ Acoustid ] ( https://acoustid.org/webservice ) 的API查询 [ MusicBrainz] ( https://musicbrainz.org/ ) 库中所存有的与该音频相似的数据的相关信息 。
6
6
7
7
本仓库的核心代码基于Chromaprint的` fpcalc.cpp ` 。与原始实现不同,使用Android NDK提供的` MediaCodec ` 来替代` FFMpeg ` 的` AvCodec ` 进行音频解码。降低了动态库的大小。同时针对Android平台,提供了使用` FileDescriptor ` 读取文件的方法,以便更好地集成到Android应用中。
8
8
19
19
20
20
## 如何使用
21
21
22
+ [ ![ ] ( https://jitpack.io/v/cy745/fpcalc.svg )] ( https://jitpack.io/#cy745/fpcalc )
23
+
22
24
``` gradle
23
25
// 导入jitpack源
24
26
maven(url = "https://jitpack.io")
25
27
26
- // 所需使用的project中引入library
28
+ // 所需使用的project中引入library
27
29
implementation("com.github.cy745:fpcalc:<version>")
28
30
```
29
31
30
32
``` kotlin
31
33
// 配置传入fpcalc的参数,fd为文件的FileDescriptor
32
- val args: Array <String > = arrayOf(" -json" , " $fd " )
34
+ val params: FpcalcParams = FpcalcParams (
35
+ targetFd = fd // Int
36
+ )
33
37
34
- // 调用Fpcalc
35
- val result: String = Fpcalc .calc(args)
36
- ```
38
+ // 或者传入文件路径
39
+ val params: FpcalcParams = FpcalcParams (
40
+ targetFilePath = filePath // String
41
+ )
37
42
38
- result的格式根据传入参数可能不同,需要注意,以下是JSON格式的示例
39
- ``` json
40
- {
41
- "duration" : 42.62 ,
42
- "fingerprint": "AQABN0myKWmYBkJwvEfDo-gcHWGeQ0eYo8N__GjeoT_y5-jh_eiP_PjR48djvEc-G_6gXcHT4McDfUeYvWiPozeabkEO8QryhMrx40c_ozmB5kF5tDHCfDku3NAO0-hz6Md_9EoD68MHP8V_Qz_-oEf-4ymOEp8uXMIdoXmxC8d7tDsS5jHSH7UY_Dt6o_mCbpuH5vjxGTfR50hz-ERn4SX6HFYOHzlhBWGJQ8tn9AzCfPHQcsdn9EZKDoco32jW4B1KQjzyD5aIw8cP__iPVFvRozbE5-iDdonQnMYnhGVwhC-H5_iORg_0zuiO4zy65_CHH-IP60c_HK0FLc_Ro3mO44VP6OiPH9fxQzx-pCcO67hIHH7xwd1RPuiPKWcO5kb67Jh0RdCXoDdikTm-FI10XMyJIyeJN2OgfTquCYcuGDm-4ceRC-ehHn-D4zP84oeI6oPe4T8uI_qD52gfnNKA-Pjg44RxHpR8_PAPlTjSE_8RHN3xQyV-vEcv-BNu-DMu4oj2Cz2DyoH1oM-OSpQMvyhv_MiP0mjiLC7-F_mN5j2q7UEPPxOcz3h_JMuJL0d-ouGYwmoQ6tDVICSzw-dxYsdRyziu4zeebMcnNP_QA_mhKiR6Huk9dNVw_MibQeuQ80T34TKa_EfxEnk_9EZzvC9uHqVepIf7Fz16_Dhw-IcVH8cF66gBRyBgBipimHBGEUIEwkQYIp0EhmhDLBCGOCIUIYAoJ4QgTgwilBCIEKIUJAY4Ax0yAChCiAWAUGkcEUqJYpFBAACnhHLGAKEEEAIKxawQgEBliRAAWCGMQEYABpQCzBJBHCCAQEMEEcIIZRChgDBAxBWcKGEcE0YIKywQDhglCARAASaIQM4BghQRBBupIFAiOKSIFFtihpAgDhjCmGPYGoeAskwYy4hCgDDLDDEGMIIQAoIIAoQUhAhChFDCMGCEAYQBhzxxgDhjoXREEMCAMcIJgJyEQhggARGECIaMAA4AIBQSRDxCiBMG"
43
+ // 调用Fpcalc
44
+ val result: FpcalcResult = Fpcalc .calc(params)
45
+
46
+ // 输入的FpcalcParams定义如下
47
+ data class FpcalcParams (
48
+ val targetFd : Int = -1 ,
49
+ val targetFilePath : String? = null ,
50
+ val gMaxDuration : Int = 120 , // in second
51
+ val gRaw : Boolean = false ,
52
+ val gSigned : Boolean = false ,
53
+ val gAlgorithm : Int = 2 ,
54
+ )
55
+
56
+ // 输出的FpcalcResult定义如下
57
+ class FpcalcResult {
58
+ var fingerprint: String? = null
59
+ var rawFingerprint: String? = null
60
+ var errorMessage: String? = null
61
+ var sourceDurationMs: Long = 0
62
+ var sourceSampleRate: Int = 0
63
+ var sourceChannels: Int = 0
64
+ var sourceLength: Int = 0
43
65
}
44
66
```
45
67
@@ -57,9 +79,9 @@ git submodule update --init --recursive
57
79
58
80
### 后续任务
59
81
60
- - 解决各种闪退问题
61
- - 完善API,降低Android平台使用的难度
62
- - 完全剔除对libavutils的依赖(目前还有resample部分依赖libavutils用于缓冲区的创建)
82
+ - ✅ 解决各种闪退问题
83
+ - ✅ 完善API,降低Android平台使用的难度
84
+ - 🔘 完全剔除对libavutils的依赖(目前还有resample部分依赖libavutils用于缓冲区的创建)
63
85
- ......
64
86
65
87
## 贡献与反馈
0 commit comments