Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Задача 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,
Популярное: |
Последнее изменение этой страницы: 2017-03-08; Просмотров: 529; Нарушение авторского права страницы