Java實現Shazam聲音識別演算法

2021-08-27 18:02:34 字數 1711 閱讀 5783

shazam演算法採用傅利葉變換將時域訊號轉換為頻域訊號,並獲得音訊指紋,最後匹配指紋契合度來識別音訊。

public

static

float samplerate = 44100;

public

static

int samplesizeinbits = 16;

public

static

int channels = 2; // double

public

static

boolean signed = true; // indicates whether the data is signed or unsigned

public

static

boolean bigendian = true; // indicates whether the audio data is stored in big-endian or little-endian order

public audioformat getformat()

呼叫麥克風獲取音訊,儲存到out中

public

static bytearrayoutputstream out = new bytearrayoutputstream();

try 

smartauto.line.stop();

smartauto.line.close();

} catch (throwable e)

獲取到的out資料需要通過傅利葉變換,從時域訊號轉換為頻域訊號。

傅利葉變換

public complex fft(complex x) 

// 如果訊號數為奇數,使用dft計算

if (n % 2 != 0)

// 提取下標為偶數的原始訊號值進行遞迴fft計算

complex even = new complex[n / 2];

for (int k = 0; k < n / 2; k++)

complex evenvalue = fft(even);

// 提取下標為奇數的原始訊號值進行fft計算

// 節約記憶體

complex odd = even;

for (int k = 0; k < n / 2; k++)

complex oddvalue = fft(odd);

// 偶數+奇數

complex result = new complex[n];

for (int k = 0; k < n / 2; k++)

return result;

}

計算out的頻域值

private

void

setfftresult()

//perform fft analysis on the chunk:

smartauto.results[times] = dfaoperate.fft(complex);

}system.out.println("results = " + smartauto.results.tostring());

}

使用AudioRecord實現聲音採集

前言 在android開發中,實現錄音的功能一般有三種方式 1.呼叫系統的錄音器 2.使用mediarecord類實現錄音功能 3.使用audiorecord類。在這裡我就不講前兩種方式的實現了,大家可以在網上查詢相關的內容。這篇文章主要講的是使用audiorecord實現聲音採集。如果你不需要對採...

Tensorflow實現DNN,手寫數字識別

from tensorflow.examples tutorials mnist import input data mnist input data.read data sets g tensorflow data one hot true import tensorflow as tf lear...

Swift下呼叫Touch ID實現指紋識別

ios開發 484884085 例如以下 是實現呼叫5s以上裝置指紋識別的 依照官網給出的 會出現識別成功後非常久才執行成功後呼叫的 逛了非常久的。才知道要將其放入主線程實現才幹夠。詳細 例如以下。1 引入類 import localauthentication 呼叫指紋識別函式 func logi...