Zwiększenie głośności ścieżki dzięki RMS

15

Próbuję obliczyć głośność ścieżki dźwiękowej, którą zapisałem w buforze. Bufor zawiera dane PCM sygnału i chcę dowiedzieć się, jak „głośno” jest za pomocą Root Mean Squared. Zakładam, że mogę to zrobić w dziedzinie czasu zamiast przełączać się na dziedzinę częstotliwości. Jaki byłby na to pseudo-kod?

Czy po prostu próbowałem przez jedną sekundę (audio [0] - audio [44099], audio [44099] - audio [88199] itd.) I obliczyłem RMS tych wartości? Na przykład, czy zrobiłbym to:

RM.S.=audio[0]2)+audio[1]2)+audio[2)]2).....audio[44099]2)44100

za każdą sekundę?

XSL
źródło
1
W powyższym wyrażeniu brakuje nawiasu - dodam go osobiście, ale zmiany muszą zawierać co najmniej 6 znaków ...
Paul R
3
@PaulR - Możesz dodać, <!-- html comment -->aby obejść ograniczenie znaków w rzadkich przypadkach, gdy w innym przypadku idealny post zawiera mały, ale bardzo ważny błąd. Ta potrzeba zdarza się bardzo rzadko: zwykle do zrobienia jest więcej niż 6 znaków. Na przykład, gdy brakuje nawiasów, zwykle lepiej jest użyć\sqrt{}\frac{}{} konstruktów i w TeX.
Kevin Vermeer
1
@Kevin: dziękuję za podpowiedź - w przyszłości skorzystam z sugestii komentarzy HTML.
Paul R
@PaulR - zostało to omówione wcześniej: ograniczenie jest celowe, ma na celu zapobieganie niekompletnym lub bezcelowym modyfikacjom (patrz obrona tutaj ), ale ma swoich przeciwników (patrz dyskusja tutaj ).
Kevin Vermeer
4
Pamiętaj, że sam RMS nie mówi ci głośności. Bardzo niskie lub wysokie częstotliwości brzmią mniej niż 3 kHz o tej samej wartości skutecznej. Filtr A-ważący zapewni dokładniejsze oszacowanie. gist.github.com/148112
endolit

Odpowiedzi:

12

Inną rzeczą jest to, że wartość RMS nie jest zbyt dobrze skorelowana z postrzeganą głośnością. Zamiast tego możesz rozważyć nazwanie go poziomem lub głośnością. Istnieje coś, co nazywa się konturami równej głośności, które określają, jak wrażliwe jest ucho na jedną konkretną częstotliwość w porównaniu z inną częstotliwością, patrz artykuł w Wikipedii . Krzywe te zależą od poziomu. Na przykład ucho jest bardzo wrażliwe na ton 1kHz w porównaniu do tonu 100Hz, jak pokazano na tym obrazie (oś pozioma to częstotliwość w Hz):

równe kontury głośności

Jedną z względnie prostych rzeczy, które możesz zrobić, jest filtrowanie danych PCM za pomocą odwróconej krzywej równej głośności. Możesz też zastosować standardową wagę A, zobacz artykuł na temat filtra wagowego Wikipedii . Następnie możesz obliczyć wartość skuteczną wyjściową filtra ważonego o jednakowej głośności.

niaren
źródło
Nie jestem pewien, jak przejść od tego do kodu osoby pytającej. Przykładem pytania jest sumowanie kwadratów próbek audio. Odpowiedź mówi o zastosowaniu filtra do częstotliwości, więc wydaje się, że „filtrowanie danych PCM za pomocą odwróconej krzywej równej głośności” nie jest wystarczające. Najpierw musisz podać wartość dla każdej częstotliwości, a następnie możesz wymyślić, jak prawidłowo zastosować krzywą? Ale to duży pominięty krok.
gman
@gman Chodzi o to, aby wstępnie przetworzyć dźwięk za pomocą filtra, a następnie użyć wyniku jak w pytaniu (obliczenie RMS). Nie jestem w 100% pewien, co masz na myśli. Nie jesteś pewien, jak wykonać filtrowanie, a może projekt filtra?
niaren