Cocos2d-x 勉強第5回「サウンドを鳴らしてみる」

木内智史之介(シャッチョー)
ミンカさんけっこんしてくださいおねがいします(ズザー
SEGAさん、DIVAの筐体ください(ズザー

今回の目標

いずれ弊社に発注されるであろう、iPhone向け初音ミクゲームの開発の前準備として、サウンドくらい鳴らせないようじゃお話になりません。
ここは、サウンドを鳴らさせたら世界一、というくらいのサウンド鳴らし力1を身につけておく必要があります。

作業領域の準備

前回の作業領域をそのまま活用したいと思います。

1
$ cd path/to/cocos2d-x/projects/study003taptaptap

下準備、下調べ

BGMで活用するのはこのサウンドで

http://www.youtube.com/watch?v=1dB8in_QRrw

昔の友だちとも笑顔で会えたらいいよね!

公式ドキュメント

Chapter 6 – How to Play Music and Sound Effect

ググってみたら、公式ドキュメントがヒット。
それにしてもDenshionって…。。。

このページにpew-pew-lei.wavという効果音らしきファイルが添付されておるではないか。これは「自由に使っていいぞ」というメッセージと解釈した!

さっそく組み込んでみる

BGMの組み込み

とりあえず、シーンが読み込まれたらそれに伴ってサウンドが再生されるように調整したいと思います。

Classes/HelloWorldScene.cpp@diff

1
2
3
4
5
6
7
8
9
10
11
+ #include "SimpleAudioEngine.h"

  bool HelloWorld::init()
  {
      // ...snip

+     // BGM
+     CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("honto-ha-wakatteru.mp3", true);

      return true;
  }

virtual void playBackgroundMusic ( const char * pszFilePath, bool bLoop = false )

Play background music.

  • pszFilePath: ファイルパスかFileName of T_SoundResInfo(なんだろこれ)
  • bLoop: ループするかどうか

効果音の組み込み

そもそも「BGM」と「効果音」の違いってなんだろう?
BGMは複数シーンで重複再生してもどれか一つしか再生できなくて、効果音は重複再生可能、みたいな認識でいいんですかね…?

ドラッグ、ドロップそれぞれのタイミングで効果音を鳴らすように調整してみることにします。

Classes/HelloWorldScene.cpp@diff

1
2
3
4
5
6
7
8
9
10
11
12
  bool HelloWorld::onTouchBegan(Touch* touch, Event* event)
  {
      if (sprite->isTapped(touch->getLocation())) {
+         CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav");
      }
  }
  bool HelloWorld::onTouchEnded(Touch* touch, Event* event)
  {
      if (sprite->isTapped(touch->getLocation())) {
+         CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav");
      }
  }

virtual unsigned int playEffect ( const char * pszFilePath, bool bLoop = false, float pitch = 1.0f, float pan = 0.0f, float gain = 1.0f )

Play sound effect with a file path, pitch, pan and gain.

  • pszFilePath: ファイルパス
  • bLoop: ループするかどうか(効果音普通しないよね)
  • pitch: なんだろう
  • pan: 左右のスピーカーの出力バランス[-1..1](-1が左なり)
  • gain: ボリューム(?)

動作イメージ

https://www.youtube.com/watch?v=qNRDI7uyFuM ※音が出ます

よし、世界一!

次回に向けて

次回は「動画の再生」に関してやってみたいなーと思います。
そもそもできるのか!という感じですが。

今回のソースコード

https://github.com/8823-scholar/cocos2d-x-study/tree/e36e4ab625d64ccef575e8630f4fc9c0229e4620/study003taptaptap


  1. そんなものがあるのか不明ですが