Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/46: Рейтинг темы: голосов - 46, средняя оценка - 4.74
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183

Как зациклить проигрывание музыки(звуки) в TMediaPlayer

28.10.2011, 23:42. Показов 8604. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что прописать или параметр какой выставить, чтобы объет TMediaPlayer после того как открыл файл и выполнил фун-ию Play() проигрывал файл бесконечно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2011, 23:42
Ответы с готовыми решениями:

Как зациклить проигрывание wav?
Появилась подребность в коде для бесконечного произрывания звука в wav. Как это делается в .NET даже не представляю?

Как зациклить проигрывание видео в PictureBox?
как зациклить проигрывание видео в PictureBox

Как зациклить воспроизведение музыки
Воспроизвожу mp3 файла с помощь mciSendString: mciSendString('play sound.mp3', 0, 0, 0); но проблема в том, что после...

13
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 00:22
информация к размышлению:
How do I loop an MP3 using the TMediaPlayer component?

You can use the OnNotify event of the TMediaplayer to continue to play the mp3 again after it has stopped playing successfully.

Set AutoRewind = true and put this code on the OnNotify event
Pascal
1
2
3
4
5
6
Loop : Boolean {Global Variable}
 
if MediaPlayer1.NotifyValue = nvSuccessful and Loop=true then begin
MediaPlayer1.Play;
MediaPlayer1.Notify := true;
end;
Some code you would use on a Button,
Pascal
1
2
3
4
5
procedure TForm1.StopButtonClick(Sender: TObject);
Loop := false;
MediaPlayer1.Stop;
MediaPlayer1.Notify := true;
end;
On Play Button Click
Pascal
1
2
3
4
5
procedure TForm1.PlayButtonClick(Sender: TObject);
Loop := true;
MediaPlayer1.Play;
MediaPlayer1.Notify := true;
end;
I get some error saying that the Loop boolean expression is not valid. I think I placed some of the code in the wrong place, but have re-written it several times?

You can try to declare this right after Implementation
Pascal
1
2
var
Loop : Boolean; {Global Variable}
Also you can chage the lines below
Pascal
1
2
3
4
if (MediaPlayer1.NotifyValue = nvSuccessful) and Loop then begin
MediaPlayer1.Play;
MediaPlayer1.Notify := true;
end;
That should be all you can change a bit. Otherwise should work.
с переводом проблем быть не должно.
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 02:17  [ТС]
Спасибки.

Самый простой на мой взгляд способ
C++
1
2
3
4
5
    
//перед проигрыванием 
MediaPlayer1->FileName=char("Data/Menu/Melville");
MediaPlayer1->Play();
MediaPlayer1->Notify=true;//true означает, что после выполнения очередной фун-ии TMediaPlayer , тоесть закончится Play() выполниться функция OnNotify
в Event'ах MediaPlayer
C++
1
2
3
4
void __fastcall TMain::MediaPlayer1Notify(TObject *Sender)
{
        MediaPlayer1->Play();
}
Про то как остановить, я еще не думал)))))

