На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> waveIn и WaveOut в паре , звук с микрофона на колонки
    Уважаемые форумчане. Есть задача: вывести звук с микрофона на колонки. Реализую с помощью стандартных апи.
    Столкнулся с такой проблемой: при одновременной работе waveIn и WaveOut работает только прием сообщений от либо от waveIn, либо от WaveOut (в зависимости от того, кого первого инициировали). По отдельности (если инициировать либо только снятие с микрофона либо только воспроизведение) все сообщения (MM_WIM_DATA или MM_WOM_DONE соответственно) проходят нормально.
    Что за странные дела?
    Спасибо за помощь.

    Исходник привожу.

    Прикреплённый файлПрикреплённый файлwaveInOut.rar (2 Кбайт, скачиваний: 372)
      Мозг, у тебя карта не full-duplex? Хотя таких вроде давно не выпускают.
        Ага,таких не выпускают уже лет 10 наверное.
        У меня нэтбук Asus.

        Добавлено
        Цитата MIF @
        Мозг...

        Это в хорошем смысле или нет? :D
        Сообщение отредактировано: Виктор -
          Виктор
          Отладил твой код. waveOutWrite возвращается с WAVERR_STILLPLAYING. Если верить сообщению то что-то уже воспроизводится. Можно предположить что при записи звук уже воспроизводится через колонки. И ручками ничго делать не надо. А да ну при этом звук с микрофона может фильтроваться драйвром звуковой(там настройка есть).
            Цитата Виктор @
            (в зависимости от того, кого первого инициировали).

            А когда второго инициируешь - все нормально? В плане возврата функцией открытия устройства результата (который ты не проверяешь, а проверку закоментировал и удалил за "ненадобностью"). :D

            Добавлено
            О...уже разобрались... :D
              А да еще как вариант попробовать выводить звук через микшер.
                Цитата Виктор @
                Это в хорошем смысле или нет?

                Канешна, в харошем!
                  В аттаче пример организации сквозного канала. Но. Вешать обработку аудио на оконную процедуру нехорошо. Лучше и правильнее в отдельном потоке. Чтобы события от мышки, клавы, отрисовка компонентов формы, не "затыкали" аудио. И наоборот, аудио не тормозило обработку событий формы.
                  В примере показан учет количества активных буферов. Можно обойтись и без него. Processmessages перед закрытием устройств успешно обрабатывает все сообщения wim_data wom_done, так что перед waveinclose/waveoutclose сообщения уже обработаны(память под заголовки и буферы совобождена). Но так, имхо, легче проследить механизм перекидывания буферов друг другу, обработчиками событий wim_data и wom_done.

                  Прикреплённый файлПрикреплённый файл______________.zip (14,33 Кбайт, скачиваний: 450)
                    Хороший пример, спасибо :D
                      Prince
                      Если судить по примеру то там записывается половина потом воспроизводится. Что не плохо. Только надо переделать чтобы буферы чередовались.
                      А как насчёт потери данных пока буферы воспроизводятся?
                        Цитата
                        Только надо переделать чтобы буферы чередовались.

                        В каком смысле чередовались? Буфер, вернувшийся из очереди записи, ставится в очередь воспроизведения. Буфер, вернувшийся из очереди воспроизведения, ставится в очередь записи. Такой себе дружественный обмен. Буферов может быть хоть до сотни. И в очереди всегда находится примерно половина.
                        Цитата
                        А как насчёт потери данных пока буферы воспроизводятся?

                        Данные не теряются, разрыва в данных нет, а на слух, разрывы в воспроизводимом звуке могут быть, например, во время сворачивания формы, поскольку события аудио в оконной процедуре обрабатываются.

                        Разрывы есть, во время манипуляций с формой, перемещения, сворачивания. Механизм "затыкания" звука", как там и чего происходит, я не могу объяснить. Понимаю, что связано с обработкой сообщений аудио в общей очереди сообщений, если перенести обработчик аудио в отдельный поток с уведомлением callback_event, разрывов быть не должно.

                        Может, я что-то не учел, замечания, указания на ошибки, или ошибочность решения в целом, с благодарностью принимаю.
                        Сообщение отредактировано: Prince -
                          Prince
                          Да проверил потери нет.

                          А вот возьмем 100 буферов и сразу будет заметна задержка в воспроизведение. Её бы уменьшить.
                          При 16 тоже заметно, а уменьшать не хотелось бы. По хорошему надо запас буферов на 4 секунды.
                            Мининальнео количество буферов, при котором нет разрывов(на слух), у меня получилось 6. Размер буфера можно попробовать уменьшить вдвое.
                            Цитата
                            По хорошему надо запас буферов на 4 секунды.

                            А для чего?


                            Кстати, объясните кто-нибудь практическое применение сквозного канала вообще.
                              Prince
                              На 1024 у меня уже система не справляется приходит одно сообщение на 2 буфера. Приходилось усложнять обработку.

                              Уменьшать число буферов не хочу что бы не заикалось. Так как в виндоусе вытесняющая многозадачность, то главный поток забирает все и чисто теоретически наша программа если не главная может получать сообщение раз в 4 секунды. Поэтому и хочу запас.


                              Цитата Prince @
                              Кстати, объясните кто-нибудь практическое применение сквозного канала вообще.

                              Как известно если A+(-A) будет 0. То есть если подать на выход, то что поступило на вход но с обратным знаком, то получим тишину. Известный факт.

                              Хочу попробовать фокус сделать человек говорит программа выделяет признаки конкретного человека и выдает его звук, но в обратном порядке. Разумеется нужна некоторое предсказание. А другие люди должны говорить свободно. Типо лишаем голоса одного человека. :blush: Правда уверен что не получится.
                                Цитата Pavia @
                                Уменьшать число буферов не хочу что бы не заикалось. Так как в виндоусе вытесняющая многозадачность, то главный поток забирает все и чисто теоретически наша программа если не главная может получать сообщение раз в 4 секунды. Поэтому и хочу запас.

                                Вообще-то стандартное решение - повысить приоритет звукового потока.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0510 ]   [ 19 queries used ]   [ Generated: 11.05.24, 11:17 GMT ]