Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


06:34.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.