Иллюстрированный самоучитель по C++ Builder

Воспроизведение звука

Текст программы приведен в листинге 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();
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.