Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет мой.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
4.46 Mб
Скачать

Задача 36.Compact Disk Player (версия 1)

Программа Compact Disk Player (Рис. 43) позволяет прослушать компактдиск. После запуска или после того, как в дисковод будет вставлен компакт-диск, в окне программы отображается количество треков диска и общее время звучания CD, в процессе воспроизведения — номер воспроизводимого трека.

Рис 43

Вывод:В этой программе мы научились воспроизводить с помощью программы музыку с CD- дискеты.

Листинг

// картинкидлякнопки Play/Stop Graphics::TBitmap *bmPlay; // Play Graphics::TBitmap *tmStop; // Stop

_fastcall TForml::TForml(TComponent* Owner) : TForm(Owner)

Мультимедиа 143

{

fcmPlay = new Graphics::TBitmap(); hmStop = new Graphics::TBitmap();

// загрузитькартинкидлякнопки Play/Stop fcmPlay->LoadFromResourceID((int)HInstance,101); fcmStop->LoadFromResourceID((int)HInstance,102); // отобразитькартинку SpeedButton2->Glyph->Assign(bmPlay); } I

void fastcall TForml::FormCreate(TObject *Sender) { MediaPlayer->Notify = true; // разрешитьсобытие Notify

// эти макросы обеспечивают перевод интервала времени // выраженного в миллисекундах, в минуты и секунды ^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->Positicn);

MediaPlayer-XFimeFonnat = tfMilliseconds; ms = MediaPlayer->TrackLength[Track]; MediaPlayer->TimeFormat = tfTMSF;

st = IntToStr(SECOND(ms)); if ( st.LengthO •• 1)

144 Часть 1. Примеры и задачи

st = "О" + st;

st = "Трек "+ IntToStr(Track) + ". Длительность "+ IntToStr(MINUTE(ms)} + ":" + st;

Labell->Caption = st;

}

// изменениесостоянияплеера void fastcall TForml::MediaPlayerNotify(TObject *Sender) { switch ( MediaPlayer->Mode ) { case mpOpen: // пользовательоткрылдисковод { SpeedButtonl->Enabled = false; SpeedButton2->Glyph->Assign(bmPlay); SpeedButton2->Tag = 0; SpeedButton3->Enabled = false; Label2->Caption = "00:00";

/* по сигналу от таймера будем проверять состояние дисковода */ Timer->Enabled = True;

}

} MediaPlayer->Notify = true;

// сигнал от таймера: вывести номер трека // и время воспроизведения void fastcall TForml::TimerTimer(TObject *Sender) { int trk; // трек

Мультимедиа 745

int min, sec; // время AnsiString st;

if ( MediaPlayer->Mode == mpPlaying ) // Воспроизведение { // получитьномервоспроизводимоготрекаи trk = MCI_TMSF_TRACK(MediaPlayer->Position);

if ( trk != Track ) // произошла смена трека

{

Tracklnfо(); Track = trk; if ( Track > 1 ) SpeedButtonl->Enabled = true; // доступнакнопка // "пред.трек" if ( Track == MediaPlayer->Tracks) SpeedButton3->Enabled = false; // кнопка // "след.трек" // недоступна

// выводинформацииовоспроизводимомтреке min = MCI_TMSF_MINUTE(MediaPlayer->Position); sec = MCI_TMSF_SECOND(MediaPlayer->Position); st.printf("%d:%.2d",min,sec); Label2->Caption = st; return;

/* Если дисковод открыт или в нем нет AudioCD, то Mode == mpOpen. Ждем диск, т.е. до тех пор пока не будет Mode == mpStopped + кол-во треков > 1 */ if ( (MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks > 1) )

146 Часть 1. Примерыизадачи

{

// дисквставлен Timer->Enabled = false; SpeedButton2->Enabled = true,-; SpeedButton2->Tag = 0; SpeedButton3->Enabled = true; MediaPlayer->Notify = true;

// получить информацию о времени звучания CD MediaPlayer->TimeFormat = tfMilliseconds;

int ms = MediaPlayer->Length; AnsiString st = "Audio CD. Времязвучания: ";

st = st + IntToStr(MINUTE(ms)); st = st + ":" + IntToStr(SECOND(ms)); Labell->Caption = st;

MediaPlayer->TimeFormat = tfTMSF; Labell->Visible = true; Track = 0; return;

// дисководоткрытиливдисководене AudioCD if (( MediaPlayer->Mode == mpOpen ) || (MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks == 1)) { Labell->Caption = "Вставьте AudioCD" ,if ( Labell->Visible ) Labell->Visible = false; else Labell->Visible = true;

Мультимедиа 147

// пользовательзакрылокнопрограммы

void fastcall TForml::FormClose(TObject *Sender,

TCloseAction &Action)

{

MediaPlayer->Stop();

MediaPlayer->Close();

// предыдущийтрек

void fastcall TForml::SpeedButtonlClick(TObject *Sender)

{

MediaPlayer->Previous(); //в начало текущего трека

MediaPlayer->Previous(); // в начало предыдущего трека

if ( MCI_TMSF_TRACK(MediaPlayer->Position) == 1 )

SpeedButtonl->Enabled = false;

if ( ! SpeedButton3->Enabled )

SpeedButton3->Enabled = true,

TracklnfoO ;

Label2->Caption = "0:00" ;

// следующийтрек

void fastcall TForml::SpeedButton3Click(TObject *Sender)

{

MediaPlayer->Next();

// если перешли к последнему треку, то кнопку

// Next сделатьнедоступной if ( MCI_TMSF_TRACK(MediaPlayer->Position) ==

MediaPlayer->Tracks )

SpeedButton3->Enabled = false,

if (!SpeedButtonl->Enabled ) SpeedButtonl->Enabled = true;

Tracklnfо();

Label2->Caption = "0:00";

148 Часть 1. Примеры и задачи

// щелчок на кнопке Play/Stop void fastcall TForml::SpeedButton2Click(TObject *Sender) { if ( SpeedButton2->Tag == 0 ) { // щелчок на кнопке Play MediaPlayer->Play(); SpeedButton2 ->Glyph->Ass ign (bmStop) ; SpeedButton2->Hint = "Стоп"; SpeedButton2->Tag = 1; //SpeedButton3~>Enabled - true; // доступна кнопка // "следующий трек" MediaPlayer->Notify = true; Timer->Enabled = true; Tracklnfо(); } else { // щелчок на кнопке Stop SpeedButton2->Glyph->Assign(bmPlay); SpeedButton2->Hint = "Воспроизведение"; SpeedButton2->Tag = 0; MediaPlayer->Notify = true; MediaPlayer->Stop(); Timer->Enabled = false,