Esempio n. 1
0
    public void CDAudio_GetAudioDiskInfo()
    {
        _IsValidDisc = false;

        Mci.MCI_STATUS_PARMS sp = default(Mci.MCI_STATUS_PARMS);
        sp.dwItem = Mci.MCI_STATUS_READY;
        int ret = Mci.Status(_DeviceID, Mci.MCI_STATUS, Mci.MCI_STATUS_ITEM | Mci.MCI_WAIT, ref sp);

        if (ret != 0)
        {
            game_engine.Con_DPrintf("CDAudio: drive ready test - get status failed\n");
            return;
        }
        if (sp.dwReturn == 0)
        {
            game_engine.Con_DPrintf("CDAudio: drive not ready\n");
            return;
        }

        sp.dwItem = Mci.MCI_STATUS_NUMBER_OF_TRACKS;
        ret       = Mci.Status(_DeviceID, Mci.MCI_STATUS, Mci.MCI_STATUS_ITEM | Mci.MCI_WAIT, ref sp);
        if (ret != 0)
        {
            game_engine.Con_DPrintf("CDAudio: get tracks - status failed\n");
            return;
        }
        if (sp.dwReturn < 1)
        {
            game_engine.Con_DPrintf("CDAudio: no music tracks\n");
            return;
        }

        _IsValidDisc = true;
        _MaxTrack    = (byte)sp.dwReturn;
    }
Esempio n. 2
0
    public void Play(byte track, bool looping)
    {
        if (!_IsEnabled)
        {
            return;
        }

        if (!_IsValidDisc)
        {
            CDAudio_GetAudioDiskInfo();
            if (!_IsValidDisc)
            {
                return;
            }
        }

        track = _Remap[track];

        if (track < 1 || track > _MaxTrack)
        {
            game_engine.Con_DPrintf("CDAudio: Bad track number {0}.\n", track);
            return;
        }

        // don't try to play a non-audio track
        Mci.MCI_STATUS_PARMS sp = default(Mci.MCI_STATUS_PARMS);
        sp.dwItem  = Mci.MCI_CDA_STATUS_TYPE_TRACK;
        sp.dwTrack = track;
        int ret = Mci.Status(_DeviceID, Mci.MCI_STATUS, Mci.MCI_STATUS_ITEM | Mci.MCI_TRACK | Mci.MCI_WAIT, ref sp);

        if (ret != 0)
        {
            game_engine.Con_DPrintf("MCI_STATUS failed ({0})\n", ret);
            return;
        }
        if (sp.dwReturn != Mci.MCI_CDA_TRACK_AUDIO)
        {
            game_engine.Con_Printf("CDAudio: track {0} is not audio\n", track);
            return;
        }

        // get the length of the track to be played
        sp.dwItem  = Mci.MCI_STATUS_LENGTH;
        sp.dwTrack = track;
        ret        = Mci.Status(_DeviceID, Mci.MCI_STATUS, Mci.MCI_STATUS_ITEM | Mci.MCI_TRACK | Mci.MCI_WAIT, ref sp);
        if (ret != 0)
        {
            game_engine.Con_DPrintf("MCI_STATUS failed ({0})\n", ret);
            return;
        }

        if (_IsPlaying)
        {
            if (_PlayTrack == track)
            {
                return;
            }
            Stop();
        }

        Mci.MCI_PLAY_PARMS pp;
        pp.dwFrom     = Mci.MCI_MAKE_TMSF(track, 0, 0, 0);
        pp.dwTo       = (sp.dwReturn << 8) | track;
        pp.dwCallback = _Form.Handle;
        ret           = Mci.Play(_DeviceID, Mci.MCI_PLAY, Mci.MCI_NOTIFY | Mci.MCI_FROM | Mci.MCI_TO, ref pp);
        if (ret != 0)
        {
            game_engine.Con_DPrintf("CDAudio: MCI_PLAY failed ({0})\n", ret);
            return;
        }

        _IsLooping = looping;
        _PlayTrack = track;
        _IsPlaying = true;

        if (_Volume == 0)
        {
            Pause();
        }
    }