最近要做一个音乐相关的客户端,其中一个功能是音乐识别,搜索了一些资料选择Echoprint来开发,Echoprint是开源免费的,而且多种客户端都支持能节约很多时间,今天主要下载和编译源码以及测试。(备注:我的开发环境是Mac,所以下面以及之后都是Mac的环境)

1、官网

官网地址:http://echoprint.me

2、安装依赖环境

  • 首先安装HomeBrew
  • 安装依赖库 

    brew install ffmpeg boost taglib

    安装的目录都在

    /usr/local/Cellar

3、下载源码

git clone -b release-4.12 git://github.com/echonest/echoprint-codegen.git

下载完源码后进入src并打开Makefile

adsl-172-10-1-12:~ zhangjie$ cd echoprint-codegen

adsl-172-10-1-12:echoprint-codegen zhangjie$ cd src/

adsl-172-10-1-12:src zhangjie$ vim Makefile

修改其中变量BOOST_CFLAGS为你当前安装的boost目录

BOOST_CFLAGS=-I/usr/local/Cellar/boost/1.58.0/include

修改

34 libcodegen: $(MODULES_LIB)

35 ifeq ($(UNAME),Darwin)

36         libtool -dynamic -flat_namespace -install_name libcodegen.$(VERSION).dylib -lSystem -compatibility_version $(VERSION_COMPAT) \

37                 -macosx_version_min 10.6 -current_version $(VERSION) -o libcodegen.$(VERSION).dylib -undefined suppress \

38             $(MODULES_LIB) -framework vecLib -framework Accelerate

39 else

40         $(CXX) -shared -fPIC -Wl,-soname,$(SONAME) -o $(LIBNAME).$(VERSION) $(MODULES_LIB) -lz

41 endif

如果38行中有 -framework vecLib则去掉

变为如下:

34 libcodegen: $(MODULES_LIB)

35 ifeq ($(UNAME),Darwin)

36         libtool -dynamic -flat_namespace -install_name libcodegen.$(VERSION).dylib -lSystem -compatibility_version $(VERSION_COMPAT) \

37                 -macosx_version_min 10.6 -current_version $(VERSION) -o libcodegen.$(VERSION).dylib -undefined suppress \

38             $(MODULES_LIB)  -framework Accelerate

39 else

40         $(CXX) -shared -fPIC -Wl,-soname,$(SONAME) -o $(LIBNAME).$(VERSION) $(MODULES_LIB) -lz

41 endif

4、编译

adsl-172-10-1-12:src zhangjie$ vim Makefile

adsl-172-10-1-12:src zhangjie$ make

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o Codegen.o Codegen.cxx

In file included from Codegen.cxx:12:

In file included from ./AudioBufferInput.h:14:

./AudioStreamInput.h:53:10: warning: 'StdinStreamInput::ProcessFile' hides overloaded virtual function [-Woverloaded-virtual]

bool ProcessFile(const char* filename){ return ProcessStandardInput();}

^

./AudioStreamInput.h:26:18: note: hidden overloaded virtual function 'AudioStreamInput::ProcessFile' declared here: different number of parameters (3 vs 1)

virtual bool ProcessFile(const char* filename, int offset_s=0, int seconds=0);

^

1 warning generated.

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o Fingerprint.o Fingerprint.cxx

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o MatrixUtility.o MatrixUtility.cxx

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o SubbandAnalysis.o SubbandAnalysis.cxx

In file included from SubbandAnalysis.cxx:8:

./AudioStreamInput.h:53:10: warning: 'StdinStreamInput::ProcessFile' hides overloaded virtual function [-Woverloaded-virtual]

bool ProcessFile(const char* filename){ return ProcessStandardInput();}

^

./AudioStreamInput.h:26:18: note: hidden overloaded virtual function 'AudioStreamInput::ProcessFile' declared here: different number of parameters (3 vs 1)

virtual bool ProcessFile(const char* filename, int offset_s=0, int seconds=0);

^

1 warning generated.

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o Whitening.o Whitening.cxx

In file included from Whitening.cxx:8:

./AudioStreamInput.h:53:10: warning: 'StdinStreamInput::ProcessFile' hides overloaded virtual function [-Woverloaded-virtual]

bool ProcessFile(const char* filename){ return ProcessStandardInput();}

^

./AudioStreamInput.h:26:18: note: hidden overloaded virtual function 'AudioStreamInput::ProcessFile' declared here: different number of parameters (3 vs 1)

virtual bool ProcessFile(const char* filename, int offset_s=0, int seconds=0);

^

