На главную Наши проекты:
Журнал   ·   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
  
> Оцифровка сигналов с нескольких микрофонов
    ПК с Windows 7. Мне нужно решить следующую задачу:
    - оцифровать аналоговые сигналы с нескольких аналоговых аудиоустройств (по крайней мере 2 микрофона), устанавливая параметры оцифровки с ПК;
    - сохранить оцифрованные сигналы с внешних аналоговых устройств на ПК;
    - обработать оцифрованные сигналы.
    На первом этапе стоит задача научиться управлять устройством для обработки звука. Вопросы чувствительности, частотного и динамического диапазоны, быстройдействия пока не очень существенны, но устройство должно иметь, как я понимаю, поддержку ASIO и MME, чтобы отлаженные программы на более простом устройстве можно было использовать на более сложном и чувствительном. Очень желательно, чтобы устройство имело интерфейс USB (для возможности отладки программ на разных ПК и ноутбуках), а также имело драйвера для Windows 7. Но если внешнего такого устройства нет, то можно и PCI. Верхний ценовой диапазон 15 тыс. рублей, но чем дешевле, тем лучше.
      А вопрос в чём заключается?

      1. Определитесь, с каким количеством, с какими микрофонами вы собираетсь работать, что записывать.
      2. Штатные интерфейсы винды не умеют работать с многоканальным(больше 2-х каналов) оборудованием. В этом случае только ASIO.
      3. USB и пр. девайсы могут иметь недостаточную чувствительность микрофонного входа. Стоит обратить внимание перед покупкой на чувствительность(коэффициент усиления) микрофонного входа, сопоставить с чувствительностью микрофонов, уровнем звукового давления(SPL) сигналов, которые вы собираетесь записывать и прикинуть, какой уровень сигнала будет на выходе девайса.
      Встроенные, PCI "бытовые" аудиокарты не расчитаны на подключение "нормальных" динамических и конденсаторных микрофонов. Совершенно. Они заточены под конденсаторные микрофонные капсюли с низковольным питанием, со встроенным усилителем, какие используются во всех гарнитурах.
      4. "Быстродействие" ASIO, и вообще "быстрдействие", в случае простой записи сигналов, на скорость ветра не влияет вообще никак.
      5. Если необходимо записать не более 2-х микрофонов, то можно взять микшерный пульт с 2-мя микрофонными входами и коэффициентом усиления 60 дБ. Оцифровывать можно любой аудиокартой, подавая сигнал с пульта на линейный вход. Проблем с чувствительностью не будет. Уровень собственных шумов...зависит от класса микрофонного усилителя/пульта, см. характеристики.
      Сообщение отредактировано: Prince -
        Я плохо сформулировал вопрос, попробую пояснить:
        1. Входом может быть более двух, мне говорил о 6-8.
        2. Мне нужно понять, с помощью каких драйверов (интерфейсов) (ASIO, Windows MME или другие) можно решить задачу записи звуковых сигналов с микрофонов по отдельности (нужно записывать каждый сигнал с каждого канала в отдельные файлы) на ПК (ноутбуке) с Windows.
        3. Затем мне нужно научиться записывать сигналы на устройстве с выбранным драйвером (интерфейсом). Для того, чтобы научиться это делать (написать программу), можно взять устройство для двух каналов с выбранным интерфейсом (чтобы оно было приемлемым по цене).
        4. После демонстрации возможностей программы по записи по двум каналам будет закуплено другое многоканальное оборудование с выбранным интерфейсом и хорошими параметрами. Заниматься этим будут другие люди. Я буду заниматься программированием этого другого оборудования (если буду участвовать в проекте).
        Короче говоря, мне поступило предложение поучаствовать в проекте, который начнется в начале 2016 года. Но для этого я должен показать, что способен написать программу для записи сигналов по отдельности с разных каналов. Наверное, у руководителей проекта есть и другие кандидатуры, но я все-таки хочу попробовать. Тем более, что мне это самому интересно.

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

        Очень надеюсь на Вашу помощь.
          Цитата
          Мне нужно понять, с помощью каких драйверов (интерфейсов) (ASIO, Windows MME или другие) можно решить задачу записи звуковых сигналов с микрофонов по отдельности (нужно записывать каждый сигнал с каждого канала в отдельные файлы) на ПК (ноутбуке) с Windows.

          С помощью любых.
          Загляните в FAQ. Прочтите Кинтцеля, Секунова, многие вопросы прояснятся, отпадут, появятся новые... :-?
            Если б мне надо было показать, что я умею захватывать звук с нескольких микрофонов, то я б использовал WinMM. Только потому, что у меня есть опыт подобной разработки (Запись 8 радио станциий на 4 аудио карты). Может DirectX проще, но не для меня.
            Вставляешь вторую (третью, четвертую) аудио карту (карты должны быть от разных производителей). Вставляешь микрофоны.
            Пишешь код, который определяет количество карт в компьютере (waveInGetNumDevs). Пишешь код, который открывает нужную карту, а далее используешь стандартный код захвата звука. Отдельное приложение для каждой карты, записываешь звук с каждого микрофона.
              Вам нужен АЦП и мультиплексор. А вот как сделать? Это вопрос выбора, таких вариантов вагон и маленькая тележка.
              1) Звуковые карты от разных производителей.
              2) Профессиональная звуковая карта с несколькими входами.
              3) Несколько USB аудиокарт
              4) микроконтроллер с АЦП и мультиплексором. - Самый дешёвый вариант. ДА и самый простой.
              5) Какую нибудь L-card или лучше любой другой АЦП с PCI/PCIe/USB главное ищите с SDK.
              6) Астерикс

              Цитата tumanovalex @
              3. Затем мне нужно научиться записывать сигналы на устройстве с выбранным драйвером (интерфейсом). Для того, чтобы научиться это делать (написать программу), можно взять устройство для двух каналов с выбранным интерфейсом (чтобы оно было приемлемым по цене).4. После демонстрации возможностей программы по записи по двум каналам будет закуплено другое многоканальное оборудование с выбранным интерфейсом и хорошими параметрами. Заниматься этим будут другие люди. Я буду заниматься программированием этого другого оборудования (если буду участвовать в проекте).Короче говоря, мне поступило предложение поучаствовать в проекте, который начнется в начале 2016 года. Но для этого я должен показать, что способен написать программу для записи сигналов по отдельности с разных каналов. Наверное, у руководителей проекта есть и другие кандидатуры, но я все-таки хочу попробовать. Тем более, что мне это самому интересно.

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

              Со звуком по аккуратнее, пожалуй это самая глючная и бажная область после видео. Поэтому к примеру звуковые карты от одного производителя могут не заработать из-за конфликта. А от разных тоже могут быть конфликты и код разнится. И готовитесь, что на одном API может пойти на другом нет, надо пробовать разные.
              А вообще это как повезёт. Повезёт с первого раза всё заработает и проблем не заметите. Не повезёт будете мучится. Но чаще всего ошибки в коде прикладной программы.

              ASIO(не распространён), Windows MME, DirectX, и тп.

              https://msdn.microsoft.com/en-us/library/wi...0(v=vs.85).aspx

              Я за DirectX он по проще будет. Но не для новичков. Там надо владеть ООП: понимать как работает
              конвейер, что такое фабрики, как работает барьерной синхронизация и так далее.


              А вообще какие требования к звуку? Частота работы? Качество, нелинейные искажения? Временные требования голос передавать? Задержки(джитер)? Сжатие?
                Цитата MIF @
                Если б мне надо было показать, что я умею захватывать звук с нескольких микрофонов, то я б использовал WinMM. Только потому, что у меня есть опыт подобной разработки (Запись 8 радио станциий на 4 аудио карты). Может DirectX проще, но не для меня.
                Вставляешь вторую (третью, четвертую) аудио карту (карты должны быть от разных производителей). Вставляешь микрофоны.
                Пишешь код, который определяет количество карт в компьютере (waveInGetNumDevs). Пишешь код, который открывает нужную карту, а далее используешь стандартный код захвата звука. Отдельное приложение для каждой карты, записываешь звук с каждого микрофона.

                В принципе, таким же образом можно и с многоканальными устройствами попробовать работать. Помимо поддержки ASIO, в драйверах [может быть] реализована поддержка и winmm и DirectSound. В этом случае каналы делятся на пары(стерео), обращение к парам каналов как к разным устройствам. В общем, если каналы записи независимые, т.е., не требуется жёсткая синхронизация, можно попробовать юзать winmm. Тогда будет неважно, одно мноканальное устройство используется или несколько отдельных аудиокарт. Не могу утверждать, что обязательно получится, с любым многоканальным устройством, но попробовать можно.
                Сообщение отредактировано: Prince -
                  Спасибо большое за ответы. Они помогли мне понять следующее:
                  1. Сначала идет удовлетворяющая потребностям заказчика программы аппаратура, а потом уже именно для нее нужно создавать программу.
                  2. Попытки угадать интерфейсы и возможности этой аппаратуры - бесперспективны. То, что вроде бы будет удовлетворять на простом устройстве, может не удовлетворять на сложном. Да и интерфейсы могут отличаться.
                  3. Для решения такой сложной задачи нужна большая программистская практика, в том числе и в области работы со звуком.
                  Опыта и знаний у меня мало, практики тоже.
                  Прошу меня извинить, что отнял у вас время. Участвовать в этом проекте не буду, задача мне не по силам.
                    Цитата
                    Сначала идет удовлетворяющая потребностям заказчика программы аппаратура, а потом уже именно для нее нужно создавать программу.

                    По идее, да.
                      Тему не читал, может повторюсь.
                      Для записи более двух микрофонов независимых источников аудио сигнала нужно иметь соответствующее железо. Сейчас у меня M-Audio Delta 1010LT, свободно пишу до восьми источников звука, для этого достаточно даже DirectSound, в устройствах записи видятся четыре независимых стерео устройства. Лет восемь назад у меня ещё не было этой звучки, и я просто устанавливал в компьютер несколько звуковых карт, это тоже работает без проблем.
                        Цитата Mikle @
                        свободно пишу до восьми источников звука, для этого достаточно даже DirectSound, в устройствах записи видятся четыре независимых стерео устройства. Лет восемь назад у меня ещё не было этой звучки, и я просто устанавливал в компьютер несколько звуковых карт, это тоже работает без проблем.

                        А для записи многоканального звука с помощью своей программы Вы создаете несколько потоков, по потоку на канал? Или как-то по другому?
                          Цитата tumanovalex @
                          А для записи многоканального звука с помощью своей программы Вы создаете несколько потоков, по потоку на канал? Или как-то по другому?

                          Всё в одном потоке. С помощью DirectSoundCreate создаётся столько экземпляров DirectSound8, сколько есть звуковых карт, каждый со своим GUID, которые получаем с помощью DirectSoundEnum8.GetGuid. Каждым экземпляром DirectSound8 создаём свой DirectSoundCapture8 и стартуем на запись с параметром DSCBSTART_LOOPING. С помощью GetCurrentPosition читаем текущую позицию, лочим записанное до этой позиции и скидываем, например, в файл.
                            Спасибо за ответ, попробую.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0422 ]   [ 16 queries used ]   [ Generated: 19.03.24, 09:12 GMT ]