示例#1
0
文件: CDDA.cs 项目: sinshu/dtf
 /// どうせだから、追加してみました。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); // どうなっとるんや..
 }
示例#2
0
文件: CDDA.cs 项目: sinshu/dtf
/*
 *              ///	<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);
        }
示例#3
0
文件: CDDA.cs 项目: sinshu/dtf
        /// 便利そうだったので、追加してみました 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);
        }