Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Задача 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь