Я пытаюсь заставить приложение реагировать на claps или выше нормального уровня звука. Для этого я использую Swift и SpriteKit. Я импортировал AVFoundation и, конечно, SpriteKit. Это моя установка:Почему моя функция update() не реагирует на уровни дБ?
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
Я получил этот код из this site.
Следующая внутри GameScene
и 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()
И, наконец, внутри функции update()
:
recorder.updateMeters()
if recorder.averagePowerForChannel(1) > -160 && impulseAdded == false {
sprite.physicsBody?.applyImpulse(CGVector(dx: 0,dy: 100))
impulseAdded = true
}
Спрайт остается неизменным. Импульс не применяется. В чем моя проблема?
Ссылки:
Я пробовал это так и аналогично, когда я печатаю() статус записи. Это вернулось. Когда дело доходит до ошибок, я никогда не получаю. – ecoguy
Просить OP проверить наличие ошибок не отвечает на вопрос. Это должен быть комментарий. – JAL
@ecoguy kk, похоже, вы нашли массив каналов проблем. удивил, что ошибка не была более полезной, как «фатальная ошибка: индекс массива вне диапазона» –