Audio-Fingerprinting 是一个音乐指纹识别系统,使用的语言为 JAVA,同时需要用到 MySQL 数据库(虽然不是必须的,但这个系统采用他保存指纹和音乐信息)。他包含了指纹生成,数据库存储,和简易的服务器和客户端。
他通过生成和记录音乐指纹,能够识别来自麦克风、文件等各个来源的音乐,并且有很高的抗噪性,同时他对文件属性和音乐质量不敏感。你可以使用服务器给手机或者其他程序提供音乐识别服务。
你可以根据需求调节里面的参数,当前参数是为了在较短时间识别来自极大噪声和失真的音源,1500个左右的文件将产生接近24000000个指纹数 据。如果你只用于识别文件并且没有严重的噪声与失真,你可以修改参数,1个文件只需要少量指纹就可以识别,对于噪声较低的音源10s 200个指纹已经满足大多需求。
需要安装MySQL,并执行Fingerprint. sql, 同时你可能需要修改max_allowed_packet参数,因为添加歌曲需要发送较大的包,我采用的参数是32M。
修改MysqlDB中的数据库信息为你的数据库信息,如:
private final String url = "jdbc:mysql://127.0.0.1:3306/musiclibary?user=yecheng"; private final String user = "yecheng"; private final String password = "yecheng";
添加文件的方法:
Ps:你可以重写添加的方法或者制作脚本或者直接使用其他软件实现转码功能,目前他能够从%title%}}%album%}}%artist%的文件名中获得信息。
将文件转码为WAV,采样率为8000。
调用Insert,参数为文件名或者文件夹。
搜索音乐
你可以调用Search+文件名搜索。
在数据库较大的情况推荐采用运行Server,使用Client+文件名搜索。
Fingerprint:
NPeaks:一个周期中每个子带的峰值点的个数 fftSize:FFT的窗口大小 overlap:FFT的窗口重叠大小 C:一个周期包含多少个窗口 peakRange:取峰值点时与多大范围的邻居比较 range_time:取点对的时候的时间范围,单位为秒 range_freq:取点对的时候的频率范围,单位为频率 Band:分成的子带,值对应FFT产生的数组索引 minFreq:最小频率 maxFreq:最大频率 minPower:最小能量
修改的建议:
提高识别率:
减小minPower, 增加Band、NPeaks、range_time
降低数据量:
增大minPower,减小Band、NPeaks、rang_time
其中建议先修改Band和minPower。
Server:
port:服务器的端口
Client:
ip:服务器的ip port:服务器的端口
数据量:音乐库为1500首歌,指纹数量为24000000个左右,服务器稳定后占用内存约340M。
速度:处理器i7-3632QM,添加1500首歌用时约1919秒,一首歌约用时1.3秒。使用服务器查找10s的歌曲用时约0.2秒(不考虑客户端读取文件的时间)。
准确度:对噪声较低的音频有很高的识别率,对噪声较高的也有接近商用的准确率,但是相对来说如果对于未出现在曲库的歌曲,也有一定的误报率。
抗噪性:能够抵抗较强的失真和噪声,可以参考我给的测试音频。
参考文档:
本算法实现类似Shazam,首先我计算出音频的频谱图,将频谱根据频率分成若干子带,对每个子带查找若干个峰值点,本算法子带划分基于Mel频率。
将获得的峰值点根据频率、时间范围组成点对。
本算法的取点对频率范围为在子带内,其目的在于减少点对的数目并且提高分布式能力。取点对的时间范围为1s-4s。你可以根据需要修改这些参数。
#音乐识别系统 一个音乐指纹识别系统,使用的语言为JAVA,同时需要用到MySQL数据库(虽然不是必须的,但这个系统采用他保存指纹和音乐信息)。他包含了指纹生成,数据库存储,和简易的服务器和客户端。 他通过生成和记录音乐指纹,能够识别来自麦克风、文件等各个来源的音乐,并且有很高的抗噪性,同时他对文件属性和音乐质量不敏感。你可以使用服务器给手机或者其他程序提供音乐识别服务。 你可以根据需求调节里面的
Feature Unit Descriptor struct usb_feature_unit_descriptor { U8 bLength; /*Size of this descriptor, in bytes: 7+(ch+1)*n*/ U8 bDescriptorType; /*CS_INTERFACE descriptor type.*/
Input Terminal Descriptor struct usb_input_terminal_descriptor { U8 bLength; /*Size of this descriptor, in bytes: 12*/ U8 bDescriptorType; /*CS_INTERFACE descriptor type.*/ U8 bDescriptorS
0x0000 Microsoft Unknown Wave Format 0x0001 Microsoft PCM Format 0x0002 Microsoft ADPCM Format 0x0003 IEEE Float 0x0004 Compaq Computer VSELP
01、回音降噪 echo_cancellation 02、自动增益控制 auto_gain_control 03、噪声抑制 noise_suppression 04、 高通滤波器 highpass_filter 05、立体声交换 stereo_swapping 06、NetEq容量 audio_jitter_buffer_max_packets 07、NetEq快速模式 audio_jitter_
写在前面 本文翻译自 USB Device Class Definition for Audio Devices 1998年版。主要是鄙人个人使用,所以只挑对我有用的翻译。有些我认为不是很重要的可能就翻译个提纲。鄙人英文能力只有幼儿园水平,建议参考原文阅读。 约定专业名词: Audio Device Class 简称为UAC(USB Audio Class) Control 控制器 Entity
// mode #define VF_FLAG_AUD_STEREO 0x0000 #define VF_FLAG_AUD_JOINTSTEREO 0x0001 #define VF_FLAG_AUD_DUALCHANNEL 0x0002 #define VF_FLAG_AUD_SINGLECHANNEL 0x
Standard Audio Control Interface Descriptor struct usb_ac_interface_descriptor { U8 bLength; /* Size of this descriptor in bytes */ U8 bDescriptorType; /* INTERFACE
Type I Format Type Descriptor struct usb_format_type_1 { U8 bLength; /*Size of this descriptor, in bytes: 8+(ns*3)*/ U8 bDescriptorType; /*CS_INTERFACE descriptor type*/ U8 bDescriptorSubt
Class-Specific Audio Streaming Interface Descriptor struct usb_as_cs_interface_descriptor { U8 bLength; /*Size of this descriptor in bytes: 7 */ U8 bDescriptorType; /*CS_INTERFACE descriptor t
Developers reference guide on creating audio SFX, melodies and vibration on Nokia, Motorola, Sharp, Sagem and Sony mobile devices. Introduction How many times have you thought your software works on a
Examples This sample code exposes a button. When clicked, the button is disabled and the user is prompted to offer a stream. The user can cause the button to be re-enabled by providing a stream (e.g.,
可设定主画面或LiveArea™的音乐。 轻触方格可停用设定,不播放音乐。
我听一个热门单词,并使用MediaPlayer播放一些音乐。 在播放音乐的同时继续收听下一个命令,并做出相应的反应。 该应用程序运行良好,音乐可以通过蓝牙耳机播放,语音也可以同时识别,但它总是使用手机的麦克风。即使蓝牙耳机连接或没有连接,它仍然使用手机的麦克风。 我试着用: 这让我觉得这是可能的但我不知道怎么做。 请帮帮我。提前谢了。
我正在尝试制作一款可以通过语音识别停止的闹钟Android应用程序。为此,我正在使用Google语音识别API(这段代码可以连续进行语音识别)。 它工作得很好,直到我同时演奏音乐。在这种情况下,语音识别的效率会大大降低。 这个问题是合乎逻辑的,因为音乐会增加一些噪音,使识别变得更加困难。但是由于播放的音乐是已知的,我想知道是否有可能告诉谷歌尝试忽略这些额外的噪音。我知道信号处理中存在一些滤波器来做
由于连接到不同的API,我目前正在开发一个工具,允许我阅读所有的通知。 它工作得很好,但现在我想用一些声音命令来做一些动作。 就像当软件说“一封来自Bob的邮件”时,我想说“阅读”或“存档”。 我的软件是通过一个节点服务器运行的,目前我没有任何浏览器实现,但它可以是一个计划。 在NodeJS中,启用语音到文本的最佳方式是什么? 我在它上面看到了很多线程,但主要是使用浏览器,如果可能的话,我希望在一
语音识别是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语言。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。语音识别是一门涉及面很广的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论以及神经生物学等学科都有非常密切的关系。语音识别技术正逐步成为计算机信息处理技术中的关键技术,语音技术的应用已经成为一个具有竞争性的新兴高技术产
识别简单的语句。