2

aquilaライブラリを使用して、話し言葉の類似性を見つけようとしています。私の現在のアプローチは次のとおりです。
1) まず、話し言葉を小さなフレームに分解します。
2) 次に、各フレームに MFCC を適用し、結果をベクトルに格納します。
3) 最後に DTW を使用して距離を計算します。

これは私が使用しているコードです。

int frame_size = 1024;

Aquila::WaveFile waveIn0("start_1.wav");
Aquila::FramesCollection frameCollection0(waveIn0, frame_size);
vector<vector<double>> dtwdt0;
Aquila::Mfcc mfcc0(frame_size);
for(int i = 0; i < frameCollection0.count() ; i++)
{
    Aquila::Frame frame = frameCollection0.frame(i);
    vector<double> mfccValues = mfcc0.calculate(frame);
    dtwdt0.push_back(mfccValues);
}

Aquila::WaveFile waveIn1("start_2.wav");
Aquila::FramesCollection frameCollection1(waveIn1, frame_size);
vector<vector<double>> dtwdt1;
Aquila::Mfcc mfcc1(frame_size);
for(int i = 0; i < frameCollection1.count(); i++)
{
    Aquila::Frame frame = frameCollection1.frame(i);
    vector<double> mfccValues = mfcc1.calculate(frame);
    dtwdt1.push_back(mfccValues);
}

Aquila::Dtw dtw(Aquila::euclideanDistance, Aquila::Dtw::PassType::Diagonals);
double distance_1 = dtw.getDistance(dtwdt0, dtwdt1);
cout << "Distance : " << distance_1 << endl;

十分に正確でないことを除けば、うまく機能します。場合によっては、「start」と「stop」という 2 つの単語の「start」の間隔よりも、「start」と「stop」の間隔が短くなることがあります。

私のコードは正しいですか?より正確な結果が得られるようにプログラムを改善するにはどうすればよいですか? どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1