나는 Sprite Kit를 사용하고 선호하게는 Swift 라이브러리를 사용하여 iOS 9+ 용 게임을 개발 중입니다.iOS : fps를 떨어 뜨리지 않고 오디오를 재생하는 방법은 무엇입니까?
현재 오디오 파일을 미리로드하고 각각 AVAudioPlayer의 별도 인스턴스에 연결된 싱글 톤을 사용하고 있습니다.
import SpriteKit
import AudioToolbox
import AVFoundation
class AudioEngine {
static let sharedInstance = AudioEngine()
internal var sfxPing: AVAudioPlayer
private init() {
self.sfxPing = AVAudioPlayer()
if let path = NSBundle.mainBundle().pathForResource("ping", ofType: "m4a") {
do {
let url = NSURL(fileURLWithPath:path)
sfxPing = try AVAudioPlayer(contentsOfURL: url)
sfxPing.prepareToPlay()
} catch {
print("ERROR: Can't load ping.m4a audio file.")
}
}
}
}
이 싱글 앱 시작시 초기화된다
여기에 짧은 코드 냈다 아이디어를 얻을 수 있습니다. 게임 루프에서 나는 그럼 그냥 특정 오디오 파일을 재생하려면 다음 줄을 호출
AudioEngine.sharedInstance.sfxPing.play()
이 기본적으로 작동을하지만, 파일이 재생 및 프레임 속도는 60.0에서 56.0로 떨어질 때 나는 항상 글리치를 얻을 내 iPad Air에.
누군가가 AVAudioPlayer에서이 성능 문제를 해결하는 방법을 알고 있습니까?
는 또한, 즉, 제 3의 라이브러리를 위해 밖으로 보이는 :
는- AudioKit
- ObjectAL [마지막 업데이트 2013 ...]
- AVAudioEngine [AVAudioPlayer에 기초하여 매우 무거운 가중 같은데, 같은 문제]
요구 사항 :?
- 어떤 운동 효과를 재생 (등, 안타 샷처럼) 매우 짧은 샘플을 많이 플레이
- 루프에서 몇 가지 배경/주위 소리 재생 (따라서 좋은 것 투구)
- 불쾌한 글리치/프레임 속도 저하!
내 요구 사항에 위의 라이브러리 중 하나를 사용 하시거나 위의 코드를 사용하여 문제를 지적 하시겠습니까?
UPDATE : 짧은 소리를 재생
:
self.runAction(SKAction.playSoundFileNamed("sfx.caf", waitForCompletion: false))
실제로 프레임 속도를 향상 않습니다. I exported the audio files with Audiacity to the .caf format (Apple's Core Audio Format).하지만 튜토리얼에서는 "Signed 32-bit PCM
"인코딩을 사용하여 내 케이스에서 오디오 재생을 방해합니다. 다른 인코딩 옵션 (32-bit float
, U-Law
, 등)을 사용하면 문제가 없습니다.
caf
형식을 사용하는 이유는 무엇입니까? 압축되지 않았기 때문에 m4a
과 같은 압축 된 형식에 비해 CPU 오버 헤드가 적은 메모리에 더 빨리로드되기 때문입니다. 짧은 사운드 효과가 짧은 간격으로 많이 재생되는 경우 이는 의미가 있으며 몇 킬로바이트를 소비하는 짧은 오디오 파일의 경우 디스크 사용량에 큰 영향을주지 않습니다.앰비언트 및 배경 음악과 같이 더 큰 오디오 파일의 경우 압축 형식 (mp3
, m4a
)을 사용하는 것이 좋습니다.
var backgroundMusic: SKAudioNode!
예를 들어 당신이 didMoveToView()
이를 추가 할 수 있습니다 : 당신이 아이폰 OS 9+위한 게임을 개발하는 경우
http://stackoverflow.com/questions/25646583/massive-fps-drops-when-avaudioplayer-ist-triggered-repeatedly-sprite-kit 도움이 될 수도 있습니다. – Konsy
@ Konsy : 의견을 보내 주셔서 감사합니다. 나 자신에 의해 답변을 올렸으므로이 링크를 알지만 내 문제는 루핑으로 해결할 수 없다. 이것은 모터 나 로켓 추력과 같은 음향 효과에 좋지만 내 사운드 효과는 사용자가 발사 한 발사와 같은 정확한 패턴없이 반복적으로 재생됩니다 질문에 나열된 프레임 워크에 대한 추가 아이디어 및/또는 권장 사항은 무엇입니까? – salocinx
Sprite Kit의 방법은 어떻습니까? 'SKAction.playSoundFileNamed'와 같습니다. 나는 자신을 테스트하지 않았지만 프레임 속도를 죽이지 않도록 최적화되어 있다고 가정합니다. 노력할만한 가치가있을 수 있습니다. – Moritz