/ / Как да настроя Android AudioRecord Така че имам малко латентност, но имам голям размер на извадката за моя FFT? - android, fft, audiorecord

Как да настроя Android AudioRecord Така че имам малко латентност, но имам голям размер на извадката за моя FFT? - android, fft, audiorecord

Така че имам AudioRecord настройка работа с FFT за определяне на честотите за определяне на бележка.

По време на настройката питам

AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat)

Тогава имам някои ако изявления, които го определят наследващата по-голяма мощност от две. За телефона ми обикновено е 2048 (2 ^ 11). Целта е, че следващото нещо, което изпълнявам, е FFT, за който алгоритъмът изисква буферна дължина, която е мощност от две.

Коригирайте ме, ако греша, но имах впечатлението, че причината да намерите минималния размер на буфера е, защото би намалила латентността.

Това беше добре, докато не четях товаза да определите конкретни бележки с точност, особено тези, които имат по-ниска честота, трябва да имате по-голям размер на извадката, за да се захранвате с FFT; За предпочитане размер на пробата, по-голям от 16384 (2 ^ 14).

Предполагам, че въпросът, който имам е. Когато създам AudioRecord:

AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT,
rate, channelConfig, audioFormat, bufferSize1);

мога ли да използвам един буфер размер, по-малък за по-малко латентност, а след това, когато прочетох буфер:

AudioRecord().read(thisbuffer, 0, bufferSize2);

да използвате различен размер буфер, с по-голяма дължина, преди да го изпратите на FFT? Или има ли по-добър начин да направите това?

Отговори:

2 за отговор № 1

Първо, FFT е лош избор за определяне на "бележка", тъй като за музикалните бележки обикновено се прави оценка на терена, а не на спектралната честота, които са две много различни неща поради психоакустиката.

За прозорец FFT, спектралната честота енай-точно определено близо до средата на FFT прозореца. По този начин, използвайки по-дълъг FFT, дори да ги повтаряте чрез припокриване след много малък размер на буфера за въвеждане, ще доведе до латентност от порядъка на половината от дължината на FFT.

Но повторение на FFT по-често (чрез припокриванеслед кратка скорост на въвеждане на буфер) ще ви даде по-добра времева резолюция, ако не и по-бърза латентност. За реално по-ниска латентност, трябва да използвате по-кратък FFT и да загубите честотата на разделителната способност или да използвате друга честота или стъпка, която също ще има други компромиси с времева честота и стабилност.