2016-06-23 22 views
0
私は SpriteKitフレームワークとスウィフトコードでiOS用ゲームの開発に取り組んでい

私は、そのようにして、ゲームでFXを鳴らし含めることについてだSpriteKitベースと迅速にゲームに短い音を実装

多くの短い音を使用し、同時にいくつかを演奏し、他のスプライトイベントと同期させる必要があります。ボリューム、ループ、または停止を正確に制御する必要はありません。私は相対的な成功で、次のオプションをしようとしています:

  • 私は、変数をプリロード、playSoundFileNamedによってサウンドファイルを再生するためにSKActionsを使用しようとしました:It'sは本当に簡単かつ迅速に、それは、連続して成長を作成します割り当てを解除することは不可能OpenALの中のメモリ割り当て(XCodeをutilsの追跡)、メモリはアプリのクラッシュまで増加すること(音あたり100キロバイト程度)

  • 私はAudioServicesCreateSystemSoundIDでサウンドファイルを再生するAudioToolboxフレームワークを使用しようとしましたが、それはいくつかを再生するには制限がありますファイルは一度に

  • AVFoundationを使用するオーディオプレーヤーを使用しようとしました。それはメモリリークを生成しませんが、サウンドを再生するアクションを実行すると私のアプリが遅れる

  • 私はOpenALを使用しようとしましたが、プログラミングコンボで簡単に実装するための役立つガイドが見つかりません& Swift、 Objective-Cにのみ見つかりました

私の目標に最も適したアプローチはどれですか?

は私がSKUtilsからSKTAudioと呼ばれる素敵なライブラリ(AVFoundationフレームワークに基づいたシンプルなsharedInstance)を使用して、自分のサウンドを再生するpreefer、

答えて

0

通常ありがとう:

func playSoundEffect(filename: String) { 
    let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil) 
    if (url == nil) { 
     print("Could not find file: \(filename)") 
     return 
    } 

    var error: NSError? = nil 
    do { 
     soundEffectPlayer = try AVAudioPlayer(contentsOfURL: url!) 
    } catch let error1 as NSError { 
     error = error1 
     soundEffectPlayer = nil 
    } 
    if let player = soundEffectPlayer { 
     player.numberOfLoops = 0 
     player.prepareToPlay() 
     player.play() 
    } else { 
     print("Could not create audio player: \(error!)") 
    } 
    } 
} 

それはとてもです使い方は簡単ですが、グローバル変数として宣言できます。

var audioManager : SKTAudio = SKTAudio.sharedInstance() 

その後、あなたはこのような単純な効果再生することができます:

self.audioManager.playSoundEffect("menu-click.mp3") 
+0

http://kstenerud.github.io/ObjectAL-for-iPhone/コメントありがとうございましたObjectAL(ないOpenALの)を使用してみてください。 SKTAudioは私がバックグラウンドミュージックを演奏するのに使うものですが、リアルタイムのゲームには十分速くないので、多くの短いサウンドを演奏するとパフォーマンスが低下します。遅れやノード数の低下がゲームを遅らせる原因になります。 – Pandereich

0

まずソリューション - SKAudioNodeを使用します。また、SKSファイルを使用している場合は、シーンに直接サウンドを配置することができます。そのクラスの記憶に問題はありませんでした。シーンのオーディオは、サウンドを再生する前に実行されているかどうかをチェックする必要があります。たとえば、別のシーンに切り替えるためです。

二 - あなたは

+0

ありがとうございます。 SKAudioNodeはiOS 7.1以降をサポートするためのアプリで、SKAudioNodeはiOS 9.0から利用可能です – Pandereich

+0

ObjectALを少し前に見ました私は初心者で、素早くコードにライブラリを統合する方法を知らない – Pandereich

+0

あなたはcocoapodsを使用していますか? – mikem

関連する問題