最近SDLの話をよく見かける気がします。
乗るしかない このビッグウェーブに
SDLは音声再生にSDL_mixerを使うものらしいので追加してみました。
SDL for D version 1.2.14.2
次の様な単純に再生するコードのみ動作を確認しています。
1 | import core.runtime; |
---|---|
2 | import std.c.windows.windows; |
3 | import org.libsdl.sdl; |
4 | import org.libsdl.mixer; |
5 | |
6 | //-------------------------------------------------------------- |
7 | // D言語でWindowsアプリを作るときの基本処理 |
8 | |
9 | extern (Windows) |
10 | int 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(null, cast(char*)o.toString(), "Error", MB_OK | MB_ICONEXCLAMATION); |
28 | result = 1; |
29 | } |
30 | |
31 | return result; |
32 | } |
33 | |
34 | // 画面サイズ |
35 | immutable int SCREEN_WIDTH = 640; |
36 | immutable int SCREEN_HEIGHT = 480; |
37 | |
38 | void 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に書き換えたってのに!
http://www.digitalmars.com/download/freecompiler.html
にあるimplib.exeで
implib /system hoge.dll hoge.lib
ってやってます。
DEFファイル?を自分でかかないといけないと思ってました。