¿Por qué mi function de actualización () no reactjs en niveles de dB?

Estoy tratando de hacer que mi aplicación reaccione a aplausos o niveles de sonido más altos que lo normal. Estoy usando Swift y SpriteKit para esto. He importado AVFoundation y, por supuesto, SpriteKit. Esta es mi configuration:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let docsDir = dirPaths[0] as! String let soundFilePath = docsDir.stringByAppendingPathComponent("sound.caf") let soundFileURL = NSURL(fileURLWithPath: soundFilePath) let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.Min.rawValue, AVEncoderBitRateKey: 16, AVNumberOfChannelsKey: 1, AVSampleRateKey: 44100.0] let sprite = SKSpriteNode(imageNamed: "Apple_Swift_Logo") let recorder = AVAudioRecorder(URL: soundFileURL, settings: recordSettings as [NSObject : AnyObject], error: nil) var impulseAdded = false 

Recibí este código de este sitio .

Siguiente dentro de GameScene y didMoveToView() :

 //sprite sprite.position = CGPointMake(320, 568) addChild(sprite) //recorder; meteringEnabled set to true to allow access to dB levels recorder.meteringEnabled = true recorder.record() 

Y finalmente dentro de la function update() :

 recorder.updateMeters() if recorder.averagePowerForChannel(1) > -160 && impulseAdded == false { sprite.physicsBody?.applyImpulse(CGVector(dx: 0,dy: 100)) impulseAdded = true } 

El sprite permanece estático. No se aplica impulso. ¿Cuál es mi problema aquí?

Referencias:

  • AVFoundation
  • AVAudioRecorder

Todo se networkinguce a esta línea de código:

 AVNumberOfChannelsKey: 1 

Está en el recordSettings .

Luego, en la function update() esto, if recorder.averagePowerForChannel(1) > -160 se debe cambiar a esto:

 if recorder.averagePowerForChannel(0) > -160 

Parece que funciona como una matriz, comienza en cero.

Sugiero search cualquier error de grabación ( de esta respuesta ).

 var error : NSError? AVAudioSession.shanetworkingInstance.setCategory(AVAudioSessionCategoryPlayAndRecord, error:&error) if let anError = error { NSLog("Error description: \(anError)") } 

o en su caso

 var error : NSError? let recorder = AVAudioRecorder(URL: soundFileURL, settings: recordSettings as [NSObject : AnyObject], error: &error) if let anError = error { NSLog("Error description: \(anError)") } 

y

 var success = recorder.record() NSLog("recorded successfully? \(success)")