2017-07-09 9 views
0

私はSDL_Mixer(私の経験不足)に問題があります。チャンクと音楽はうまく再生され(Mix_PlayChannelとMix_PlayMusicを使用)、2つの異なるチャンクを同時に再生することは問題になりません。SDL_Mixer自体が1つのチャンクを再生していますか?

私の問題は、いくつかのchunk1を再生し、次に最初のchunk1の繰り返しを再生することです。私は素早く連続して1つのチャンクを演奏しようとしていますが、それよりもはるかに長い間隔でサウンドを繰り返し再生します。私はコンソールの出力をテストしましたが、私の演奏/ループの方法は誤りではありません。コンソールメッセージの印刷が正しいスピードでループしているのが分かります。

Mix_LoadWAV()を使用して初期化中に定期的にロードするチャンクの配列があります。私はまた、これらのチャンクを再生するために予約機能してい

Mix_Chunk *sounds[32]; 

:急速に連続して複数回(例えば、100msの遅延/ 10bpsに)単一サウンドを再生しようとすると

void PlaySound(int snd_id) 
{ 
    if(snd_id >= 0 && snd_id < 32) 
    { 
     if(Mix_PlayChannel(-1, sounds[snd_id], 0) == -1) 
     { 
      printf("Mix_PlayChannel: %s\n",Mix_GetError()); 
     } 
    } 
} 

を、私は音を与えられています10bpsで機能が呼び出されているにもかかわらず、設定された時間間隔(約500ms程度/ 2bps)で再生されます。

私は既に "Mix_AllocateChannels(16);"を使用しました。私がチャンネルを割り当てたことを確認するために(私がそれを間違って使用していることを知らせてください)、それでもアレイからの単一のチャンクが一定のレートで再生を拒否します。

どのようなアイデアや助けをいただければ幸いですか、この質問をどのように投稿したかについての批評もあります。

答えて

1

としてはSDL_Mixer(https://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_28.html)の文書で述べている: "最初無料予約されていないチャネルのための... -1"

チャンクが1.6秒(16チャンネル* 100ms)より長い場合、1.6秒後にチャンネルが使い果たされるため、チャンネルの1つが再生されるまで新しいチャンクを再生することはできません。

だから、基本的に2つのソリューションがあります:

  1. (以上:ChunkDuration秒で(秒単位)/ディレイ())より多くのチャネルを割り当て、あなたがそれを使用することができるように、
  2. ストップチャネルが。 (それを正しく行うには、-1をチャンネルとして使用するのではなく、チャンクを再生するたびに増加する変数を使用してください(チャネル数に等しいときに0に戻すことを忘れないでください)。
関連する問題