Добавлено через 2 минуты
Ну можно в OnNotify проверять какое нибудь значение bool типо true проигрывать или false соответственно
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 02:59
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
void __fastcall TForm2::btOpenClick(TObject *Sender)
{
  TOpenDialog* OpenMediaDialog;
  OpenMediaDialog = new TOpenDialog(this);
  OpenMediaDialog->Filter = "All Video Files (*.avi)|*.avi";
  // There are avi files in
  // C:\Documents and Settings\All Users\Documents\RAD Studio\6.0\Demos\DelphiWin32\VCLWin32\CoolStuff.
  if (OpenMediaDialog->Execute()) {
    /* Assign a file to the media player. */
    MediaPlayer1->FileName = OpenMediaDialog->FileName;
    /* Check if the file exists and is not a directory .*/
    if ((FileExists(OpenMediaDialog->FileName)) &&
        (!DirectoryExists(OpenMediaDialog->FileName))) {
      /* Open the files. */
      MediaPlayer1->Wait = true;
      MediaPlayer1->Open();
      MediaPlayer1->Play();
      /* Override automatic button controlling. */
      MediaPlayer1->EnabledButtons =
                           TButtonSet() <<
                           TMPBtnType::btPause <<
                           TMPBtnType::btStop <<
                           TMPBtnType::btPlay;
      /* Enable the Stop button. */
      btStop->Enabled = true;
      btOpen->Enabled = false;
    }
  }
  delete OpenMediaDialog;
}
//
void __fastcall TForm2::btStopClick(TObject *Sender)
{
    /* Stop and close the media. */
    MediaPlayer1->Stop();
    MediaPlayer1->Close();
    MediaPlayer1->EnabledButtons = TButtonSet();
    /* Enable the Open button again. */
    btOpen->Enabled = true;
}
// 
__fastcall TForm2::TForm2(TComponent* Owner)
  : TForm(Owner)
{
  /* Disable all the buttons.*/
  MediaPlayer1->AutoEnable = false;
  MediaPlayer1->EnabledButtons = TButtonSet();
}
//
void __fastcall TForm2::MediaPlayer1PostClick(TObject *Sender,
          TMPBtnType Button)
{
  if (Button == TMPBtnType::btStop)
    btStop->Click();
}
Цитата Сообщение от Deimon Посмотреть сообщение
OnNotify проверять какое нибудь значение bool типо true проигрывать или false соответственно
там про это есть:
Pascal
1
Loop : Boolean {Global Variable}
т.е., глобальная переменная
C++
1
bool Loop;
и про "остановить" тоже есть
Pascal
1
2
3
4
5
procedure TForm1.StopButtonClick(Sender: TObject);
Loop := false; // Loop = false;
MediaPlayer1.Stop; // MediaPlayer1->Stop;
MediaPlayer1.Notify := true; // MediaPlayer1->Notify = true;
end;
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 05:11  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
MediaPlayer1.Stop; // MediaPlayer1->Stop;
Стоит добавить, что Stop() в OnNotify нельзя использовать, т.к. виснет (теоритически (и скорее всего) из-за бесконечного цикла)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 05:24
добавка была бесполезной, учитывая, что сие происходит при событии OnStopButtonClick (см. выше) , а не при OnNotify .

Добавлено через 8 минут
и я думал, что сложности с переводом тех фрагментов быть не должно, видимо, ошибался... сказали бы ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool Loop;
//...
// это в OnNotify , я так понимаю, простите, никогда с MediaPlayer не работал :(
if (MediaPlayer1->NotifyValue==nvSuccessful && Loop==true) {
  MediaPlayer1->Play;
  MediaPlayer1->Notify = true;
}
// Notify Stop Button Click
Loop = false;
MediaPlayer1->Stop;
MediaPlayer1->Notify = true;
// On Play Button Click
Loop = true;
MediaPlayer1->Play;
MediaPlayer1->Notify = true;
//
// You can try to declare this right after Implementation
bool Loop;
// Also you can chage the lines below
if (MediaPlayer1->NotifyValue==nvSuccessful && Loop) {
  MediaPlayer1->Play;
  MediaPlayer1->Notify = true;
}
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 05:34  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
добавка была бесполезной, учитывая, что сие происходит при событии OnStopButtonClick (см. выше) , а не при OnNotify .
Да не... я комментирую для тех кто тему читать будет, чтобы не пробывали.

То что вы мне дали это больше походит на код медиа проигрывателя. Он мне был полезен, спасибо. У меня все простенько, без кнопок, просто фоновая музыка которая время от времени сама меняет композиции. Без кнопок.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 05:38
то, что в OnNotify и есть без кнопок, а остановить можно при выходе, прописав код из нажатия кнопки Стоп, например, в событие OnCloseQuerry формы, или другое событие согласно логики программы.
0
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 05:40  [ТС]
А почему везде пишется
C++
1
MediaPlayer1->Notify = true;
?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 05:57
видимо, потому, что вы имеете намерение "уведомить" проигрыватель о чем-нибудь

