|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.10.2015, 16:04 | #1 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Прерывание синхронного воспроизведения звука.
Кратко: есть простейший тред, внутри которого вызывается проигрывание звука из ресурса с помощью API- функции sndPlaySound(). Сам тред создаётся по тыку на кнопке "Start".
Задачи: 1) возможность остановить воспроизведение звука по тыку на кнопку "стоп"; 2) если воспроизведение не прерывалось, корректно завершить тред, выйти из Execute() и вызвать тем самым событие OnTerminate. Проблема: ни синхронное, ни асинхронное воспроизведение здесь оказалось неприменимо, т.к. при синхронном прервать исполнение цикла треда не получится, пока функция не проиграет звук полностью, а при асинхронном я не знаю, закончилось воспроизведение или нет, чтобы корректно выйти из цикла внутри Execute(). Код:
Что скажете, господа? Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
23.10.2015, 16:28 | #2 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
решение с медиа плеером не подойдет?
http://codeverge.com/embarcadero.del...-files/1059748 иначе думаю что надо узнаваьт длительность и в каком то таймере проверять не закончилось ли еще проигрывание. |
23.10.2015, 16:42 | #3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я может и не к месту, но думается мне что стоит обратить внимание на https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx и иже с ней?
I'm learning to live...
|
23.10.2015, 17:15 | #4 | ||
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Цитата:
Код:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
||
23.10.2015, 17:27 | #5 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
23.10.2015, 23:17 | #6 |
Форумчанин
Регистрация: 07.11.2011
Сообщений: 161
|
Почему-бы не воспроизводить асинхронно, а в потоке просто ждать завершения проигрывания трэка?
предполагаю таким образом: 1) считывать ресурс с трэком в memorystream; 2) из него читать wave-заголовок и рассчитывать приблизительное время; 3) запустить асинхронное воспроизведение из того-же memorystream; 4) отсчитывать в цикле потока ранее рассчитанное время, периодически проверяя свойство "terminated" потока; 5) по завершению таймера/необходимости завершению потока корректно его завершить; вот примерно так. единственный минус - это погрешность в отсчёте времени, но тут думаю это не так критично. Последний раз редактировалось DIONISKA; 24.10.2015 в 00:03. |
24.10.2015, 00:12 | #7 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Я уже так и сделал. Могу предъявить кусок исходника. Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
24.10.2015, 02:22 | #8 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Вот эдакая хренотень: видеоскриншот.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
01.11.2015, 17:19 | #9 |
Форумчанин
Регистрация: 29.10.2015
Сообщений: 273
|
----------
Последний раз редактировалось Filka; 01.11.2015 в 17:39. |
01.11.2015, 18:10 | #10 |
Старожил
Регистрация: 19.06.2013
Сообщений: 2,463
|
Ну у меня всё как обычно: при нажатии на F9 " [Fatal Error] sm.dpr(5): File not found: 'Vcl.Forms.dcu' "
,- Красотища !
Репутация: полный "0"
Последний раз редактировалось zvygin1964; 01.11.2015 в 18:14. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Текущая запись воспроизведения | Teror4uks | Мультимедиа в Delphi | 0 | 03.02.2014 17:42 |
ADO: Динамические поля синхронного просмотра | grh | БД в Delphi | 2 | 03.10.2012 10:48 |
Из синхронного сокета в асинхронный | nbit | C# (си шарп) | 0 | 28.10.2011 04:20 |
Компоненты для воспроизведения звука | saggy | Мультимедиа в Delphi | 6 | 08.08.2010 11:26 |
Программа для воспроизведения тонового звука через промежуток времени | Vl-sn | Помощь студентам | 9 | 12.03.2010 20:27 |