1 warning generated.

libtool -dynamic -flat_namespace -install_name libcodegen.4.1.2.dylib -lSystem -compatibility_version 4.1 \

-macosx_version_min 10.6 -current_version 4.1.2 -o libcodegen.4.1.2.dylib -undefined suppress \

AudioBufferInput.o AudioStreamInput.o Base64.o Codegen.o Fingerprint.o MatrixUtility.o SubbandAnalysis.o Whitening.o  -framework Accelerate

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o Metadata.o Metadata.cxx

g++ -Wall -I/usr/local/Cellar/boost/1.58.0/include `taglib-config --cflags` -fPIC -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -c -o main.o main.cxx

In file included from main.cxx:17:

./AudioStreamInput.h:53:10: warning: 'StdinStreamInput::ProcessFile' hides overloaded virtual function [-Woverloaded-virtual]

bool ProcessFile(const char* filename){ return ProcessStandardInput();}

^

./AudioStreamInput.h:26:18: note: hidden overloaded virtual function 'AudioStreamInput::ProcessFile' declared here: different number of parameters (3 vs 1)

virtual bool ProcessFile(const char* filename, int offset_s=0, int seconds=0);

^

1 warning generated.

g++ AudioBufferInput.o AudioStreamInput.o Base64.o Codegen.o Fingerprint.o MatrixUtility.o SubbandAnalysis.o Whitening.o Metadata.o `taglib-config --libs` -lz -lpthread -O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG main.o -o ../echoprint-codegen

编译后会在src同级目录下生成一个echoprint-codegen二进制文件

ls

AUTHORS LICENSE README.md echoprint-codegen examples src windows

5、测试

./echoprint-codegen

Usage: ./echoprint-codegen [ filename | -s ] [seconds_start] [seconds_duration] [< file_list (if -s is set)]

./echoprint-codegen ~/Desktop/Maps.mp3 10 20

