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...