TCustomControl.OnNotify

OnNotify Наступает после завершения очередного метода, если свойство Notify было установлено в true. После этого события свойство Notify следует установить в true, если хотеть, чтобы произошло следующее событие OnNotify.

Ниже приведен обработчик события OnNotify медиа-плейера MediaPlayer1, в котором в метке отображается состояние мультимедийного устройства.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "filectrl.hpp"
AnsiString ModeStr[7] = {"Не готово",
"Остановлено","Воспроизведение",
"Запись","Поиск","Пауза","Открыто"};
 
void __fastcall TForm1::MediaPlayer1Notify(
TObject *Sender)
{
  Label1->Caption = "Состояние: " +
  ModeStr[MediaPlayer1->Mode];
  // Переустановка Notify,
  // чтобы событие произошло в следующий раз
  MediaPlayer1->Notify = true;
}
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 16:24  [ТС]
Цитата Сообщение от Цитата с сайта
После возникновения события OnNotify свойство Notify должно быть установлено в True, иначе будущие события OnNotify генерироваться не будут
Как я понял, они хотят сказать что после события OnNotify, переменная Notify будет автоматически выставлена в false.
Но я один раз установил Notify
C++
1
2
3
4
5
6
7
__fastcall TMain::TMain(TComponent* Owner)
    : TForm(Owner)
{
    MediaPlayer1->FileName=char("Data/Menu/Melville");
    MediaPlayer1->Play();
    MediaPlayer1->Notify=true;
}
C++
1
2
3
4
void __fastcall TMain::FormClick(TObject *Sender)
{
    if (start_menu.OnClick(mp.x,mp.y)==13) Close();
}
и музыка повторялась неоднократно. Я Обитель Зла успел посмотреть и музыка продолжала играть (где-то час). Может это в разных ОС Notify так себя ведет или перевод неточный, или логика программы проигрывателя не тчательно проработана.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 19:22
я нигде там не нашел упоминания об автоматическом установлении в false
Событие OnNotify происходит, когда Notify имеет значение True и вызван какой-либо метод элемента управления мультимедиа.
соответственно, когда Notify имеет значение false, событие OnNotify не происходит .
0
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 19:45  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
я нигде там не нашел упоминания об автоматическом установлении в false
Я именно так и понял предложение:
"После возникновения события OnNotify свойство Notify должно быть установлено в True, иначе будущие события OnNotify генерироваться не будут"

Там в примере не где не было Notify=false;
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 20:05
более понятной, наверное, была бы запись
C++
1
2
3
4
5
// чтобы событие произошло в следующий раз
if (MediaPlayer1->Notify==true) {
  Label1->Caption = "Состояние: "+
                    ModeStr[MediaPlayer1->Mode];
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2011, 20:05
Помогаю со студенческими работами здесь

Как организовать одновременное (синхронное) проигрывание музыки на разных ПК ?
Доброго времени суток. Возникла такая проблема: Имеются 2 ноутбука и один компьютер. Все это находится в одном помещение. Все...

При нажатии на CheckBox зациклить проигрывание
Можно ли при нажатии на ChekBox зациклить проигрывание. Когда нажимаешь на него песня которая была воспроизведена играет всё время, а при...

Проигрывание музыки.
Есть ли среди функций WinAPI или может быть в каких-нибудь библиотеках для Си(не Си++) функции для проигрывания музыки, желательно в...

Проигрывание музыки по очереди
Есть список треков, как проиграть их поочереди. Использую MediaPlayer и MediaPlayer.OnCompletionListener, но он выполняется когда...

Проигрывание музыки в приложении
Как сделать что бы при нажатии PictureBox воспроизводилась музыка ? Среда разработки Visual Studio 2012


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru