| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Воспроизведение музыки из БД |
| Автор: CrazyPiggy 7.8.2013, 09:52 | ||||
| Добрый день. Помогите пожалуйста решить проблему. У меня в программе на Delphi из базы данных выбираются записи содержащие mp3 по определенному условию. Мне необходимо сделать так чтобы программа воспроизвела одну запись mp3, пока идет воспроизведение программа должна выполнить какието действия, после окончания воспроизведения одной записи происходит воспроизведение другой и программа опять выполняет уже другие действия. И так до конца списка. Я делал так
Но при этом программа подвисает пока не прогирает весь звук и только потом продолжает выполнять действия. Пробовал делать так
Получалось если дальнейшие действия происходят быстрее чем воспроизводится звук, то он воспроизводится не до конца и начинается воспроизведение следующего звук. Подскажите пожалуйста что мне делать. как узнать воспроизвелся ли звук до конца и лишь после этого воспроизвести следующий. |
| Автор: CrazyPiggy 7.8.2013, 11:53 |
| Дело в том что в Чтото выполняется |
| Автор: Poseidon 7.8.2013, 12:57 | ||
По слову "TThread" ты найдешь кучу сообщений и примеров кода. |
| Автор: CrazyPiggy 8.8.2013, 00:18 | ||
При воспроизведении звука (а это число, которое я складываю из цифр хранящихся в базе в виде mp3) на экране рисуется это самое число которое мигает пока он произносится. При окончании воспроизведения числа, воспроизводится следующее число, которое также отображается графически на экране мигающим. И так далее Чтото типа 153 (сто пятьдесят три идет выборка этих озвучек из БД) и на экране мигает число 153 |
| Автор: Poseidon 8.8.2013, 12:13 | ||
Не знаю как реализовано мигание. Если через цикл, то может не получится. Но в общем, если боишься потоков, то можно сделать так:
Я скопировал твой код и немного его подправил. Мне не совсем ясно как мы этим циклом переходим на другую запись в БД. Т.е. нет ни Next, ни i не используется. Тебе это виднее. Я лишь показал как можно сделать. Добавить в PlaySound SND_NOSTOP и крутить его в цикле, пока музыка не закончилась. Как только замолчало, так идем на следующую итерацию цикла. Корявенько и я бы у себя так не сделал бы, но как один из вариантов без потоков... Если в /*Что то выполняется*/ свой внутренний цикл, то не получится. Нужно будет этот цикл пихать в наш while...do. Если моргание сделано через какой-нибудь таймер или тому подобное, то пройдет. |
| Автор: CrazyPiggy 10.8.2013, 16:54 |
| Спасибо за помощь. Разобрался в своей проблеме |