Utworzono metodę getSpectrum
za pomocą metody getByteFrequencyData
w węźle analizatora API Web Audio API. Tablica zwróconych danych dźwiękowych jest względna względem źródła dźwięku (instancji el lub Audio()): volume
, wartość od 0 do 1.Normalizacja danych audio z getByteFrequencyData według wolumenu
Używanie woluminu źródła dźwięku Próbuję normalizować każdą otrzymaną wartość od getByteFrequencyData, dzięki czemu użytkownik getSpectrum nie musi martwić się głośnością podczas wizualizacji danych audio.
ten jest rozłożony w dół wersja getSpectrum
var audioData = new Uint8Array(analyser.binCount);
var spectrum = [];
analyser.getByteFrequencyData(audioData);
for (var i = 0; i < audioData.length; i++) {
var value = audioData[i];
//Where I'm trying to calculate the value independent of volume
value = ((value/audioEl.volume)/255);
spectrum.push(value);
}
return spectrum;
W W3C spec równanie odniesienia wykorzystuje się do obliczenia wartości zwracane którym podano maxDecibels i minDecibels. Z moim podstawowym zrozumieniem, próbowałem odwrócić matematykę, więc otrzymuję znormalizowaną wartość, ale nie mogę jej poprawnie działać. Mam problem z osiągnięciem tego z tylko wartością objętości od 0 do 1.
Wszelkie podżeganie byłoby bardzo cenne! Oto problem z numerem working example. Zmiana suwaka głośności zilustruje problem.
Aktualizacja 7/22/16: Dzięki odpowiedzi @ raymond-toy zrozumiałem, jak przekonwertować wartość woluminu od 0 do 1 na decybele.
volumeDB = Math.abs((Math.log(volume)/Math.LN10)*20);
Po zdobyciu DB, ja odwróconej równanie w specyfikacji W3C,
value = ((audioDataValue * volumeDB)/255) - volumeDB
Niestety value
jakoś nadal kończy się względem volume
. Czy ktoś widzi, czego mi brakuje?
Można obejść ten problem poprzez umieszczenie GainNode w między '' analyser' i swoim kontekście. cel podróży'. Wtedy miałbyś suwak głośności, który dostosował GainNode zamiast głośności dźwięku. W ten sposób objętość zostanie skorygowana dopiero po przejściu przez twój "analizator". – idbehold
Nad czym pracuję, nie miałbym kontroli nad tym, co ustawia wolumin, więc nie byłbym w stanie umieścić GainNode przed tym, co by było. To dobry pomysł. Rozważymy to dla innych projektów. –