SimpleAudioEngine のカスタマイズ

4,347 views
4,089 views

Published on

Published in: Technology
0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,347
On SlideShare
0
From Embeds
0
Number of Embeds
238
Actions
Shares
0
Downloads
8
Comments
0
Likes
14
Embeds 0
No embeds

No notes for slide

SimpleAudioEngine のカスタマイズ

  1. 1. SimpleAudioEngine カスタマイズ 株式会社シュハリ  松浦 晃洋
  2. 2. 自己紹介 • 松浦 晃洋! • 株式会社シュハリ 代表取締役! • 株式会社スマートエデュケーション
 チーフエンジニア! • Cocos2d-x 開発のレシピ執筆 • • @syuhari! facebook.com/syuhari
  3. 3. リズムタップ
  4. 4. リズムオンステージ
  5. 5. SimpleAudioEngineをいじる! • BGM を同時に2つ再生 • 効果音の同時再生数を増やす • 効果音毎にボリュームを変える • ピッチを変えて再生 • BGM にシーク機能を追加
  6. 6. OpenALとは • 3Dオーディオの API • 音源とリスナを3次元空間に配置して、音が立体 的に聞こえるようにすることが可能
  7. 7. SimpleAudioEngineをいじる! • BGM を同時に2つ再生 • 効果音の再生数を増やす • 効果音毎にボリュームを変える! • ピッチを変えて再生 • BGM にシーク機能を追加
  8. 8. 効果音毎にボリューム設定 • OpenAL のゲインを使用 • ゲインとは距離減衰 • 音源からどれくらい離れているかにより音の大 きさが変わる • ドップラー効果など再現可能
  9. 9. SimpleAudioEngineをいじる! • BGM を同時に2つ再生 • 効果音の再生数を増やす • 効果音毎にボリュームを変える • ピッチを変えて再生! • BGM にシーク機能を追加
  10. 10. ピッチを変えて再生 • OpenAL のピッチを変える • ピッチとは音の高低、再生速度の違い • BGM のピッチを上げるとスーパーマリオのよ うにゲーム終盤でプレイヤにプレッシャーをか けたり
  11. 11. iOS SimpleAudioEngine.h unsigned int playEffect(const char* pszFilePath, bool bLoop, float gain, float pitch); SimpleAudioEngine_objc.m -(ALuint) playEffect:(NSString*) filePath loop:(BOOL) loop pitch:(Float32) pitch pan:(Float32) pan gain:(Float32) gain { … return [soundEngine playSound:soundId sourceGroupId:0 pitch:pitch pan:pan gain:gain loop:loop]; … }
  12. 12. Android Cocos2dxSound.java private int doPlayEffect(final String pPath, final int soundId, final boolean pLoop, float gain, float pitch) { } // play sound int streamID = this.mSoundPool.play( soundId, gain, gain, Cocos2dxSound.SOUND_PRIORITY, pLoop ? -1 : 0, pitch); …
  13. 13. SimpleAudioEngineをいじる! • BGM を同時に2つ再生 • 効果音の再生数を増やす • 効果音毎にボリュームを変える • ピッチを変えて再生 • BGM にシーク機能を追加
  14. 14. シーク機能を追加 • 指定秒数までスキップしてから再生 • 現在再生中の秒数を取得
  15. 15. iOS SimpleAudioEngine.h void setBackgroundMusicCurrentTime(float currentTime); SimpleAudioEngine_objc.m -(void) setBackgroundMusicCurrentTime:(float)currentTime { ! [as setCurrentTime:currentTime]; ! }
  16. 16. Android Cocos2dxMusic.java public void setBackgroundMusicCurrentTime(float sec) { ! … ! int msec = (int)(sec * 1000.0f); this.mBackgroundMediaPlayer.seekTo(msec); ! … ! }
  17. 17. サウンド関係の問題点 • Galaxy S4 はシークにバグがある • • • 指定した秒数からずれる ズレ方はバラバラ Nexus5 の再生の問題 • 容量の大きいファイルを再生するとおかしくなる • 長時間ストリーミング再生しているとおかしくなる
  18. 18. まとめ • リズムゲームを作るなら • iOS だけなら簡単 • Android は端末毎にかなりクセがあるので調整 にかなり時間がかかる

×