2009年04月22日

smpegをsmpegとして使って惨敗

そもそもsmpegとはSDL mpegライブラリーなのである。
うまいこと単独で複数鳴らせるかと思ったがうまくいかなかった。
wavに変換するツールとして使えるかとも思ったが仕様がよくわからず
ffmpegを使うか自前でMP3ライブラリー書いた方が速いと言う結論に至った。
まぁだからSDL_Mixerでも音楽としてだけサポートされているのだろう。
smpegの欠点はつまるところ一つの音源しか受け付けないことのようだ。

とりあえず鳴らすには

SMPEG_Info info;
SMPEG* mpeg1 = NULL ;

if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)) return(1);
screen = SDL_SetVideoMode(320, 240, 8, SDL_SWSURFACE);

mpeg1 = SMPEG_new( SOUND_FILE2, &info, 1);
SMPEG_enableaudio(mpeg1, 1);
SMPEG_setvolume(mpeg1, 60);
SMPEG_play(mpeg1);



みたいな感じで良い。SDL_INIT_AUDIOを先にinitしてもSMPEG_newで「1」が必要だ。
二つ宣言すると最初の一つ目だけが有効になる。

後片付け

if (mpeg1){
SMPEG_stop(mpeg1);
SMPEG_delete(mpeg1 );
}


infoにファイルサイズなども入っているし
SMPEG_pauseでpuaseしてSMPEG_playで再開できるし
seekやskipもある。stop時のコールバック指定もある。
SMPEG_loopは効かなかった。やり方が間違っていたのかもしれない。
それなりに組めばmpeg1とmp3に関しては
きっちりとしたプレーヤーくらいなら作れる。
ffmpegより敷居も低いから動画テクスチャーとかやりたい場合は
視野としていれるのは悪くはない。
が不確実だったり資料が少なかったりする部分が多い。
もしもSMPEG_playAudioがうまく機能したらそれでwavに変換するのも手だと思ったが
使い方が分からないし鳴らないMP3があったりするので

ffmpegをapiとしてではなくwavに変換する方法としてコマンドラインで

system("ffmpeg -i snd2.mp3 tmp.wav >/dev/null 2>&1 ");
chunk = Mix_LoadWAV("tmp.wav");
remove("tmp.wav");

等とする手もありこちらのがよっぽどましだった。

MP3の再生時はイコライザなども選択肢に入れたいがそれも無理のようだ。
簡単にSDL_Mixerを使って音楽として鳴らす以外の用法は考えてはいけないということだろう。
イコライザはともかくそのままで複数チャネルのポジショニングくらいはしたかった。

つまり音源としてMP3を使いたい場合は無理してSDL_Mixerは使う必要はないという事の様だ。
ffmpegでとりあえず鳴らせるようにして場合によってはライブラリを作るのが良いのだろう。
smpegはmpeg123をベースにしたライブラリでSDL_Mixerに使われているから
多くの環境で使えると踏んだのだがAPIの資料やサンプルもほとんどなく
時間をかけて結局何も残らなかった感じだ。



ラベル:smpeg SDL
posted by Xo_ox at 12:11| Comment(0) | クロスプラットフォーム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。