2012-08-09 16 views

Antwort

17

der folgende Code wird aus Apple's Sample AVRecorder gezogen ... dieses bestimmte Bit des Codes erwirbt eine Reihe von Verbindungen aus den Verbindungsmethoden dieser Klasse movieFileOutput, erhält den AVCaptureAudioChannel für jede Verbindung und berechnet die Dezibelstärke basierend darauf. Ich würde annehmen, dass, wenn Sie nach einem Ausgang "Geräuschpegel" suchen, Sie in der Lage wären, ähnliche Informationen zu erfassen. Wenn Sie nach etwas niedrigerem Niveau suchen, versuchen Sie es mit dem HAL-Framework (Hardware Abstraction Layer).

- (void)updateAudioLevels:(NSTimer *)timer 
{ 
    NSInteger channelCount = 0; 
    float decibels = 0.f; 

    // Sum all of the average power levels and divide by the number of channels 
    for (AVCaptureConnection *connection in [[self movieFileOutput] connections]) { 
     for (AVCaptureAudioChannel *audioChannel in [connection audioChannels]) { 
      decibels += [audioChannel averagePowerLevel]; 
      channelCount += 1; 
     } 
    } 

    decibels /= channelCount; 

    [[self audioLevelMeter] setFloatValue:(pow(10.f, 0.05f * decibels) * 20.0f)]; 
} 
+0

Sollte diese Umwandlung nicht pow (10.f, 0.05f * Dezibel) sein? du brauchst das nicht extra 20 da. Lesen Sie hier: http://stackoverflow.com/questions/2465328/iphone-sdk-avaudiorecorder-metering-how-to-change-peakpowerforchannel-from-d oder besser noch http://travisjeffery.com/b/2013/02/converting-avfoundations-power-levels-to-from-logarithmic-und-linear-scale/ – ucangetit

+0

@ucangetit, ich kann nicht intelligent zu diesem Detail im Hinblick auf das Code-Snippet sprechen. Ich habe den Code nur kopiert, falls Apple den Link zum Beispielcode überarbeitet hat. –

Verwandte Themen