На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
  
> Минимально допустимый буфер , Как уменьшить задержку при программной обработке звука в "реальном времени"
    Господа!

    Пишу софтину обработки звука "реалтайм" (под реалтаймом понимается некая фиксированная задержка вход/выход).
    Со звуком работаю через стандартный MMSystem, использую двойную буферизацию.
    Интересует, как оптимизировать под минимальный размер буфера.

    Пока результаты такие: буфер 50мс (плюс квота 10 мс на программную обработку буфера) - воспроизводится нормально. Ставлю буфер 25мс - щелчки.
    Реально ли еще уменьшить буфер (то есть работать без щелчков с буфером меньшим, чем 50мс)?
    Понимаю, что винда для реалтайма не предназначена, но всё же?

    Краткое описание алгоритма.
    1) На входе поставлено в очередь 2 буфера на запись. Один буфер записался, перепихиваем его, родимого, на обработку и сразу ставим обратно в очередь на запись. В этот момент идет запись в другой буфер. Готовность буфера определяем поллингом через мультимедийный таймер с интервалом в 1мс.
    2) Делаем программную обработку принятого буфера.
    3) В первый раз отсчитываем задержку в 10мс на обработку буфера, чтобы задать интервал между принятием входного буфера и постановкой его на выход.
    4) Обработанный буфер пихаем на выход. Первый раз это делается через "нормировочную" задержку 10мс (п.2), далее - по появлению свободного буфера на вывод (там тоже крутятся 2 буфера).

    Что еще можно сделать?
    Поможет ли например переход на Директ Саунд? Мне кажется, что нет: пробовал вход выводить в файл (чтобы гарантированно отсечь щелчки вывода) - картина та же: 50мс - всё хорошо, 25мс - щелчки.
    Поможет ли переход от программного поллинга на callback function? Попробую, но думаеццо, что щелчки здесь вызваны в первую очередь писюковыми прерываниями большего приоритета, и всё остальное только пляски с бубном...

    Впрочем, кто писал подобные задачи, буду рад, если поделитесь опытом.
      ymv
      44100*2*0.05=4410
      Что примерно равно одной странице.
      4096. Возможно ваша аппаратура не может воспроизводить или записывать куски меньшего объема.
      Хотя у меня где-то на 1500 байтах заикания начинались, что примерно равно одному такту. Но я тогда не включал реалтайм в виндоусе.
        Цитата Pavia @
        ymv
        44100*2*0.05=4410
        Что примерно равно одной странице.
        4096. Возможно ваша аппаратура не может воспроизводить или записывать куски меньшего объема.
        Хотя у меня где-то на 1500 байтах заикания начинались, что примерно равно одному такту. Но я тогда не включал реалтайм в виндоусе.

        > 44100*2*0.05=4410
        Без *2, буфер равен 2210.
        Задержка определяется одним буфером. Второй буфер просто на подхвате.
        Кстати, какая страница имеется в виду? В DMA я не силен.

        Может, причина щелканий в том, что прерывание от звуковухи "забивает" более приоритетное прерывание? Готов звуковой блок, только драйвер звуковухи хочет установить флаг готовности, как тут же его, родимого, прерывает более приоритетное прерывание. А пока оно работает, уж тут готов и следующий звуковой блок. Впрочем, это только гипотеза. Кстати, прерывание от таймера писюкового генерится раз в 55мс...

        В принципе, меня пока и такая задержка устроит, еще бы подвести теорию...
          Кстати, а по поводу размера буфера - это мысль.
          Попробовал увеличить SampleRate - щелчки прекратились.
          Т.е.:
          44100 буфер 50мс - без щелчков
          44100 буфер 25мс - щелчки
          96000 буфер 50мс - без щелчков
          96000 буфер 25мс - без щелчков

          Добавлено
          А кстати!!!
          > Но я тогда не включал реалтайм в виндоусе.
          Э-э-э-... А не будет ли столь любезен глубокоуважемый джинн подсказать, где в винде есть галочка включения реалтайма? :-)))))))))
            >> 44100*2*0.05=4410
            >Без *2, буфер равен 2210.

            Вру, размер буфера 44100Hz*2bytes*2channels*0.05=8820
            Или со щелчками 44100Hz*2bytes*2channels*0.025=4410
              Судя по постам смелых экспериментаторов, достигнутый результат можно считать очень и очень хорошим:

              Цитата http://technosaratov.ru/post/view/94
              Так, например, не особенно утешительные заявления Microsoft о том что DirectSound обеспечивает задержки в 20мс не являются истиной. На практике достигаются лишь задержки в 50-80 мс.


              Вумные люди для близкого к реалтайму звука советуют ASIO.

              Добавлено
              Даже читаем доки по ДиректСаунд:

              Цитата
              Задержки звука

              Подсистема MME из-за переключений между 32- и 16-разрядными режимами и неоптимальной с точки зрения адаптера структуры буферов часто дает существенную задержку (latency) между подачей звукового блока драйверу и появлением звука на выходе, равно как и в обратном направлении (при записи). DirectSound, за счет более оптимального управления адаптером, вносит задержки на уровне около 20 мс. Однако при эмуляции, когда работа идет через подсистему MME, задержки могут возрасти до 100-150 мс.


              Добавлено
              А вообще, как в любом другом прожекте, я бы рекомендовал сосредоточиться для начала на собственных уникальных разработках. Я не думаю, что вывод звука является достойной самоцелью проекта - для этого есть вагон и малая тележка библиотек - BASS, FMod, и т.д. все они бесплатны для некоммерческого применения.

              Почему? Потому что библиотеки эти писали не самые глупые люди, они используются в вагоне малой тележке проектов, в т.ч. коммерческих и высокобюджетных. Предоставляют одинаковые интерфейсы для различных платформ, т.е. для миграции потребуются минимальные изменения кода - а не танцы с бубнами, выжимают из железа по максимуму - так что, вероятнее всего, если дают работать с буфером определённого размера, то 99% что меньше на данной программно/аппаратной конфигурации и низзя, а самое главное, постоянно апгрейдятся, так что не нужно маяться геморроем по поводу выхода новых версий Винды.

              Таким образом, минимизируются затраты времени на велосипедоизобретательство, а по максимуму прокачиваем свои собственные разработки.

              Опыт показывает: когда разработчик застопаривается на вопросах вывода звука, и объясняет себе и другим что "дело дальше нейдёт потому что никак не выводится звук, а вот де только выведется так сразу всех порвём...", чаще всего остальная часть проекта не стоит выеденного яйца.

              Рекомендую сделать сначала с использованием высокоуровневой библиотеки, а там будет видно: достойно ли оно того, чтобы разрабатывать дальше и избавляться от библиотек (или даже получилось так круто что можно на продажах отбить лицензию на библиотеку), или как сказано выше оно не стоит выеденного яйца.
                  Romzecs, пальцем в небо. Человек использует

                  Цитата ymv @
                  MMSystem


                  M
                  нарушение п.2 правил раздела.
                  Сообщение отредактировано: barazuk -
                    > Рекомендую сделать сначала с использованием высокоуровневой библиотеки, а там будет видно:

                    Спасибо, я на данный момент удовлетворен достигнутой задержкой.

                    > Опыт показывает: когда разработчик застопаривается на вопросах вывода звука, и объясняет себе и другим что "дело дальше нейдёт потому что
                    > никак не выводится звук, а вот де только выведется так сразу всех порвём...", чаще всего остальная часть проекта не стоит выеденного яйца.

                    Как раз таки концепция была продумана и воплощена ранее в "оффлайновой" версии, оставалось только звук прикрутить, что и сделано.

                    > ... так что не нужно маяться геморроем по поводу выхода новых версий Винды.

                    Ну уж ничего стабильней и "системней" MMSystem не придумать. :)
                    За советы спасибо, я просто давно сюды не заходил, потому и молчал. Прога сейчас в состоянии альфа-версии, наверное если и буду прикручивать DirectSound и/или ASIO, то в последующих версиях. Правда, на других виндах завержки пока не тестил.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0347 ]   [ 15 queries used ]   [ Generated: 18.04.24, 23:14 GMT ]