• SDL_mixerを追加しました

    2011年04月10日 00時32分
    時代はSDLなんでしょうか。
    最近SDLの話をよく見かける気がします。



    乗るしかない このビッグウェーブに



    SDLは音声再生にSDL_mixerを使うものらしいので追加してみました。


    SDL for D version 1.2.14.2


    次の様な単純に再生するコードのみ動作を確認しています。

    1import core.runtime;
    2import std.c.windows.windows;
    3import org.libsdl.sdl;
    4import org.libsdl.mixer;
    5
    6//--------------------------------------------------------------
    7// D言語でWindowsアプリを作るときの基本処理
    8
    9extern (Windows)
    10int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    11{
    12    void exceptionHandler(Throwable e)
    13    {
    14        throw e;
    15    }
    16
    17    int result;
    18    try
    19    {
    20        Runtime.initialize(&exceptionHandler);
    21        scope (exit) Runtime.terminate(&exceptionHandler);
    22
    23        dmain();
    24    }
    25    catch (Throwable o)
    26    {
    27        MessageBoxA(nullcast(char*)o.toString(), "Error", MB_OK | MB_ICONEXCLAMATION);
    28        result = 1;
    29    }
    30
    31    return result;
    32}
    33
    34// 画面サイズ
    35immutable int SCREEN_WIDTH = 640;
    36immutable int SCREEN_HEIGHT = 480;
    37
    38void dmain()
    39{
    40    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
    41        throw new Error("SDL_Init failed.");
    42    scope(exit) SDL_Quit();
    43
    44
    45    // SDL_Mixerの初期化と終了
    46    Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096);
    47    scope(exit) Mix_CloseAudio();
    48
    49    // ファイルの読み込みと解放
    50    Mix_Music* music = Mix_LoadMUS("hoge.ogg");
    51    scope(exit) Mix_FreeMusic(music);
    52
    53    // 再生と停止
    54    Mix_PlayMusic(music, 0);
    55    scope(exit) Mix_HaltMusic();
    56
    57
    58    SDL_Surface* screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE);
    59    if (screen is null)
    60        throw new Error("SDL_SetVideoMode failed.");
    61
    62    
    63    for (;;)
    64    {
    65        SDL_Event event;
    66        while (SDL_PollEvent(&event))
    67        {
    68            if (event.type == SDL_QUIT)
    69                return;
    70        }
    71    }
    72}



    SDL_mixer.libが例によってcoff形式でありますが、
    omf形式の物を所持していなかたので変換する必要がありました。

    そこで探してみたのですが、変換するプログラムがきちんとありました。
    digitalmars.D.announce - coffimplib tool
    COFFIMPLIB - Digital Mars

    ダウンロードはこちら (Digital Mars FTP)

    coff2omfとの違いがはっきりとはわからないのですが、
    coffimplibはインポートライブラリ専用の簡易版のようです。

    とりあえずSDL_mixer.libについては無事変換出来ました。

    みんなLinuxだからこの辺り困ってないのかな?
  • てめえ!
    ついさっきSDL_mixer.dのポインタをすべてC-StyleからD-Styleに書き換えたってのに!
    ehuto 2011年04月10日 14時45分
  • よくわからんがすまんかった。
    クロ 2011年04月10日 22時26分
  • 自分は大体いつもDLL落としてきて、
    http://www.digitalmars.com/download/freecompiler.html
    にあるimplib.exeで
    implib /system hoge.dll hoge.lib
    ってやってます。
    いただきます 2011年04月11日 02時20分
  • implibでも出来たんですね。
    DEFファイル?を自分でかかないといけないと思ってました。
    クロ 2011年04月11日 23時22分

コメントプレビュー

自分は大体いつもDLL落としてきて、
http://www.digitalmars.com/download/freecompiler.html
にあるimplib.exeで
implib /system hoge.dll hoge.lib
ってやってます。

コメントを書く

名前
本文
本文を入力してください。
Sorry. This comment is Jpanese only.
編集用パスワード 入力すると編集が行えます
管理者のみ閲覧