Swift: неизвестная ошибка при попытке воспроизведения аудиофайла - PullRequest
0 голосов
/ 27 сентября 2018

В настоящее время я занимаюсь разработкой приложения с использованием SpriteKit в Xcode (версия 9.4).Еще пару часов назад у меня не было проблем или ошибок в моем коде, и все работало идеально.Я сделал небольшие изменения в коде, но не слишком радикально.В какой-то момент в прошлом часе большинство моих аудиофайлов перестали воспроизводиться.

Некоторый код, в котором создаются bulletSound и backingAudioMain, а также функции, которые их используют.

let bulletSound = SKAction.playSoundFileNamed("bulletSound.wav", waitForCompletion: false)

var backingAudioMain = AVAudioPlayer()

//A function that uses bulletSound
func fireBullet() {
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.name = "Bullet" //Bullet is a reference name for the object bullet
bullet.setScale(1.1)
bullet.position = player.position
bullet.zPosition = 1
bullet.physicsBody = SKPhysicsBody(rectangleOf: bullet.size)
bullet.physicsBody!.affectedByGravity = false
bullet.physicsBody!.categoryBitMask = physicsCategories.Bullet
bullet.physicsBody!.collisionBitMask = physicsCategories.None
bullet.physicsBody!.contactTestBitMask = physicsCategories.EnemyFighter //we will be told when a bullet hits the enemy
self.addChild(bullet)

let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 0.8) //Bullet moves to the top of the scene height plus the height of the bullet so it goes just off screen
let deleteBullet = SKAction.removeFromParent() //once the bullet is just off screen, the bullet is deleted to preserve memory
let bulletSequence = SKAction.sequence([bulletSound, moveBullet, deleteBullet]) //Sequences off the two actions above
bullet.run(bulletSequence)}

//A function that uses backingAudioMain
func playMusic(){
let filePath = Bundle.main.path(forResource:"backingAudioMain", ofType: "wav")
let audioURL = URL(fileURLWithPath: filePath!)

do{ backingAudioMain = try AVAudioPlayer(contentsOf: audioURL)}
catch { return print ("Cannot find the audio.")}

backingAudioMain.numberOfLoops = -1
backingAudioMain.play()}

Вот некоторые ошибки отладчика при попытке использовать функцию fireBullet.

2018-09-27 10:34:16.414492-0400 Solo Mission[8410:191101] [aqme] 202: err 1718449215
2018-09-27 10:34:16.426109-0400 Solo Mission[8410:191101] [aqme] 202: err 1718449215
2018-09-27 10:34:19.127161-0400 Solo Mission[8410:190608] AUBase.cpp:832:DispatchSetProperty:  ca_require: ValidFormat(inScope, inElement, newDesc) InvalidFormat
2018-09-27 10:34:19.129167-0400 Solo Mission[8410:190608] SKAction: Error loading sound resource: "bulletSound.wav"
2018-09-27 10:34:19.151046-0400 Solo Mission[8410:191101] [aqme] 202: err 1718449215
2018-09-27 10:34:21.597514-0400 Solo Mission[8410:190608] SKAction: Error loading sound resource: "bulletSound.wav"

Я заметил, что воспроизводится только мой файл backingAudioMain, который является AVAudioPlayer.После нескольких часов попыток решить и исследовать проблему я ничего не нашел.Я думаю, что это проблема на стороне XCode, но я не совсем уверен.

1 Ответ

0 голосов
/ 28 сентября 2018
let deleteBullet = SKAction.removeFromParent() //once the bullet is just off screen, the bullet is deleted to preserve memory
let bulletSequence = SKAction.sequence([bulletSound, moveBullet, deleteBullet]) //Sequences off the two actions above
bullet.run(bulletSequence)

Таким образом, звуковое действие никогда не может быть воспроизведено, потому что действие удаления прерывает его.Чтобы увидеть это, измените вторую строку на

let bulletSequence = SKAction.sequence([bulletSound, moveBullet])

. Если вы собираетесь удалить из родительского элемента, вставьте в последовательность действие wait, например, SKAction.wait(forDuration: 5.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...