![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
CrazyPiggy |
|
||||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Добрый день. Помогите пожалуйста решить проблему.
У меня в программе на Delphi из базы данных выбираются записи содержащие mp3 по определенному условию. Мне необходимо сделать так чтобы программа воспроизвела одну запись mp3, пока идет воспроизведение программа должна выполнить какието действия, после окончания воспроизведения одной записи происходит воспроизведение другой и программа опять выполняет уже другие действия. И так до конца списка. Я делал так
Но при этом программа подвисает пока не прогирает весь звук и только потом продолжает выполнять действия. Пробовал делать так
Получалось если дальнейшие действия происходят быстрее чем воспроизводится звук, то он воспроизводится не до конца и начинается воспроизведение следующего звук. Подскажите пожалуйста что мне делать. как узнать воспроизвелся ли звук до конца и лишь после этого воспроизвести следующий. |
||||
|
|||||
Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: нет Всего: 133 |
Используй SND_SYNC, но цикл воспроизведения засунь в отдельный поток. Вообще SND_SYNC замораживает выполнение кода пока не будет достигнут конец файла. Для пользователя это похоже на зависание программы. Использование SND_ASYNC позволяет коду выполняться дальше. Поэтому у тебя и получается, что при SND_ASYNC музыка начинает играть и пошло выполнятся твое /*Что то выполняется*/. Как только оно выполнилось, цикл пошел на следующую итерацию, а следовательно пошел новый вызов PlaySound с уже другим звуком.
Я бы посоветовал использовать отдельный поток для PlaySound с флагом SND_SYNC. /*Что то выполняется*/ можно делать в основном потоке, если это выполняется быстро. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
CrazyPiggy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Дело в том что в Чтото выполняется
![]() Это сообщение отредактировал(а) CrazyPiggy - 7.8.2013, 12:14 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: нет Всего: 133 |
По слову "TThread" ты найдешь кучу сообщений и примеров кода. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
CrazyPiggy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
При воспроизведении звука (а это число, которое я складываю из цифр хранящихся в базе в виде mp3) на экране рисуется это самое число которое мигает пока он произносится. При окончании воспроизведения числа, воспроизводится следующее число, которое также отображается графически на экране мигающим. И так далее Чтото типа 153 (сто пятьдесят три идет выборка этих озвучек из БД) и на экране мигает число 153 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: нет Всего: 133 |
Не знаю как реализовано мигание. Если через цикл, то может не получится. Но в общем, если боишься потоков, то можно сделать так:
Я скопировал твой код и немного его подправил. Мне не совсем ясно как мы этим циклом переходим на другую запись в БД. Т.е. нет ни Next, ни i не используется. Тебе это виднее. Я лишь показал как можно сделать. Добавить в PlaySound SND_NOSTOP и крутить его в цикле, пока музыка не закончилась. Как только замолчало, так идем на следующую итерацию цикла. Корявенько и я бы у себя так не сделал бы, но как один из вариантов без потоков... Если в /*Что то выполняется*/ свой внутренний цикл, то не получится. Нужно будет этот цикл пихать в наш while...do. Если моргание сделано через какой-нибудь таймер или тому подобное, то пройдет. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
CrazyPiggy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 4.6.2008 Репутация: нет Всего: нет |
Спасибо за помощь. Разобрался в своей проблеме
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |