エンジニアブログ担当の近藤です。
今回はSpriteKitでの効果音とBGMを再生します。
効果音の再生
SpriteKitで効果音を再生するにはSKActionクラスが持っているplaySoundFileNamedメソッドを使用します。
SKAction *action = [SKAction playSoundFileNamed:@"音声ファイル名" waitForCompletion:NO];
引数の「waitForCompletion:」はActionが終了するタイミングが音声の再生開始時か、音声終了後かの設定をします。
NOの場合は再生開始時、YESの場合は再生終了時となります。
BGMの再生
SpriteKitにはBGMを再生するための機能は備えられておらず、従来からあるAVAudioPlayerを使えばいい様です。
プロジェクト作成
以前の記事を参考にSpriteKitのプロジェクトを作成しましょう。
ソースコード
【MyScene.h】
#import <SpriteKit/SpriteKit.h> //AVFoundationをインポートします #import <AVFoundation/AVFoundation.h> @interface MyScene : SKScene //BGM再生用AVAudioPlayer @property (nonatomic)AVAudioPlayer* bgm; @end
【MyScene.m】
#import "MyScene.h" SKAction *SEAction; //SE再生用Action SKLabelNode *myLabel; //ラベル int count = 0; //タップした回数 @implementation MyScene -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { /* Setup your scene here */ self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; myLabel.text = @"Hello, World!"; myLabel.fontSize = 30; myLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)); [self addChild:myLabel]; //SEを設定 SEAction = [SKAction playSoundFileNamed:@"sound.mp3" waitForCompletion:NO]; //BGMを設定 NSError* error; NSURL* URL = [[NSBundle mainBundle]URLForResource:@"bgm"withExtension:@".mp3"]; self.bgm = [[AVAudioPlayer alloc]initWithContentsOfURL:URL error:&error]; self.bgm.numberOfLoops = -1; [self.bgm prepareToPlay]; } return self; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { /* Called when a touch begins */ for (UITouch *touch in touches) { CGPoint location = [touch locationInNode:self]; count++; int num = count % 3; if(num == 0){ [myLabel setText:@"効果音を再生"]; [self runAction:SEAction]; }else if(num == 1){ [myLabel setText:@"BGMを再生"]; [self.bgm play]; }else if(num == 2){ [myLabel setText:@"BGMを停止"]; [self.bgm stop]; } } } -(void)update:(CFTimeInterval)currentTime { /* Called before each frame is rendered */ } @end
サンプルプロジェクト
プロジェクトを添付しておきます。
音声ファイルなど準備するのが面倒でしたらご利用ください。
【SpriteKitSound】
おまけ
今回紹介した音声再生機能があまりにも簡単すぎで記事として寂しいので、音声再生に関連した便利ツールを紹介します。
上記のサンプルプロジェクトで使用した効果音は「as3sfxr」というツールを使用して作成しました。(BGMはGarageBandのプリセットの音楽)
ファミコンっぽい音を作るにはこのツールが手軽に使えてとっても便利なので個人的にアプリを作るときによく使っています。
ちょっとしたゲームの効果音を作るにはぴったりです。
「GENERATOR」の項目ではジャンプ音や爆発音など、プリセットの音を作ってくれます。
もっと細かく音を調整するには「Manual Settings」の項目で再生スピードやビブラートなどの設定を細かくする事で、オリジナルな効果音も作れます。
ゲームを作るときプログラムを書く事ができても、何かと困るのが音の作成。
フリー素材でぴったりな効果音を探すのも大変だし、作成をお願いできる人も身近にはなかなかいません。
そんなときにこういうツールを駆使して自分で作ってしまえば、自分1人でゲームアプリを完成させられますね。