Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11655
Последний выпуск: 19.06.2015

Как зациклить воспроизведение музыки

890
08 декабря 2015 года
Sash1k
115 / / 27.04.2007
Воспроизвожу mp3 файла с помощь mciSendString:
 
Код:
mciSendString('play sound.mp3', 0, 0, 0);
но проблема в том, что после достижения конца файла, проигрывание файла прекращается, подскажите, как зациклить его воспроизведение, что бы при окончание файла, он начинался проигрываться сначала?
6
08 декабря 2015 года
@pixo $oft
3.4K / / 20.09.2006
Видимо, этим инструментарием — никак. Используй другие функции, которые позволят отследить окончание воспроизведения, либо читай внимательно и ищи такие возможности там.

Upd.: хотя вот что нашёл я, лишь немного почитав информацию по MCI. Почему автор не мог сделать этого раньше — непонятно.
890
08 декабря 2015 года
Sash1k
115 / / 27.04.2007
Тогда как поймать в приложении MCI_NOTIFY_SUCCESSFUL ??
1
08 декабря 2015 года
kot_
7.3K / / 20.01.2000
Цитата: Sash1k
Тогда как поймать в приложении MCI_NOTIFY_SUCCESSFUL ??

В цикле обработки сообщений. Ваш К.О.

890
08 декабря 2015 года
Sash1k
115 / / 27.04.2007
Создал событие в таймере:
 
Код:
var
 hd: HWND;
begin
hd := Form1.Handle;
GetMessage(msg, hd, 0, 0);
 if msg.message = MCI_NOTIFY_SUCCESSFUL then
    mciSendString('stop sound.mp3', 0, 0, 0);
end;
1
09 декабря 2015 года
kot_
7.3K / / 20.01.2000
Цитата: Sash1k
Создал событие в таймере:

Ужасно. Неужели трудно прочесть десять строк документации и выяснить что например mciSendString принимает в качестве четвертого параметра hwndCallback? Т.е. достаточно передать в него хендл своей формы - а в ней через BEGIN_MESSAGE_MAP/END_MESSAGE_MAP организовать обработку сообщения.

6
11 декабря 2015 года
@pixo $oft
3.4K / / 20.09.2006
Спасибо, kot_! Поржал с комментариев :D
Не знаю, как там в Delphi (впрочем, тут уже ответили, как именно), а на C++ всё было бы предельно просто: в функции окна/диалога обрабатывать сообщение MM_MCINOTIFY, т.е. как-то так
 
Код:
int DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){
    switch(uMsg){
        …
        case MM_MCINOTIFY:{
            … //Здесь будет обработка
        }break;
        …
    }
    return 0;
}
1
12 декабря 2015 года
kot_
7.3K / / 20.01.2000
Цитата: @pixo $oft
Спасибо, kot_! Поржал с комментариев :D
Не знаю, как там в Delphi (впрочем, тут уже ответили, как именно), а на C++ всё было бы предельно просто: в функции окна/диалога обрабатывать сообщение MM_MCINOTIFY,

Да. Но в Builder/Delphi можно обойтись без switch - через макрос BEGIN_MESSAGE_MAP/END_MESSAGE_MAP, либо надо свою функцию регистрировать как обработчик сообщений и не забывать передавать сообщения дальше.

890
20 декабря 2015 года
Sash1k
115 / / 27.04.2007
Уважаемые господа kot_ и @pixo $oft
Все делается гораздо проще, и без всяких костылей с созданием и перехватов сообщений.

Решение проблемы:

 
Код:
mciSendString('play sound.mp3 repeat', 0, 0, 0);
6
25 декабря 2015 года
@pixo $oft
3.4K / / 20.09.2006
Оказывается, достаточно было просто погуглить команды MCI ;-)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог