Die Formel zum Konvertieren einer linearen Amplitude in Dezibel, wenn Sie 1.0 als Referenz (für 0db) verwenden möchten, ist
%Vor%Ich bin mir also nicht sicher, ob Sie Ihren Code sehen wollen, aber Sie wollen wahrscheinlich
%Vor%Dies wird von -unendlich bei einer Amplitude von 0 bis 0db bei einer Amplitude von 1 gehen. Wenn Sie es wirklich benötigen, um zwischen 0 und 120 zu gehen, können Sie 120 hinzufügen und eine max-Funktion bei Null verwenden.
Also, nach der obigen Zeile:
%Vor%Die Formel, die Sie verwenden, scheint die Formel für die Umwandlung von DB in Amp zu sein, was meiner Meinung nach das Gegenteil von dem ist, was Sie wollen.
Bearbeiten: Ich lese noch einmal und es scheint, dass Sie bereits den Dezibel-Wert haben.
Wenn dies der Fall ist, konvertieren Sie einfach nicht in die Amplitude und fügen Sie 120 hinzu.
Also
ändern %Vor%bis
%Vor%und du solltest in Ordnung sein.
Tatsächlich liegt der Dezibelbereich zwischen -160 und 0, aber er kann positive Werte annehmen. (AVAudioRecorder Klassenreferenz - averagePowerForChannel: Methode)
Dann schreiben Sie besser %code% anstelle von %code% . Natürlich können Sie auch einen Offset setzen, um es zu korrigieren.
Ich mache ein Regressionsmodell, um die Zuordnungsbeziehung zwischen den aus %code% generierten WAV-Daten und den Dezibel-Daten aus %code%
zu konvertieren%code% (dB) = -80 + 6 log2 ( %code% )
wobei %code% der quadratische Mittelwert der wav-Daten in einer kurzen Zeit ist, d. h. 0,1 s.
Stellen Sie einfach Ihren maximalen und minimalen Wert ein. Wie Sie bekommen eine Reichweite von 0-120. Wenn Sie eine Reichweite von 0-60 wollen. Teilen Sie den Wert einfach in die Hälfte, um den halben Bereich usw. zu erhalten.
Ich möchte die Lautstärke der Umgebung messen, nicht zu sicher, ob ich das Richtige tue.
Ich möchte ein VU-Meter im Bereich von 0 (leise) bis 120 (sehr laut) erstellen.
Ich habe die Peak- und die Avg-Power bekommen, bin aber in normaler ruhiger Umgebung sehr hoch. Gib mir einen Zeiger.
%Vor%Apple verwendet eine Nachschlagetabelle in ihrem SpeakHere -Sample, das von dB in einen linearen Wert konvertiert, der auf einer Pegelanzeige angezeigt wird. Dies ist, um die Stromversorgung des Geräts zu sparen (ich denke).
Ich brauchte das auch, aber ich dachte nicht, dass ein paar Float-Berechnungen alle 1 / 10s (meine Bildwiederholfrequenz) so viel Geräteleistung kosten würden. Anstatt also eine Tabelle zu erstellen, formte ich ihren Code in:
%Vor%Ich benutze %code% , daher sehen Sie, wie Sie dB mit %code% erhalten, aber Sie können dort Ihren eigenen dB-Wert eintragen.
Apples Beispiel verwendet %code% Berechnungen, die ich nicht verstehe, weil für die Audio-Messung %code% Genauigkeit mehr als ausreichend ist und weniger Geräteleistung kostet.
Natürlich können Sie diese berechnete %code% jetzt mit einem einfachen %code% auf Ihren Bereich von 0 .. 120 skalieren.
Der obige Code kann beschleunigt werden, wenn wir %code% bei %code% korrigieren, indem wir %code% durch %code% ; aber das ist eine kleine Sache, und ein sehr guter Compiler könnte das für uns tun. Und ich bin mir fast sicher, dass %code% einmal zur Kompilierzeit berechnet wird.