MinGWでSDL+SDL_mixerを使うまでのメモ

アバター
馬場自由
記事: 15
登録日時: 12年前

MinGWでSDL+SDL_mixerを使うまでのメモ

投稿記事 by 馬場自由 » 12年前

MinGW、Cygwin両環境を右往左往します。

SDLはデフォルト設定だと、コンソール出力がファイル出力にリダイレクトされるようになってる。
これをなんとかして黙らせたい。
調べた所、SDLがリダイレクトを使わないようにオプション設定を付与してビルドしなければいけないらしい。
configure走らせる時に --disable-stdio-redirectを引数に与えれば良い様子。カンタン。
ラクにできそうなので早速MinGWをターゲットに試します。(Cygwinだと現行のgcc4.xでOpenGL使うのに一手間いるので見送り

さてまずSDLのビルド。configureするとMinGWは途中で止まった。
なんでやー、と海外サイトをフラフラしてると、"SDLをビルドするならgccをver.3.xに変えなきゃコケる"とのこと。
参考:(http://www.noquarterarcade.com/using-cy ... evelopment
Cygwinでgccのバージョンを落としてSDLをビルド、事がすんだらバージョンを元に戻す、という感じ。
参考通りにCygwinでビルドしてみると、すんなりできました。

CygwinでビルドしたんだからMinGWからそのライブラリ使えるかも?と思いやってみた所、
あっさり普通に動きました。
そしてSDL_mixerを使って音をならしてみました。実際のコードはこんな感じ

CODE:

#include "Sound.h"
#include 

#define NUM_SOUNDS 2
struct sample {
    Uint8 *data;
    Uint32 dpos;
    Uint32 dlen;
} sounds[NUM_SOUNDS];

void mixaudio(void *unused, Uint8 *stream, int len)
{
    int i;
    Uint32 amount;

    for ( i=0; i len ) {
            amount = len;
        }
        SDL_MixAudio(stream, &sounds[i].data[sounds[i].dpos], amount, SDL_MIX_MAXVOLUME);
        sounds[i].dpos += amount;
    }
}

int main(int argc, char *argv[]) 
{   
  //SDL_mixerの初期化
    if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) g++ sound.cpp -lmingw32 -lSDLmain -lSDL -lSDL_mixer

これでhoge.wavの再生ができました。

MinGWだとgccのバージョン戻すの面倒くさいので、同じ問題にあたったらCygwinを経由するのが
ラクかもしれないなと思いました。

ISLe
記事: 2650
登録日時: 14年前

Re: MinGWでSDL+SDL_mixerを使うまでのメモ

投稿記事 by ISLe » 12年前

configureかmake時にオプションでコンパイラ変更できませんでしたっけ。
gcc-3/g++-3を使うように指定してやればもっと楽にできる気がしますけど。

あとMinGWでも使うなら、CygwinにポートされてるMinGWコンパイラを使うとか、gcc3なら-nocygwinオプションを指定したほうが良い気がします。
cygwinのdll使わなくなるんで。

アバター
馬場自由
記事: 15
登録日時: 12年前

Re: MinGWでSDL+SDL_mixerを使うまでのメモ

投稿記事 by 馬場自由 » 12年前

そんな機能があったんですね・・・知りませんでした。。てっきりgccインストールし直さなきゃいけないモノかと
cygwinのdll使わないってことは、exeにdllのコードが静的リンクされる感じなんですかね?プログラムのサイズはリソース類に比べれば十分小さいからそっちのほうが配布する時ラクなのかなぁ。

ISLe
記事: 2650
登録日時: 14年前

Re: MinGWでSDL+SDL_mixerを使うまでのメモ

投稿記事 by ISLe » 12年前

make CC=gcc-3 CPP=g++-3
という感じでいけそうな気がしますが、未確認なので問題があるかもしれません。

cygwinのdllを使わないというのは、静的リンクではなくて、言葉通り、使わなくなるという意味です。
UNIXライクなエミュレーション機能が無くなります。
MinGWはウィンドウズネイティブなので、むしろ混ぜて使うのは危険です。

アバター
馬場自由
記事: 15
登録日時: 12年前

Re: MinGWでSDL+SDL_mixerを使うまでのメモ

投稿記事 by 馬場自由 » 12年前

なるほど、双方の機能がごっちゃになると確かに厄介そうですね・・・情報ありがとうございます。。