SlideShare a Scribd company logo
ゲームにおける
BGM同期
CCS/エンドレスシラフ	
  
hart
とりあえず⾃自⼰己紹介	
  
	
  
HN	
  :	
  hart	
  
千葉⼤大学電⼦子計算機研究会(CCS)	
  	
  
及び 同⼈人ゲームサークル「エンドレスシラフ」所属	
  
プログラミング担当	
  
	
  
作品:	
  
①「∀kashicverse	
  –	
  Malicious	
  Wake	
  -­‐	
  」(C83	
  ,	
  エンドレスシラフ)	
  
②「ヒメノストライカー」(C84	
  ,	
  エンドレスシラフ)	
  
③「Re;Act」(C84	
  ,	
  CCS)	
  
など。	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
BGM同期とは?	
  
	
  
	
  

・その名の通りゲームの動作を流れている⾳音楽に同期させて動かすこと	
  
	
  
・最たるものは⾳音楽ゲーム	
  
	
  
・STGでも良く⾒見見られる(敵の出現タイミング、背景の変化など)	
  
	
  
・その他RPGやACTで⾒見見られることも	
  
	
  
・⾳音楽とゲームの⼀一体感を演出したい場合は⼤大抵の場合で使える	
  
	
  
	
  
	
  
	
  
	
  
※若⼲干STG寄りな話になると思いますがご了承ください	
  
BGM同期の使い道	
  

	
  
