SoundクラスのLoad(string filename,int ch)のソースで
else if (ch>=0 && ch<=8) result = LoadChunk(filename,ch-1);
となっているので、チャンネルに1を指定した場合にLoadChunkで0番を指定したことになってしまう。ということで、次のように修正。
else if (ch>=0 && ch<=8) result = LoadChunk(filename,ch);
チャンネルに2以上を指定した場合などに、Play()を呼ぶと戻り値がSdlErrorとなってしまう。
PlayChunk()のソースでSDL.Mix_PlayChannelを読んでいる部分、
return SDL.Mix_PlayChannel(ch , chunk , loopflag) == 0 ? YanesdkResult.NoError : YanesdkResult.SdlError; return SDL.Mix_PlayChannel(chunkChannel-1, chunk, loopflag) == 0 ? YanesdkResult.NoError : YanesdkResult.SdlError;
どうやら、SDL.Mix_PlayChannelの戻り値はチャンネル番号らしい(未確認)ので、以下のように修正。
return SDL.Mix_PlayChannel(ch , chunk , loopflag) == ch ? YanesdkResult.NoError : YanesdkResult.SdlError; return SDL.Mix_PlayChannel(chunkChannel-1, chunk, loopflag) == chunkChannel-1 ? YanesdkResult.NoError : YanesdkResult.SdlError;
あと、チャンネル番号に0を指定しておまかせで再生したとき、再生停止を頻繁に繰り返していると、停止できなくなったり、鳴っているのにIsPlaying()がfalseを返してしまうことがある。内部のチャンク情報が食い違ってしまうらしいが、なにが原因なのかは調査中。