SDL_mixer の利用 (記述中)

SDL_mixer を使うと、簡単に効果音や曲の再生が行えます。


初期化

初期化は SDL, SDL_mixer の順に行います。具体的には、

という順番です。


曲、効果音の再生

曲を鳴らしつつ、効果音を再生するサンプルを以下に示します。

SdlMixerSample.cpp

#include "delay.h"
#include <SDL_mixer.h>
#include <SDL.h>
#include <iostream>

using namespace qrk;
using namespace std;


namespace
{
  bool initializeAudio(void)
  {
    if (SDL_Init(SDL_INIT_AUDIO) < 0) {
      return false;
    }
    atexit(SDL_Quit);

    if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,
                      MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024) < 0) {
      return false;
    }
    atexit(Mix_CloseAudio);

    enum { ChannelSize = 8 };
    Mix_AllocateChannels(ChannelSize);
    // cleanup 時に Mix_AllocateChannels(0) を呼び出してクリアすべき

    return true;
  }
}


int main(int argc, char *argv[])
{
  static_cast<void>(argc);
  static_cast<void>(argv);

  if (! initializeAudio()) {
    cout << "Audio initialize: " << Mix_GetError() << endl;
  }

  // 音楽の再生
  // const char music_file[] = "music.mp3";
  // !!!

  // 効果音の再生
  // effect.wav というファイルを再生させる
  const char effect_file[] = "effect.wav";
  Mix_Chunk* chunk = Mix_LoadWAV(effect_file);
  if (! chunk) {
    cout << "Mix_LoadWAV: " << Mix_GetError() << endl;
    exit(1);
  }

  int channel_id = Mix_PlayChannel(-1, chunk, 0);

  // 効果音の再生が終わるまで待つ
  do {
    delay(100);
  } while (Mix_Playing(channel_id));

  Mix_FreeChunk(chunk);
  return 0;
}

簡単ですね。
実際に曲や効果音を鳴らすときには、リソースを管理するクラスを作ることをお勧めします。


CD-ROM のトラックを再生

!!! 説明

!!! 初期化、指定トラックの再生、というサンプル



Generated on Mon May 18 11:11:11 2009 by  doxygen 1.5.7.1