音乐旋律识别及分析系统

2016-04-14 11:09梁桓菡
电脑知识与技术 2016年5期

梁桓菡

摘要:基于音频指纹技术对音频进行检索识别和分析。音频指纹技术(Audio fingerprinting technology)是一种通用音频处理技术。它能根据旋律准确识别歌名、歌手、专辑名等信息。对识别后的歌曲进行显示正确信息。应用这项技术可以为每一首歌曲编制特征码,从而实现歌曲的精确匹配和识别,该技术结合专门的索引算法建立了一套音频指纹数据库系统(简称音频指纹库),提供音乐识别服务。

关键词:音频指纹;echoprint;音频匹配;音频数据库

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)05-0157-03

1 概述

大家都有遇到过这么一种情况,有时候我们听到一首歌有点熟悉或是感觉好听,但我们不知道这首歌叫什么名字,因而没办法查找到这首歌的相关的信息。所以为了解决上述这个问题,我们开发了一个音乐旋律识别及分析系统。通过录取外界音响设备播放的音乐,并提取该音频里的指纹信息作为唯一标示符,建立原唱歌曲音频指纹数据库,提供检索服务。将录取音频的指纹信息和原唱音频指纹数据库进行匹配,返回歌曲的相似度和歌曲信息。

2 实现原理

2.1开发环境和平台,使用语言

开发环境:LINUX;

开发工具:visual studio 2011,JDK, Python 3.3 ;

开发语言:c,c++,java,python;

服务器:linux+VMware虚拟机。

2.2引用的技术

2.2.1 Echoprint开源项目

Echoprint 系统由三部分组成。 Codegen指纹生成器将音频文件(或者音频样本)作为输入,基于Echo Nest Musical Fingerprint (ENMFP)算法产生声纹。Echoprint服务器维护一个声纹和音轨信息的索引数据库,并且支持远程访问和添加新的声纹及音轨。 Echoprint数据库本身维护对外公开的音轨和声纹信息。数据库里有整段音轨的声纹代码,但是同大多数声纹识别技术类似,有部分片段即可进行比对。Echoprint可以提供至少20s时长片段的声纹精确匹配。Echoprint总体框架图

2.2.2 taglib

格式的音频文件中读取音频数据。TagLib库为阅读和编辑元数据几个流行的音频格式。目前它支持双方ID3v1和ID3v2 MP3文件,Ogg Vorbis评论和ID3标签和Vorbis评论在FLAC,MPC,Speex,WavPack TrueAudio,WAV,AIFF、MP4和ASF文件。

2.2.3 zlib

提供数据压缩用的函式库,由Jean-loupGailly与Mark Adler所开发。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用,此函式库为自由软件,使用zlib授权。

2.2.4 boost

Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库由Boost社区组织开发、维护。其目的是为C++程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的库.

2.2.5 FFmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

2.3开发框架

2.3.1 音频指纹采集模块

5 总结

通过努力,以提取音频音频指纹为核心,匹配算法为辅,完成了对整个系统的开发。通过提取的指纹来匹配歌曲,获得该歌曲的相似度,然后对其进行智能识别。经过多次的测试获得不错的效果。

参考文献:

[1] 吕国英.算法设计与分析 [M].清华大学出版社,2012.

[2] 朱战立.数据结构-使用C语言 [M].电子工业出版社,2013.