Воспроизведение звука
Текст программы приведен в листинге 4.3. Следует обратить внимание на событие Notify, которое может генерировать MediaPiayer. Событие Notify возникает в момент изменения состояния плеера при условии, что значение свойства Notify равно true. В рассматриваемой программе событие Notify используется для обнаружения факта открытия CD-дисковода пользователем.
Листинг 4.3. Проигрыватель компакт дисков.
#define Webdings //на кнопках плеера стандартные символы, // изображение которых взято из шрифта Webdings #ifdef Webdings // "текст" на кнопках при использовании // шрифта Webdings #define PLAY "4" #define STOP "<" #define PREVIOUS "9" #define NEXT ":" #else // текст на кнопках при использовании // обычного шрифта, например, Arial #define PLAY "Play" #define STOP "Stop" #define PREVIOUS "Previous" #define NEXT "Next" #endif // эти макросы обеспечивают перевод интервала времени, // выраженного в миллисекундах в минуты и секунды #define MINUTE(ms) ((ms/1000)/60) #define SECOND,(ms) ((ms/1000) %60) // выводит в поле Label 1 информацию о текущем треке void __fastcall TForml::TrackInfo() { int ms; // время звучания трека, мсек AnsiString st; Track = MCI_TMSF_TRACK(MediaPlayer › Position); MediaPlayer › TimeFormat = tfMilliseconds; ms = MediaPlayer-XTrackLength[Track]; MediaPlayer › TimeFormat = tfTMSF; st = "Трек "+ IntToStr(Track); st = st + ". Длительность "+ IntToStr(MINUTE(ms)); st = st + ":" + IntToStr(SECOND(ms)); Label1 › Caption = st; } void __fastcall TForml::FormCreate(TObject *Sender) { Button1 › Caption = PLAY; Button2 › Caption = PREVIOUS; Button3 › Caption = NEXT; MediaPlayer › Notify = true; // разрешить событие Notify } // изменение состояния плеера void __fastcall.TForml::MediaPlayerNotifу(TObject *Sender) { switch (MediaPlayer › Mode) { case mpOpen: // пользователь открыл дисковод ( Button1 › Enabled = false; Button1 › Caption = PLAY; Button1 › Tag = 0; Button2 › Enabled = false; Button3 › Enabled = false; Label2 › Caption = "00:00"; /* по сигналу от таймера будем проверять состояние дисковода */ Timer › Enabled = True; } } MediaPlayer › Notify = true; } // щелчок на кнопке Play/Stop void _fastcall TForml::ButtonlClick(TObject *Sender) { if (Buttonl-XTag = 0) { // щелчок на кнопке Play MediaPlayer › Play(); Buttonl › Caption = STOP; Buttonl › Hint = "Стоп"; Buttonl › Tag = 1; Button3 › Enabled = true; // доступна кнопка "следующий трек" MediaPlayer › Notify = true; Timer › Enabled = true; Tracklnfо(); } else { // щелчок на кнопке Stop Buttonl › Caption = PLAY; Buttonl › Hint = "Воспроизведение"; Buttonl › Tag = 0; MediaPlayer › Notify = true; MediaPlayer › Stop();