Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 383

/ вопрос решён /

Здравствуйте, эксперты!
Создаю на Delphi эдакий комикс: форма содержит иллюстрации и текст. В конце сюжетная развилка. В зависимости от того, что выбрал, открывается новая форма с продолжением сюжета. Хотелось бы все это оформить музыкой. В связи с этим вопрос: Как сделать, чтобы музыка стартовала одновременно с запуском .ехе файла, играла вне зависимости от открытия той или иной формы и начиналась по новой, сразу после окончания трека?
Спасибо!

Александр7 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Александр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

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™

min@y™ (статус: Доктор наук), 5 июля 2010, 18:25 [#2]:

Могу посоветовать проигрывать звук синхронно в параллельном потоке. Могу дать пример реализации.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
padonak

padonak (статус: Посетитель), 5 июля 2010, 18:34 [#3]:

min@y™: давай пример... я тоже глянуть хочу...
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

Александр7 (статус: Посетитель), 6 июля 2010, 14:29 [#6]:

Спасибо большое всем участникам за советы! Разобрался

4 июля 2012, 13:13: Статус вопроса изменён на решённый (изменил модератор DNK)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.