/// どうせだから、追加してみました。by まこ unsafe private int getTracks_() { if (cdrom != IntPtr.Zero) { if (SDL.CD_INDRIVE(SDL.SDL_CDStatus(cdrom))) { SDL.SDL_CD *cd = (SDL.SDL_CD *)cdrom; return(cd->numtracks); } } return(-1); // どうなっとるんや.. }
/* * /// <summary>指定したトラックを再生します。</summary> * /// <remarks> * /// トラックナンバーは0~ * /// </remarks> * public YanesdkResult PlayTrack(int track) { * if (cdrom == IntPtr.Zero) return YanesdkResult.PreconditionError; // not opened * if ( SDL.CD_INDRIVE(SDL.SDL_CDStatus(cdrom)) ) { * int result = SDL.SDL_CDPlayTracks(cdrom, track, 0, track+1, 0); * if (result != 0) { * return YanesdkResult.SdlError; * } * } * return YanesdkResult.NoError; * } */ // ↑は、GetTracks() / 2 までしか再生できない。 /// 正しく動くように、修正したバージョン by まこ /// /// <summary>指定したトラックを再生します。</summary> /// <remarks> /// トラックナンバーは0~ /// </remarks> public YanesdkResult PlayTrack(int track) { if (cdrom == IntPtr.Zero) { return(YanesdkResult.PreconditionError); // not opened } if (SDL.CD_INDRIVE(SDL.SDL_CDStatus(cdrom))) { #region まこコメント /// /// SDL_CDPlayTracks(cdrom, start_track, start_frame, ntracks, nframes); /// /// start_tracks : 開始トラック /// start_frame : 開始フレーム /// ntracks : 再生トラック数 /// nframes : 再生フレーム数 /// /// で、ntracksには、終了トラックではなく、再生トラック数を入れる。 /// だから、track + 1では無く、通常1を入れる。 /// 多分、SDLのサンプルを見て、 /// /// <CODE> /// /* CD 全体を再生 */ /// if (CD_INDRIVE(SDL_CDStatus(cdrom))) /// SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); /// /// /* 最初のトラックを再生 */ /// if (CD_INDRIVE(SDL_CDStatus(cdrom))) /// SDL_CDPlayTracks(cdrom, 0, 0, 1, 0); /// </CODE> /// /// だから、任意のトラックを再生するには、 /// /// <CODE> /// if (CD_INDRIVE(SDL_CDStatus(cdrom))) /// SDL_CDPlayTracks(cdrom, track, 0, track + 1, 0); /// </CODE> /// /// だと思ったのではないかと(^^; #endregion int result = SDL.SDL_CDPlayTracks(cdrom, track, 0, 1, 0); if (result != 0) { return(YanesdkResult.SdlError); } } return(YanesdkResult.NoError); }
/// 便利そうだったので、追加してみました by まこ /// <summary>指定したトラックから、指定したトラック数再生します。</summary> /// <remarks> /// トラックナンバーは0~ /// /// [track, track + n)を再生します。 /// /// track + n がトラック数を超えていたら、再生に失敗します。 /// そのときは、InvalidParameterを返していますが、 /// あれだったら、適当に変えてください。 /// </remarks> public YanesdkResult PlayTracks(int track, int n) { if (cdrom == IntPtr.Zero) { return(YanesdkResult.PreconditionError); // not opened } if (SDL.CD_INDRIVE(SDL.SDL_CDStatus(cdrom))) { int result = SDL.SDL_CDPlayTracks(cdrom, track, 0, n, 0); if (result != 0) { if (n + track > GetTracks()) { return(YanesdkResult.InvalidParameter); } return(YanesdkResult.SdlError); } } return(YanesdkResult.NoError); }