2016 ソフトウェア設計及び演習用の班Wiki

gr06::音楽モジュール

SDL基本処理

SDL初期化

//main関数内
 gtk_init (&argc , &argv);
  SDL_Init( SDL_INIT_AUDIO  );

  Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,
		MIX_DEFAULT_FORMAT, 2, 1024);

SDL終了

//cb_quit関数内
  Mix_CloseAudio();               
  SDL_Quit();                    

proj/music/music.c

music_set(int)

void music_set(int n)
{
  switch(n){
  case 0:
    main_bgm_music = Mix_LoadMUS(Music_GameOver);
    break;
  case 1:
    main_bgm_music = Mix_LoadMUS(Music_Part1_main);
    break;
 (中略)
  default:
    break;
  }
  Mix_AllocateChannels(16);        // 同時発声数を設定
  return;
}

 引数で指定された曲ファイルをロードしmain_bgm_musicに格納する。

music_play(void)

void music_play(void)
{
  Mix_PlayMusic(main_bgm_music,-1);
  return;
}

 main_bgm_musicに格納された曲ファイルを再生する。

music_quit(int)

void music_quit(void)
{
  Mix_HaltMusic();             // 曲の再生停止  
  Mix_FreeMusic(gameover);
  return;
}

 main_bgm_musicに格納された曲ファイルを停止・解放する。

music_change_template(int)

void music_change_template(int n)
{
  music_quit();
  music_set(n);
  music_play();
  return;
}

 曲ファイルの変更:必要な作業を一つの関数にまとめた。

se_set(void)

void se_set(void)  //効果音をセット
{
  se0 = Mix_LoadWAV(Se_Clear);
  (中略)
  Mix_AllocateChannels(16);
  return;
}

 使用する効果音(…wavファイル)を一斉にロードする。

se_play(int)

void se_play(int n) //番号で指定された効果音を再生
{
  switch(n){
  case 0: //クリア音
    Mix_PlayChannel( -1, se0, 0 );
    break;
  (中略)
  default:
    break;
  }
  return;
}

 引数で指定された効果音を再生する。

se_quit(void)

void se_quit(void) //セットした効果音を解放
{
  Mix_FreeChunk(se0);
  (中略)
  return;
}

 使用した効果音を解放する。

header/music.h

  • proj/music/内の関数のプロトタイプ宣言
  • #defineで曲・効果音ファイル指定(見やすいように)

担当者補足

 予めロード・再生・停止の共通ルールを作成しておき、引数を指定することでどの曲ファイルに対して一連の動作を行うかが決まる、という仕様になりました。
 引数処理に関して、BGMは一場面に1つなのでロード段階に、効果音は様々な場面で複数使用するので再生段階にそれぞれ導入することにしました。
 アドバイスをくれた海沼君や壽君に感謝です。

前ページに戻る


最終更新日:2016/07/29 18:24:01