Java实现Shazam声音识别算法
生活随笔
收集整理的這篇文章主要介紹了
Java实现Shazam声音识别算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java實現(xiàn)Shazam聲音識別算法
Shazam算法采用傅里葉變換將時域信號轉(zhuǎn)換為頻域信號,并獲得音頻指紋,最后匹配指紋契合度來識別音頻。
1、AudioSystem獲取音頻
奈奎斯特-香農(nóng)采樣定理告訴我們,為了能捕獲人類能聽到的聲音頻率,我們的采樣速率必須是人類聽覺范圍的兩倍。人類能聽到的聲音頻率范圍大約在20Hz到20000Hz之間,所以在錄制音頻的時候采樣率大多是44100Hz。這是大多數(shù)標(biāo)準MPEG-1 的采樣率。44100這個值最初來源于索尼,因為它可以允許音頻在修改過的視頻設(shè)備上以25幀(PAL)或者30幀( NTSC)每秒進行錄制,而且也覆蓋了專業(yè)錄音設(shè)備的20000Hz帶寬。所以當(dāng)你在選擇錄音的頻率時,選擇44100Hz就好了。
定義音頻格式:
調(diào)用麥克風(fēng)獲取音頻,保存到out中
public static ByteArrayOutputStream out = new ByteArrayOutputStream(); try {AudioFormat format = smartAuto.getFormat(); // Fill AudioFormat with the settingsDataLine.Info info = new DataLine.Info(TargetDataLine.class, format);startTime = new Date().getTime();System.out.println(startTime);SmartAuto.line = (TargetDataLine) AudioSystem.getLine(info);SmartAuto.line.open(format);SmartAuto.line.start();new FileAnalysis().getDataToOut("");while (smartAuto.running) {checkTime(startTime);}SmartAuto.line.stop();SmartAuto.line.close();} catch (Throwable e) {e.printStackTrace();}獲取到的out數(shù)據(jù)需要通過傅里葉變換,從時域信號轉(zhuǎn)換為頻域信號。
傅里葉變換
計算out的頻域值
private void setFFTResult(){byte audio[] = SmartAuto.out.toByteArray();final int totalSize = audio.length;System.out.println("totalSize = " + totalSize);int chenkSize = 4;int amountPossible = totalSize/chenkSize;//When turning into frequency domain we'll need complex numbers: SmartAuto.results = new Complex[amountPossible][];DftOperate dfaOperate = new DftOperate();//For all the chunks: for(int times = 0;times < amountPossible; times++) {Complex[] complex = new Complex[chenkSize];for(int i = 0;i < chenkSize;i++) {//Put the time domain data into a complex number with imaginary part as 0: complex[i] = new Complex(audio[(times*chenkSize)+i], 0);}//Perform FFT analysis on the chunk: SmartAuto.results[times] = dfaOperate.fft(complex);}System.out.println("results = " + SmartAuto.results.toString());}總結(jié)
以上是生活随笔為你收集整理的Java实现Shazam声音识别算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存条的选取与安装(详细)
- 下一篇: 数据中心分析诊断必备之常用仪表