[

{"metadata":{"artist":"Maroon 5", "release":"Maps", "title":"Maps", "genre":"", "bitrate":128,"sample_rate":44100, "duration":252, "filename":"/Users/zhangjie/Desktop/Maps.mp3", "samples_decoded":220500, "given_duration":20, "start_offset":10, "version":4.12, "codegen_time":0.028393, "decode_time":0.203698}, "code_count":696, "code":"eJy1mFluJTsORLekeVgOKYr7X0IfyY13Xxso-cNdBioMp1ISpwgyK4SoMzxg7Rfs9ALvD0hBXxD9Bbm8oNoLenzBqA_Iabwg2wtae8HYL9D-gqUv8PKA0vYLRn7AD5VjL_hV9st4wTv7o73A_QG_yv5vMkgm_gxl2AN-w99f5aiNF4z-ArEXWHvADzkq_QU_ZEEeUGZ_geoDfpWj2F-Q5AWnfv4MTyX8IUe_4ZGkFzxzVEp9QFztBT_oVXrBOwvvOLf5gh-ysF_wG6b8Igs_dJy_mKPygr_HlFpf8IsM_pCjml4w6wPeWfjNVFDmeEC8gvdH-EEJ8wNSri-o-wU_9KM3y_oDfspgfMFvWBbtBaU94IccvbMQ1gveOXrPZr9iyjPOfb7gr2ndi2UtzeGt79VimElXabb6UKk5tKj_x9UwZ6x7TbGcVL_u_ez4rMaWw7jb7uo96q7ebXf1nve5KMuYofjKc-rUdE8uU6u1mGxz4NScHQL68hGm6tcqs5gmTgsbk2Jru6SlTeIIY7SRZPDOMukjzVq7ufZr1ceWrWI2y9BjaY1fBo2GJM5WZp19e6km1rXNdFc_Dn5W797r0Sc411xusyC1rvTfezFcIx-e1_q9OsPxcaHmgkWh1X6t_4rGzFOuW_dyn97K7t5nr9GMZaemMjeeEFulT-eed9S0y_rA9e3bsw-ULOTYY5SGBW0urTMOeK1xT2mLy-tuccxdtivDK0boqIOpnVAXJmEvFlfPXDKKmVEUhiM1tW2WO3tVu8-ZJfsycqWye0FXSpw7rUoAyfdCK2ZdNnOpa2efaU5rjeDi66xDmF7z9pV8ezclsiu0RsMUCefypJU89qxxcHksNi1t_AiGO5N0cMpoa_J1pTrKWFtXt002JgZYXaNaVRcyiMKXqCIqZVc5Y9WKs8vonETwpUxRUrWsjzw9UKbVCF-Jw-dYKpSgjzxq6TMRoF3yyoQQDpQc-iSuYUk8s_wHbji_PfuAmsW8fA-ZEnrOPUajuGP0RqWS2zZrz808hzXEC4VI_YjJdlhrPAuVDFZjhlhUUeRHt2goC2pLrDWu2XX6qLEWtJU_ffhOrbgQvtJaRKA02JTlcVT33YSxgUMq16jbiLu3bJl6LrjKR51ISz2i4nBcwrbU6vC8KvobST1b3TxRnr3glJeesal13OpUAFRJM_fgzRsmT0_p6ELoFK2PuNbCjN1lry0LohYnGDa1rJ1SHss2hSe2mTEi-d4UNMTAdRsUb-fx6n0nFa_ZtrInnMzVmITS2OjZodjAsw9oiPX7s38A8iFeYYguJw7BYHTOoys6NNZMZWIQR-as2Q69d1yDsOI0Hgl1PWkRO3nKArtKJavVutWdTdr0OpKFhN7sIrPMtWYYhmblXIWORyY7iui1WaNMKRGKuUgnYJZwZtCcVlkQrxO3OF1YCERww3qBdSO7-IrxrmoeQ--2U_MNZvvup9h7WlSL1bLuebR4bELKu6CUCQkg5DVC03_2Jp3QYPcx7pVQlcZ_9t4rkaYqLqP5B67N3559QBwHslNu6CN9IJaeRDuh8rGcCsbKig1jl97iUjsRSgoJE7VKnkUSPNi4mFMjwBl9Iz38m82V0obDFppaSchCHlZyk1RLzFoi_lXtKxBYbdjQAzsj75JNKjaV5KcsYSpW7UEB6B6aSVvY1UlTZnYJIayCsgVITHGjFSRfB1KmPe27SoTmgPyIhzafbUWnIHSHuw3NI65nFZk9zM8zH5Pa3SaG2N1X_njvfeXbvTyuQ7UWyG3R772f22St8C-4V3579gH0FLWMY0Q5mjGQnQp7K6pCHXcPBRVFdu9qc6u9Y3ZQCqUSrkTp8C7tLalHvqiUPzMM31-rgvzDtpph8FqZvj3oC6h5tzWr2hDEWnu2VDp1R8ZiG3vsTmcedDhhI5wa3neHpIt8KbOG4_xpoVRHgb00ksA0II0Kg5RNWqFlUJ00SHd6O0JRJE0ORf1Tc1pZ4eLTiWmifroZIRoMZz54y2lXJAtS0KTp8LWSfKKxobiWHgyDao9wkeBPSg7alfMI_maCwKHoyJwtHJXO0yi_uhbf5kwlR-boqbCe320KwobGbX5imenLgtYafbDT3vaoyDpdOkE0xpyIa4j6_kCttIdvzz5A4w-QgSYsjBBhos-J0FPnKMHO1JTJgp-9zdmXTMVd5iXUd5L8hrOFWY7unejVpGid9j6lMrjTuoitFKMkaCx6Olvq6NMKaCWzIRNYM2bDXvT0QJGcNzNd1t5Ph8SSLoI6BcKLFJPjETxqv5Z-jNzn-wIp2e6-Tvdtp13bMYs755ZodxWdzfFuc2-yG38RLWZQEq20fiy65xU5jDmr94B_rZb7nyBcfu-4p6x4Bqez467e429IrlVflx-r7rZ72z2ULOX2gXvKt2cfoDKVz4Yl1eiX1AbKKTl1I6q27iqxPw4e2TKmy0A1BzkcVIovVlqxQpXNnNHambtaYnNgajt8GtbWPqNHJNIVTYZ69EGmK4_r67ZzFM10IifMXjJJEpxhPiGJ9a5Om-cb0qjPTIO7Vt0DlgdmibxN1wgo93n5OnNX7yn3ZBoLAfeS0vXyvnyPN6KmdzVu5OD73nPyfY85pLevvefKu0rB8MHAh4jydQVXj1UfW9ZpdB_4Mvd_n33gP_BT08A=", "tag":0}

这样就会把音乐的相关信息解析出来,其中code就是对应着Maps.mp3中10s到20s直接音乐对应的code,检索的时候使用code检索出响应的音乐。

6、下载地址

编译后的源码:http://pan.baidu.com/s/1mg5S5PA

Echoprint系列--编译相关推荐

  1. ffmpeg系列-编译

    1.ubuntu下编译 下载ffmpeg源码 git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 如果只是正常编译的话 ./configure -- ...

  2. 凌阳DVD sunplus sphe8202系列编译环境的搭建

    在windows XP系统上搭建sunplus sphe8202编译环境: 1.解压 GCCL2.7z 到C盘根目录,得到GCCL2的文件夹 2.在桌面建立一个命令提示符的快捷方式 3.修改此命令提示 ...

  3. [系列][编译原理]正则表达式

    关于正则表达式,作为软件工程师应该比较熟悉了.所谓正则表达式,就是表示字符串的格式.正则表达式r完全由它所匹配的串集来定义.这个集合称为由正则表达式生成的语言,写作L(r).此处的语言只是表示&quo ...

  4. python源码编译 mingw_使用 MinGW 编译 C/C++ 写的 python 扩展

    扩展的代码可以直接使用 python 文档中的例子 spam. 编译的话,可以用 distutils,写 setup.py 脚本即可. 大致的代码如下: from distutils.core imp ...

  5. 编译GDAL支持OpenCL使用GPU加速

    ##前言 GDAL库中提供的gdalwarp支持各种高性能的图像重采样算法,图像重采样算法广泛应用于图像校正,重投影,裁切,镶嵌等算法中,而且对于这些算法来说,计算坐标变换的运算量是相当少的,绝大部分 ...

  6. C++资源之不完全导引

    1,前言 无数次听到"我要开始学习C++!"的呐喊,无数次听到"C++太复杂了,我真的学不会"的无奈.Stan Lippman先生曾在<C++ Prime ...

  7. 【我的Android进阶之旅】Android自定义Lint实践

    背景 2017年8月份的时候,我在公司开始推广Lint.FindBugs等静态代码检测工具.然后发现系统自带的Lint检测的Issue不满足我们团队内部的特定需求,因此去自定义了部分Lint规则.这个 ...

  8. 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...

    基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...

  9. 了解 node.js

    原文为: 我们为什么要使用NodeJS 写的好,就收藏于此,供学习之用. 科普文一则,说说我对NodeJS(一种服务端JavaScript实现)的一些认识,以及我为什么会向后端工程师推荐NodeJS. ...

  10. 时空数据可视化_穿越时空的可视化4陆地导航的上半生

    时空数据可视化 從陸地導航的歷史設計,圍繞朝聖.郵驛.商隊的旅行和導航需求,了解信息設計在實際導航運用中所扮演的角色. 从陆地导航的历史设计,围绕朝圣,邮寄,商队的旅行和导航需求,了解信息设计在实际导 ...

最新文章

  1. Windows下C 用 Socket 发送图片--基础
  2. redis 经纬度_原来用Redis实现查找附近的人这么容易
  3. 手机自动化测试:appium源码分析之bootstrap八
  4. 北斗导航 | PPP-RTK技术研究进展与试验验证(第十一届中国卫星导航年会报告)
  5. Qt学习(七):定时器QTimer
  6. How does UDO tool resolve objects
  7. 【转】BASE64编码规则
  8. Spring : Spring AOP 中的增强(Advice)或者通知
  9. cf修复服务器,CF:“卡顿”问题终于得到重视!新版本宣布修复,玩家这下开心了...
  10. jQuery碎语(2) 事件
  11. 6.SpringMVC 配置式开发-处理器
  12. Linux:20个linux常用命令
  13. mse 反编译_专业Delphi反编译工具(DeDeDark)
  14. CDR X7(CorelDRAW)注册下载详细安装教程,序列号功能齐全
  15. Juniper防火墙的HA(高可用性)配置
  16. 此共享需要过时的smb1协议
  17. WPF 元素裁剪 Clip 属性
  18. python代码审查规则_python代码检查
  19. NIPS最佳,惊人的天赋与无人察觉的缺陷并存,GPT-3的未来有多少种可能......
  20. 【实训项目】教师工作量管理系统(完整程序)

热门文章

  1. (笔记)数据结构——顺序表
  2. 机器人java指南_Zmud新手机器人指南
  3. android编程拨号界面,在Android4.0中Contacts拨号盘界面剖析(源码)
  4. Linux - 麒麟17.04 删除桌面图标(计算机,主文件夹,回收站)与 Cairo-Dock 安装配置
  5. r如何打开计算机窗口,如何进入运行窗口
  6. #3189. 八纵八横(c)
  7. STK10与MATLAB互联
  8. shiro反序列化漏洞
  9. Toolbar中setNavigationIcon的返回图标太大,图标大小调整解决方法
  10. 计算机网络:随机访问介质访问控制之CSMA/CA协议