| 
| 
 | Вопрос # 4 383/ вопрос решён / | 
 |  Здравствуйте, эксперты!Создаю на Delphi эдакий комикс: форма содержит иллюстрации и текст. В конце сюжетная развилка. В зависимости от того, что выбрал, открывается  новая форма с продолжением сюжета. Хотелось бы все это оформить музыкой. В связи с этим вопрос: Как сделать, чтобы музыка стартовала одновременно с запуском .ехе файла, играла вне зависимости от открытия той или иной формы и начиналась по новой, сразу после окончания трека?
 Спасибо!
 
|  |   Вопрос задал: Александр7 (статус: Посетитель)Вопрос отправлен: 5 июля 2010, 17:16
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Егор Здравствуйте, Александр7!
 У вас же будет главная форма? Её всё равно не закрывают - иначе будет выход из программы. Поэтому кладём туда компонент MediaPlayer. Прописываем туда:
 AutoEnable - true, AutoOpen - true, AutoRewind - true, FileName - имя файла, который должен проигрываться, Visible - false (чтобы компонент не был виден).
 Теперь в событие формы FormCreate прописывае команду воспроизведения звука:
 
 procedure TForm1.FormCreate(Sender: TObject);
begin
  MediaPlayer1.Play;
end;Осталось зациклить воспроизведение - указываем обработчик Notify для медиаплеера - этот обработчик будет вызываться каждый раз, когда будет заканчиваться музыка (вообще то он вызывается не только при этом событии, но нам это не важно): 
 procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  MediaPlayer1.Play;
end;Да. кстати, если обработчик создания формы не задействован, то можно оба обработчика свести в один. Но это уже на ваш вкус. :) 
 
 Второй вариант - можно воспользоваться функцией WinAPI PlanSound. Минусы - можно играть только wav. Плюсы - простая реализация.
 Подключаем модуль mmsystem и включаем музыку там, где нам надо:
 
 uses
  ... mmsystem;
...
  PlaySound('G:\music\Aqua\GoodGuys.mp3', 0, SND_ASYNC or SND_LOOP);Параметр SND_ASYNC говорит о том, что проигрываться музыка будет асинхронно (т.е. запустил и забыл - она сама параллельно будет играть), а параметр SND_LOOP отвечает за то, чтобы музыка зациклилась.
 
|  | Ответ отправил: Егор (статус: 10-ый класс)Время отправки: 5 июля 2010, 18:13
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 6 июля 2010, 14:29; участников в обсуждении: 4. 
|   | padonak (статус: Посетитель), 5 июля 2010, 17:45 [#1]:Александр7: ну можно вот так: 
 берёшь компонент TMediaPlayer и в событии OnShow формы прописываешь:
 
 procedure TForm1.FormShow(Sender: TObject);
 
 begin
 
 MediaPlayer1.FileName := 'путь к файлу';
 MediaPlayer1.Open;
 MediaPlayer1.Play;
 
 end;
 
 А что до "начиналась по новой", то кинь таймер, поставь интервал размером с длинну твоей песни и пропиши:
 
 procedure TForm1.Timer1Timer(Sender: TObject);
 
 begin
 
 MediaPlayer1.Stop;
 MediaPlayer1.Play;
 
 end;
 
 Вот где то так... знаю что убого, зато просто...
   |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 18:25 [#2]:Могу посоветовать проигрывать звук синхронно в параллельном потоке. Могу дать пример реализации. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | padonak (статус: Посетитель), 5 июля 2010, 18:34 [#3]:min@y™: давай пример... я тоже глянуть хочу... |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 19:06 [#4]:Пример с исходниками тут. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Ерёмин А.А. (статус: *Администратор), 6 июля 2010, 12:35 [#5]: Цитата (Егор): procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  MediaPlayer1.Play;
end;Правильнее так:
 
 procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  if MediaPlayer1.NotifyValue = nvSuccessful then
    MediaPlayer1.Play;
end; |  
|   | Александр7 (статус: Посетитель), 6 июля 2010, 14:29 [#6]:Спасибо большое всем участникам за советы! Разобрался |  4 июля 2012, 13:13: Статус вопроса изменён на решённый (изменил модератор DNK) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |