# HG changeset patch # User Ritor1 # Date 1411620016 -21600 # Node ID 6dcc6e8dd0416c6f82fb620c0cbc51a7db68036b # Parent 9b96a51011fbcd2f123b24723e742f2965162262 . diff -r 9b96a51011fb -r 6dcc6e8dd041 Media/Audio/AudioCD.cpp --- a/Media/Audio/AudioCD.cpp Thu Sep 25 10:39:49 2014 +0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -#define _CRTDBG_MAP_ALLOC -#include -#include -#define _CRT_SECURE_NO_WARNINGS - -#include -#include "AudioCD.h" -#include "Engine/mm7_data.h" -#include "Engine/Log.h" -//#include "OSAPI.h" -#include -//char в wchar_t -bool char2wchar_t(char *str1, wchar_t *str2) -{ - std::wstringstream st; - st << str1; - return !(st >> str2).fail(); -}; -class CDaudio *CD_Audio; - -void CDaudio::CDRomOpen(bool bOpenDrive, char *drive) -{ - DWORD flags; - MCIERROR err; - wchar_t *wStr = new wchar_t; - - char2wchar_t(drive,wStr); - open.lpstrDeviceType = (LPCWSTR)(DWORD)MCI_DEVTYPE_CD_AUDIO; - open.lpstrElementName = (LPCWSTR)wStr; - - flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID; - - if (!mciSendCommand(0, MCI_OPEN, flags, (DWORD) &open)) - { - // The device opened successfully; get the device ID. - MCI_STATUS_PARMS mciStatusParms; - mciStatusParms.dwItem = MCI_STATUS_READY; - if (mciSendCommand(open.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)&mciStatusParms)) - { - Log::Warning(L"CD device is not ready"); - return; - } - // Set the time format to minute/second/frame (MSF) format. - mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF; - flags = MCI_SET_TIME_FORMAT; - if ( mciSendCommand(open.wDeviceID, MCI_SET, flags, (DWORD)&mciSetParms)) - { - mciSendCommand(open.wDeviceID, MCI_CLOSE, 0, NULL); - Log::Warning(L"audio time format error"); - return; - } - // Get the number of tracks; - // limit to number that can be displayed (20). - mciStatusParms.dwItem = MCI_STATUS_NUMBER_OF_TRACKS; - if (mciSendCommand(open.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)&mciStatusParms)) - { - Log::Warning(L"No audio tracks"); - return; - } - CD_Audio->number_of_tracks = mciStatusParms.dwReturn;//количество треков - - for ( unsigned int i = 0; i < CD_Audio->number_of_tracks; i++) - { - mciStatusParms.dwTrack = i + 1; - mciStatusParms.dwItem = MCI_STATUS_LENGTH; - if ( mciSendCommand(open.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM + MCI_TRACK, (DWORD)&mciStatusParms)) - { - Log::Warning(L"audio track is corrupt"); - return; - } - CD_Audio->tracks[i].track_length = mciStatusParms.dwReturn;//длина трека - - // For each track, get and save the starting location - mciStatusParms.dwItem = MCI_STATUS_POSITION; - if ( mciSendCommand(open.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK, (DWORD)(LPVOID) &mciStatusParms)) - { - mciSendCommand(open.wDeviceID, MCI_CLOSE, 0, NULL); - return; - } - CD_Audio->tracks[i].position = mciStatusParms.dwReturn; - - mciStatusParms.dwItem = MCI_CDA_STATUS_TYPE_TRACK; - mciSendCommand(open.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK, (DWORD)&mciStatusParms); - CD_Audio->tracks[i].track_type = mciStatusParms.dwReturn;// MCI_CDA_TRACK_AUDIO = 1088, MCI_CDA_TRACK_OTHER = 1089 - - CD_Audio->tracks[i].playing_time_minute = MCI_MSF_MINUTE(CD_Audio->tracks[i].track_length); - CD_Audio->tracks[i].playing_time_second = MCI_MSF_SECOND(CD_Audio->tracks[i].track_length); - - } - - /* - MCI_PLAY_PARMS playParams; - MCIDEVICEID devID = open.wDeviceID; - playParams.dwCallback = 0; - playParams.dwFrom = 0; - playParams.dwTo = 0; - err = mciSendCommand(devID, MCI_PLAY, (DWORD)MCI_WAIT, (DWORD)(LPVOID)&playParams ); - if ( err ) - __debugbreak();*/ - } -} - -void CDaudio::CDAudioPlay(int TrackID) -{ - DWORD flags; - - - - //DWORD lengthTrack = LengthTrack(TrackID); - mciPlayParms.dwFrom = MCI_MAKE_TMSF(TrackID, 0, 0, 0); - // mciPlayParms.dwTo = MCI_MAKE_TMSF(TrackID, CD_Audio->tracks[TrackID].playing_time_minute, - //CD_Audio->tracks[TrackID].playing_time_second, 0); - flags = MCI_FROM;// | MCI_TO; - if (mciSendCommand(open.wDeviceID, MCI_PLAY, flags, (DWORD)&mciPlayParms)) - { - Log::Warning(L"audio track is corrupt"); - return; - } -} \ No newline at end of file diff -r 9b96a51011fb -r 6dcc6e8dd041 Media/Audio/AudioCD.h --- a/Media/Audio/AudioCD.h Thu Sep 25 10:39:49 2014 +0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -#define WIN32_LEAN_AND_MEAN -#include - -#include -//#pragma comment(lib, "winmm.lib") -struct CDAudioTrack -{ - int track_length; - int track_type; - int playing_time_minute; - int playing_time_second; - int position; -}; - -class CDaudio -{ - private: - MCI_OPEN_PARMS open; - MCI_SET_PARMS mciSetParms; - MCI_PLAY_PARMS mciPlayParms; - int number_of_tracks; - CDAudioTrack tracks[20]; - - public: - - CDaudio() - { - ZeroMemory(&open, sizeof(open)); - number_of_tracks = 0; - memset(&tracks, 0, sizeof(CDAudioTrack) * 20); - } - - void CDRomOpen(bool bOpenDrive, char *drive); - void CDAudioPlay(int TrackID); -}; -extern class CDaudio *CD_Audio; \ No newline at end of file