iPhone SDK: AVAudioRecorder Messung - Wie kann peakPowerForChannel von Dezibel in Prozent geändert werden?

7

Der AVAudioRecorder im iPhone SDK kann verwendet werden, um die Spitzen- und Durchschnittsleistung für einen Kanal in Dezibel zu erhalten. Der Bereich liegt zwischen 0dB und 160db. Mit welcher Berechnung wird diese in eine Skala zwischen 0 - 10 oder ähnlichem umgewandelt, die für ein Audiopegelmessgerät verwendet werden kann?

    
memmons 17.03.2010, 19:44
quelle

2 Antworten

17

Der Bereich liegt zwischen -160 dB und 0 dB. Wahrscheinlich möchten Sie es in einem Meter anzeigen, der von -90 dB bis 0 dB reicht. Die Darstellung als Dezibel ist eigentlich nützlicher als als lineares Audiopegel, weil die Dezibel eine logarithmische Skala sind, was bedeutet, dass sie näher an die Lautstärke eines Schalls herankommt.

Das heißt, Sie können dies verwenden, um von Dezibel in linear zu konvertieren:

linear = pow (10, decibels / 20);

und umgekehrt:

decibels = log10 (linear) * 20;

Der Bereich für die obigen Dezibel ist negativ unendlich bis Null und für linear ist 0,0 bis 1,0. Wenn der lineare Wert 0,0 ist, ist das -inf dB; linear bei 1,0 ist 0 dB.

    
lucius 21.03.2010, 16:10
quelle
4

Apple hat außerdem eine dB-zu-linear-Amplitudenumwandlung Klasse MeterTable.cpp und MeterTable.h implementiert Suchen Sie im App-Beispiel von SpeakHere danach.

Sie können entweder ihre Inline-Funktion verwenden, die den Wert "on-the-fly" berechnet

%Vor%

ODER

Erstellen Sie eine MeterTable-Instanz, um eine vorberechnete Nachschlagetabelle zu verwenden. Dies speichert Konvertierungswerte im Speicher, sodass Ihre Anwendung die Anzahl der Berechnungen reduzieren kann.

%Vor%

HINWEIS: Lookup-Tabelle wird wahrscheinlich benötigt, wenn viele andere Berechnungen gleichzeitig ausgeführt werden oder Sie sehr schnelle Verarbeitung benötigen.

    
zerojarvis 19.06.2010 01:17
quelle