・⾳音に合わせてノーツを叩くなど(⾳音ゲー	
  
	
  
・曲の展開に合わせた シーン切り替え	
  
                     攻撃パターン切り替え	
  
                     背景の切り替え	
  
                    etc…	
  
	
  
・敵出現タイミング、⾏行行動の同期	
  
	
  
・攻撃そのものの⾳音楽同期	
  
	
  
などなど	
  
BGM同期のタイプ分け	
  
	
  

	
  
処理の内容によって主に3パターンに分けられると思っています。	
  

	
  
①ちゃんと動くことを前提に組む	
  
	
  
②曲の位置を処理に合わせる	
  
	
  
③処理を曲の位置に合わせる	
  
	
  
	
  

基本的には①の形式で実装しているところが多いように思われます。	
  
	
  
	
  
①ちゃんと動くことを前提に組む	
  
	
  

もっとも簡単なBGM同期のやり⽅方	
  
例えば「600フレーム(10秒,60fps)に敵を出す」と決め打ちする。	
  
曲の再⽣生位置とゲームの処理が100%同期していることが前提	
  
	
  
利点	
  
・実装が楽	
  
・きちんと動作していればちゃんと同期する	
  
	
  
⽋欠点	
  
・補正処理を何も⼊入れてないのでなんらかの原因で動作fpsが落ちると	
  
  すぐに曲と合わなくなる	
  
	
  
「最悪曲と合っていなくてもいいけど、ちゃんと動いていたら合ってて
ほしいなー」という感じの処理に向く	
  
	
  
【実装してるであろう同⼈人ゲーム】	
  
東⽅方シリーズ、Refrain、怨霊など。他多数あると思われます。	
  
∀kashicverseやヒメノストライカーにも使っています。
② ⾳音楽を処理に合わせる	
  
	
  

どちらかがずれたら⾳音楽側の再⽣生を調整して補正する。	
  

(ちなみにずれる場合は処理が⾳音楽の再⽣生に追いつかなくなる場合が多い)	
  

	
  
利点	
  
・ゲーム側の処理には⼲干渉しない	
  
・補正がかかるので仮に少しずれてもそのうち戻る	
  
	
  
⽋欠点	
  
・補正のタイミングで再⽣生位置の変更、速度の変更を使うと
バレやすい(⽋欠点ってほどでも無いかもしれないが)	
  
・処理にも依るが厳密には同期しない場合がある	
  
	
  
	
  
【実装してるであろう同⼈人ゲーム】	
  
HellSinker 。あまり⾒見見たことはないです。	
  
∀kashicverseやヒメノストライカーでは使ってます。

	
  
③ 処理を⾳音楽に合わせる	
  
	
  

どちらかがずれたら処理側を⼯工夫して⾳音楽に合わせる	
  
⾳音ゲーでやれ、な処理	
  
	
  
利点	
  
・使⽤用箇所ではほぼ完全に曲と処理が同期する	
  
  そのため、処理落ちしても問題ない	
  
	
  
⽋欠点	
  
・リプレイとの相性が絶望的に悪い	
  
・処理が⾯面倒	
  
	
  
	
  
実装してるであろう同⼈人ゲーム(⾳音ゲー除く	
  
∀kashicverse。というか私達以外のゲームで⾒見見たことがない・・・	
  
実装例	
  
	
  

①ちゃんと動作していると仮定	
  

・同期させたいBGMの位置を先に調べておいてその位置で同期させ
たい動作を⾏行行う。	
  
例:曲調が変わるタイミングを調べておいてその位置で敵を出す	
  
	
  

②⾳音楽を処理に合わせる	
  

⼀一定時間ごと/⼀一定処理(スタートボタン押したり)ごとにずれてない
か調べ、ずれていたら⾳音楽の再⽣生をその位置に戻す	
  
ずれていたら⾳音楽の再⽣生を加速/減速する	
  
	
  

③処理を⾳音楽に合わせる	
  

同期位置は調べておく	
  
⾳音楽の現在の位置を取得してそれから処理を振り分ける	
  
各種計算式	
  

最後に⾳音の再⽣生位置は「サンプル」「(ミリ)秒」「フレーム」の3単位を相互
に変換して扱う場合があるのでそれぞれの関係性を⽰示しておきます。	
  
	
  
・サンプル←→秒	
  
(秒)	
  =	
  (サンプル位置)	
  ÷	
  (サンプリング周波数)	
  
	
  
(例)	
  サンプル位置132300	
  ,	
  サンプリング周波数44100Hz	
  
132300	
  ÷44100	
  =	
  3	
  (秒)	
  
	
  
・サンプル←→フレーム	
  
	
  (フレーム)=	
  (サンプル位置)	
  ÷	
  (サンプリング周波数)	
  ×	
  (フレームレート)	
  
	
  
(例)	
  サンプル位置55125,	
  サンプリング周波数44100Hz,60	
  fps	
  
55125	
  ÷	
  44100	
  ×	
  60	
  =	
  75	
  (フレーム)	
  
	
  
※サンプル	
  
サンプリング周波数ベースの時間。	
  
周波数が44100Hzなら1秒に44100ずつ値が増える	
  
	
  
※フレーム	
  
フレームレートベースの時間。60fpsなら⼀一秒に60増える	
  
以上です。	
  
	
  
ありがとうございました。

More Related Content

Viewers also liked

音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
Takaaki Ichijo
 
100円を持ってゲーセンに行こう!
100円を持ってゲーセンに行こう!100円を持ってゲーセンに行こう!
100円を持ってゲーセンに行こう!
ebifuraigon
 
「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編
Takaaki Ichijo
 
SimpleAudioEngine のカスタマイズ
SimpleAudioEngine のカスタマイズSimpleAudioEngine のカスタマイズ
SimpleAudioEngine のカスタマイズAkihiro Matsuura
 
自力でゲームのSEを生成する方法 by 「ADX2 LE」
自力でゲームのSEを生成する方法 by 「ADX2 LE」自力でゲームのSEを生成する方法 by 「ADX2 LE」
自力でゲームのSEを生成する方法 by 「ADX2 LE」
Takaaki Ichijo
 
Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」
Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」
Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」
Takaaki Ichijo
 
「ADX2 LE」Unity プラグイン クイック導入ガイド
「ADX2 LE」Unity プラグイン クイック導入ガイド「ADX2 LE」Unity プラグイン クイック導入ガイド
「ADX2 LE」Unity プラグイン クイック導入ガイド
Takaaki Ichijo
 
UE4に初めて触ってから半年で同人ゲームを作るまで
UE4に初めて触ってから半年で同人ゲームを作るまでUE4に初めて触ってから半年で同人ゲームを作るまで
UE4に初めて触ってから半年で同人ゲームを作るまで
Daisuke Mizuno
 

Viewers also liked (8)

音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
 
100円を持ってゲーセンに行こう!
100円を持ってゲーセンに行こう!100円を持ってゲーセンに行こう!
100円を持ってゲーセンに行こう!
 
「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編
 
SimpleAudioEngine のカスタマイズ
SimpleAudioEngine のカスタマイズSimpleAudioEngine のカスタマイズ
SimpleAudioEngine のカスタマイズ
 
自力でゲームのSEを生成する方法 by 「ADX2 LE」
自力でゲームのSEを生成する方法 by 「ADX2 LE」自力でゲームのSEを生成する方法 by 「ADX2 LE」
自力でゲームのSEを生成する方法 by 「ADX2 LE」
 
Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」
Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」
Cocos2d-x Talks #2 「サウンド実装のちょっとした気配りで ユーザに”快適感”を。 &サウンドミドルウェア「ADX2」のご紹介」
 
「ADX2 LE」Unity プラグイン クイック導入ガイド
「ADX2 LE」Unity プラグイン クイック導入ガイド「ADX2 LE」Unity プラグイン クイック導入ガイド
「ADX2 LE」Unity プラグイン クイック導入ガイド
 
UE4に初めて触ってから半年で同人ゲームを作るまで
UE4に初めて触ってから半年で同人ゲームを作るまでUE4に初めて触ってから半年で同人ゲームを作るまで
UE4に初めて触ってから半年で同人ゲームを作るまで
 

ゲームのBGM(音楽)同期について

  • 2. とりあえず⾃自⼰己紹介     HN  :  hart   千葉⼤大学電⼦子計算機研究会(CCS)     及び 同⼈人ゲームサークル「エンドレスシラフ」所属   プログラミング担当     作品:   ①「∀kashicverse  –  Malicious  Wake  -­‐  」(C83  ,  エンドレスシラフ)   ②「ヒメノストライカー」(C84  ,  エンドレスシラフ)   ③「Re;Act」(C84  ,  CCS)   など。                
  • 3. BGM同期とは?       ・その名の通りゲームの動作を流れている⾳音楽に同期させて動かすこと     ・最たるものは⾳音楽ゲーム     ・STGでも良く⾒見見られる(敵の出現タイミング、背景の変化など)     ・その他RPGやACTで⾒見見られることも     ・⾳音楽とゲームの⼀一体感を演出したい場合は⼤大抵の場合で使える             ※若⼲干STG寄りな話になると思いますがご了承ください  
  • 4. BGM同期の使い道     ・⾳音に合わせてノーツを叩くなど(⾳音ゲー     ・曲の展開に合わせた シーン切り替え                        攻撃パターン切り替え                        背景の切り替え                       etc…     ・敵出現タイミング、⾏行行動の同期     ・攻撃そのものの⾳音楽同期     などなど  
  • 5. BGM同期のタイプ分け       処理の内容によって主に3パターンに分けられると思っています。     ①ちゃんと動くことを前提に組む     ②曲の位置を処理に合わせる     ③処理を曲の位置に合わせる       基本的には①の形式で実装しているところが多いように思われます。      
  • 6. ①ちゃんと動くことを前提に組む     もっとも簡単なBGM同期のやり⽅方   例えば「600フレーム(10秒,60fps)に敵を出す」と決め打ちする。   曲の再⽣生位置とゲームの処理が100%同期していることが前提     利点   ・実装が楽   ・きちんと動作していればちゃんと同期する     ⽋欠点   ・補正処理を何も⼊入れてないのでなんらかの原因で動作fpsが落ちると     すぐに曲と合わなくなる     「最悪曲と合っていなくてもいいけど、ちゃんと動いていたら合ってて ほしいなー」という感じの処理に向く     【実装してるであろう同⼈人ゲーム】   東⽅方シリーズ、Refrain、怨霊など。他多数あると思われます。   ∀kashicverseやヒメノストライカーにも使っています。
  • 7. ② ⾳音楽を処理に合わせる     どちらかがずれたら⾳音楽側の再⽣生を調整して補正する。   (ちなみにずれる場合は処理が⾳音楽の再⽣生に追いつかなくなる場合が多い)     利点   ・ゲーム側の処理には⼲干渉しない   ・補正がかかるので仮に少しずれてもそのうち戻る     ⽋欠点   ・補正のタイミングで再⽣生位置の変更、速度の変更を使うと バレやすい(⽋欠点ってほどでも無いかもしれないが)   ・処理にも依るが厳密には同期しない場合がある       【実装してるであろう同⼈人ゲーム】   HellSinker 。あまり⾒見見たことはないです。   ∀kashicverseやヒメノストライカーでは使ってます。  
  • 8. ③ 処理を⾳音楽に合わせる     どちらかがずれたら処理側を⼯工夫して⾳音楽に合わせる   ⾳音ゲーでやれ、な処理     利点   ・使⽤用箇所ではほぼ完全に曲と処理が同期する     そのため、処理落ちしても問題ない     ⽋欠点   ・リプレイとの相性が絶望的に悪い   ・処理が⾯面倒       実装してるであろう同⼈人ゲーム(⾳音ゲー除く   ∀kashicverse。というか私達以外のゲームで⾒見見たことがない・・・  
  • 9. 実装例     ①ちゃんと動作していると仮定   ・同期させたいBGMの位置を先に調べておいてその位置で同期させ たい動作を⾏行行う。   例:曲調が変わるタイミングを調べておいてその位置で敵を出す     ②⾳音楽を処理に合わせる   ⼀一定時間ごと/⼀一定処理(スタートボタン押したり)ごとにずれてない か調べ、ずれていたら⾳音楽の再⽣生をその位置に戻す   ずれていたら⾳音楽の再⽣生を加速/減速する     ③処理を⾳音楽に合わせる   同期位置は調べておく   ⾳音楽の現在の位置を取得してそれから処理を振り分ける  
  • 10. 各種計算式   最後に⾳音の再⽣生位置は「サンプル」「(ミリ)秒」「フレーム」の3単位を相互 に変換して扱う場合があるのでそれぞれの関係性を⽰示しておきます。     ・サンプル←→秒   (秒)  =  (サンプル位置)  ÷  (サンプリング周波数)     (例)  サンプル位置132300  ,  サンプリング周波数44100Hz   132300  ÷44100  =  3  (秒)     ・サンプル←→フレーム    (フレーム)=  (サンプル位置)  ÷  (サンプリング周波数)  ×  (フレームレート)     (例)  サンプル位置55125,  サンプリング周波数44100Hz,60  fps   55125  ÷  44100  ×  60  =  75  (フレーム)     ※サンプル   サンプリング周波数ベースの時間。   周波数が44100Hzなら1秒に44100ずつ値が増える     ※フレーム   フレームレートベースの時間。60fpsなら⼀一秒に60増える