|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.06.2019, 18:30 | #1 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Как узнать, болтает ли уже данный процесс функцией PlaySound?
Как узнать, болтает ли уже данный процесс функцией PlaySound?
|
07.06.2019, 01:31 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Только через отладчик и/или API для отлаживания.
|
07.06.2019, 05:35 | #3 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Вы не поняли. Я не глухой, просто надо избежать какофонии. PlaySound вызывается или асинхронно, или из другой асинхронной функции, что позволяет пользователю до того, как он стихнет, куда-то ткнуть, из-за чего опять должна быть вызвана PlaySound. Интерфейс-то сохраняет полную реактивность. А сами команды с саундом не связаны, это не замена винампа, а редактор схем с голосовыми подсказками, так что пользователь часто не ожидает, что софтина заговорит «человеческим» голосом. И может ткнуть, не позаботившись о том, что софтина уже говорит. Так вот, надо избежать одновременного синтеза нескольких фраз одним и тем же голосом.
|
07.06.2019, 09:27 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Через PlaySound никак.
Есть Windows Sound API (WASAPI) Через него можно мониторить другие процессы в плане аудио. Ref: https://docs.microsoft.com/en-us/win...ore-audio-apis |
07.06.2019, 10:14 | #5 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Другие не надо. Надо только свой. И как поможет, если я перепишу болталку вместо вызова готовой функции на ещё более низкий уровень прямого обращения к карте?
Последний раз редактировалось taras-proger77; 07.06.2019 в 10:16. |
07.06.2019, 10:36 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
07.06.2019, 11:53 | #7 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Так и PlaySound я сам вызываю. Вот только все эти посылки всё равно идут из асинхронной функции, причём, у неё ещё и тип void.
|
07.06.2019, 12:36 | #8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Ну так вызывайте PlaySound синхронно из потока и шлите сигнал по завершению, делов-то...
|
07.06.2019, 13:44 | #9 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
Непосредственно функция, вызывающая PlaySound, синхронно её и вызывает. Но сама вызывается асинхронно. Иначе, пока она не замолчит, пользователь ничего не сможет сделать со всем редактором. Ради сохранения реактивности интерфейса во время говорения подсказки вызов должен быть асинхронным. А новый вызов может поступить из оконной процедуры другого окна, даже родительское окно может не совпадать. И даже родительское окно родительского окна. В редакторе девять разных голосовых информаторов, разбросанных по всем редактору и вызываемых из разных оконных процедур, включая кнопку <F4> в видовом окне (но эта кнопка хоть закреплена за голосовым информатором, так что при её нажатии пользователь ожидает, что редактор заговорит с ним). Как и куда эти функции должны слать сигнал?
|
07.06.2019, 13:51 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Перед вызовом PlaySound ставите флажок.
После завершения PlaySound снимаете флажок. Все это синхронно, в отдельном потоке. Либо используйте низкоуровневое АПИ. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как узнать, когда остановится playsound | TUberwer | Мультимедиа в Delphi | 5 | 15.08.2013 22:36 |
Как узнать какой из Image виден в данный момент? | Volkogriz | Общие вопросы Delphi | 2 | 09.12.2012 10:56 |
Узнать через интернет сколько копий программы запущено в данный момент. | Casper-SC | Общие вопросы .NET | 6 | 23.09.2010 18:10 |
Как програмно узнать какая директория [папка] в данный момент открыта? | dolphin705 | Общие вопросы Delphi | 13 | 08.04.2009 21:30 |
Как узнать какие данные в данный момент печатает принтер? | progan | Общие вопросы Delphi | 0 | 24.12.2008 09:34 |