近期要做一个音乐相关的client。当中一个功能是音乐识别。搜索了一些资料选择Echoprint来开发。Echoprint是开源免费的,并且多种client都支持能节约非常多时间,今天主要下载和编译源代码以及測试。

(备注:我的开发环境是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

posted on 2017-04-30 18:14 lxjshuju 阅读(...) 评论(...) 编辑 收藏

Echoprint系列--编译的更多相关文章

  1. Echoprint系列--Android编译与调用

    在Echoprint系列--编译中编译了源代码,这次将Echoprint移植到Android平台并測试识别歌曲功能. 一.编译库 1.环境准备 Android NDK,我的是android-ndk-r ...

  2. 2. CMake 系列 - 编译多文件项目

    目录 1. 编译不使用第三方库的项目 1.1 项目目录结构 1.2 相关代码 1.3 编译 2. 编译使用第三方库的项目 2.1 项目目录结构 2.2 相关代码 2.3 编译 1. 编译不使用第三方库 ...

  3. PHP系列 | 编译安装msgpack-php

    Msgpack 是一个 PECL 扩展,此扩展提供用于与 MessagePack 序列化通信的 API. MessagePack 是一个基于二进制高效的对象序列化类库,可用于跨语言通信.它可以像JSO ...

  4. STM32中ARM系列编译工具链的编译宏选择(__CC_ARM、__ICCARM__、__GNUC__、__TASKING__)

    一 前言 stm32 f103中.关系到一个选择何种编译宏的问题.这里就梳理一下吧. 二 正文 1  在 core_cm3.h 文件中,有如下代码: #if defined ( __CC_ARM ) ...

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

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

  6. mysql系列安装

    Mysql的5种安装方法:1.yum/rpm安装(适合要求不高,并发不大,公司内部,企业内部一些应用场景)2.编译安装(在线高并发业务)3.二进制安装(编译安装后,使用自带工具打包,然后拷贝到相同平台 ...

  7. c++资源之不完全导引 (转)

    c++资源之不完全导引 (转) 转:http://www.cnblogs.com/suiyingjie/archive/2008/02/24/1079411.html 本文2004年5月首发于< ...

  8. 我们为什么要使用NodeJS

    科普文一则,说说我对NodeJS(一种服务端JavaScript实现)的一些认识,以及我为什么会向后端工程师推荐NodeJS. "Node.js 是服务器端的 JavaScript 运行环境 ...

  9. C++资源之不完全导引 (转载)

    C++资源之不完全导引(完整版)- - 这文章太强了,我一定要转载,否则对不起观众,对不起自己.(liigo) 发信人: NULLNULL (空空), 信区: VC标  题: C++资源之不完全导引( ...

随机推荐

  1. 为什么要用 SpringMVC 的 SessionStatus

    我们可以在需要访问 Session 属性的 controller 上加上 @SessionAttributes,然后在 action 需要的 User 参数上加上 @ModelAttribute,并保 ...

  2. Java 中equals和==差别

    java中的数据类型,可分为两类:  1.基本数据类型.也称原始数据类型.byte,short,char,int,long,float,double,boolean    他们之间的比較,应用双等号( ...

  3. 关于org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor的队列

    今天查看源码发现spring的线程池是支持队列的: 并且队列支持的上限相当大: 当线程池的达到最大线程时,默认会把任务放在队列(内存)中,所以我们可以放心用这个东西来写日志了

  4. Grunt快速使用笔记

    本篇文章由:http://xinpure.com/grunt-quick-note/ http://www.gruntjs.net/getting-started Grunt中文网 安装 Grunt ...

  5. web开发中常见的安全漏洞及避免方法

    1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...

  6. 算法----堆排序(heap sort)

    堆排序是利用堆进行排序的高效算法,其能实现O(NlogN)的排序时间复杂度,详细算法分析能够点击堆排序算法时间复杂度分析. 算法实现: 调整堆: void sort::sink(int* a, con ...

  7. openfireserver和jdk环境删除命令

    一.卸载jdk1.8 终端依次运行以下的命令 sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin sudo rm -rf / ...

  8. stm32中的数据类型定义

    STM32F10X.H #include "core_cm3.h" #include "system_stm32f10x.h" #include <std ...

  9. unity, GetComponent<MeshRenderer>().sharedMaterial 与 GetComponent<MeshRenderer>().material

    我多个物体用的是同一个material,当我用gameObject.GetComponent<MeshRenderer>().sharedMaterial.SetColor("_ ...

  10. unity5, animator state machine, 无条件transition实现播放动画序列

    今天遇到这样一个需求,我有一个名为happy的animation clip和一个名为speak的animation clip.想实现当主角胜利后播放动序列: happy->speak->h ...