Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2019, 18:30   #1
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию Как узнать, болтает ли уже данный процесс функцией PlaySound?

Как узнать, болтает ли уже данный процесс функцией PlaySound?
taras-proger77 вне форума Ответить с цитированием
Старый 07.06.2019, 01:31   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Только через отладчик и/или API для отлаживания.
waleri вне форума Ответить с цитированием
Старый 07.06.2019, 05:35   #3
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Вы не поняли. Я не глухой, просто надо избежать какофонии. PlaySound вызывается или асинхронно, или из другой асинхронной функции, что позволяет пользователю до того, как он стихнет, куда-то ткнуть, из-за чего опять должна быть вызвана PlaySound. Интерфейс-то сохраняет полную реактивность. А сами команды с саундом не связаны, это не замена винампа, а редактор схем с голосовыми подсказками, так что пользователь часто не ожидает, что софтина заговорит «человеческим» голосом. И может ткнуть, не позаботившись о том, что софтина уже говорит. Так вот, надо избежать одновременного синтеза нескольких фраз одним и тем же голосом.
taras-proger77 вне форума Ответить с цитированием
Старый 07.06.2019, 09:27   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Через PlaySound никак.
Есть Windows Sound API (WASAPI)
Через него можно мониторить другие процессы в плане аудио.

Ref:
https://docs.microsoft.com/en-us/win...ore-audio-apis
waleri вне форума Ответить с цитированием
Старый 07.06.2019, 10:14   #5
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Другие не надо. Надо только свой. И как поможет, если я перепишу болталку вместо вызова готовой функции на ещё более низкий уровень прямого обращения к карте?

Последний раз редактировалось taras-proger77; 07.06.2019 в 10:16.
taras-proger77 вне форума Ответить с цитированием
Старый 07.06.2019, 10:36   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
на ещё более низкий уровень прямого обращения к карте?
Поскольку будете сами посылать данные в буфер, то всегда будете знать что играет и играет ли вообще.
waleri вне форума Ответить с цитированием
Старый 07.06.2019, 11:53   #7
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Так и PlaySound я сам вызываю. Вот только все эти посылки всё равно идут из асинхронной функции, причём, у неё ещё и тип void.
taras-proger77 вне форума Ответить с цитированием
Старый 07.06.2019, 12:36   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Ну так вызывайте PlaySound синхронно из потока и шлите сигнал по завершению, делов-то...
waleri вне форума Ответить с цитированием
Старый 07.06.2019, 13:44   #9
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Непосредственно функция, вызывающая PlaySound, синхронно её и вызывает. Но сама вызывается асинхронно. Иначе, пока она не замолчит, пользователь ничего не сможет сделать со всем редактором. Ради сохранения реактивности интерфейса во время говорения подсказки вызов должен быть асинхронным. А новый вызов может поступить из оконной процедуры другого окна, даже родительское окно может не совпадать. И даже родительское окно родительского окна. В редакторе девять разных голосовых информаторов, разбросанных по всем редактору и вызываемых из разных оконных процедур, включая кнопку <F4> в видовом окне (но эта кнопка хоть закреплена за голосовым информатором, так что при её нажатии пользователь ожидает, что редактор заговорит с ним). Как и куда эти функции должны слать сигнал?
taras-proger77 вне форума Ответить с цитированием
Старый 07.06.2019, 13:51   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Перед вызовом PlaySound ставите флажок.
После завершения PlaySound снимаете флажок.
Все это синхронно, в отдельном потоке.
Либо используйте низкоуровневое АПИ.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать, когда остановится 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