На главную Наши проекты:
Журнал   ·   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
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Одновременное работа микрофона и воспроизведение
    Цитата Ivan123 @
    А что вы имеете ввиду через другой софт?
    Для начала нужно понять – ошибка в настройках системы/звуковой карты или в вашем коде.
    Другой софт – любая другая программа для записи звука. Хоть Audacity, Audition, REAPER, Sound Forge...

    1. Запускаете свою прогу для записи, свою для воспроизведения – микрофон слышно (это уже понятно).
    2. Запускаете стороннюю прогу для записи, свою для воспроизведения (любого звука, хоть синуса) – микрофон слышно???
    3. Запускаете свою прогу для записи, стороннюю для воспроизведения – микрофон слышно???
    4. Запускаете стороннюю прогу для записи, стороннюю для воспроизведения – микрофон слышно???

    Добавлено
    Я с такой проблемой не сталкивался, но я бы сделал так, чтобы хоть что-то понять...
      Цитата Jin X @
      Для начала нужно понять – ошибка в настройках системы/звуковой карты или в вашем коде

      1. мне не совсем понятно для чего проверять настройки системы/звуковой карты сторонними программами, если все встроенные мультимедийные функции в системе работают и так нормально, и кино и музыка и скайп и запись на микрофон и т.п.
      2. в моём коде нет ничего особенного ( я уже писал набором каких функций происходит запись и воспроизведение звука - там не хватает только ещё несколько функций которые заполняют и освобождают буфер аудиоустройства) и раз я слышу записанные звуки в наушниках, значит звук пишется. И наконец если я слышу белый шум то и воспроизведение тоже идёт нормально.
      3. я прочитал описание возможностей ваших программ, посмотрел видео. Да скорее всего, поскольку это обычные микшера, они могут делать то что мне необходимо. Вы мне предлагаете разобрать весь их код, чтобы понять как они это делают? для меня на этом этапе это не реально.

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

      ExpandedWrap disabled
        begin
        ...........................................
            WaveInOpen(Addr(WaveIn), WAVE_MAPPER, addr(WaveFormatEx), Handle, 0, CALLBACK_WINDOW);
         
            numdevs:=mixerGetNumDevs;
            for i:=0 to numdevs-1 do
              begin
                mixerGetDevCaps(i,@caps, sizeof(caps));
                //cb_devs.Items.Add(caps.szPName);
              end;
            ItemIndex:=2; //?? у меня их 4 второй "общая громкость"
            mixerOpen(@mixer,ItemIndex,handle,0,CALLBACK_WINDOW);
            mixerGetDevCaps(mixer,@caps,sizeof(caps));
          //////////////////////////////////////////////////////////
            MaxLinecnt:=255;
            //cb_dest.Clear;
            line.cbStruct:=sizeof(line);
            curDest:=-1;
            for i:=0 to MaxLinecnt do
              begin
                inc(curDest);
                line.dwDestination:=curDest;
                err:=mixerGetLineInfo(i,@line,MIXER_GETLINEINFOF_DESTINATION or MIXER_OBJECTF_HMIXER);
                if err<>0 then
                  break;
                  add:=line.szname;
              end;
            ItemIndex:=0;
         //////////////////////////////////////////////////////
            curDest:=ItemIndex;
            line.cbStruct:=sizeof(line);
            line.dwDestination:=curDest;
            err:=mixerGetLineInfo(mixer,@line,MIXER_GETLINEINFOF_DESTINATION or MIXER_OBJECTF_HMIXER);
            maxSrc:=line.cConnections;
            mixerlineid[0]:=line.dwLineID;
            add:=(line.szname);
           curSrc:=0;
           for i:=0 to maxSrc-1 do
             begin
               line.dwDestination:=curDest;
               line.dwSource:=i;
               err:=mixerGetLineInfo(mixer,@line,MIXER_GETLINEINFOF_SOURCE or MIXER_OBJECTF_HMIXER);
               if err<>0 then
                 break;
                 add:=('-     '+line.szname);
                 mixerlineid[i+1]:=line.dwLineID;
            end;
            ItemIndex:=0;
        /////////////////////////////////////////////////////////////////////////
            LineId:=mixerlineid[ItemIndex]; // Вспоминаем ID дорожки
            line.cbStruct:=sizeof(line);
            line.dwLineID:=LineID;
            mixerGetLineInfo(mixer,@line,MIXER_GETLINEINFOF_LINEID);
            if line.cControls=0 then
              exit;
            ctrl.cbStruct:=sizeof(ctrl);
            ctrl.cbmxctrl:=sizeof(TMIXERCONTROL);
            ctrl.dwLineID:=LineID;
            ctrl.cControls:=line.cControls;
            ctrl.pamxctrl:=@m_ctrl;
            mixerGetLineControls(mixer,@ctrl,MIXER_GETLINECONTROLSF_ALL);
            for i:=0 to ctrl.cControls-1 do
              begin
                ItemsAdd[i]:=m_ctrl[i].szName;
              end;
            ItemIndex:=0;
        ////////////////////////////////////////////////////////////////////////
            ctrl_sel:=itemindex;
            if m_ctrl[ctrl_sel].cMultipleItems=0 then
              begin
                mxc.cbStruct:=sizeof(mxc);
                mxc.dwControlID:=m_ctrl[ctrl_sel].dwControlID;
                MXC.cMultipleItems:=m_ctrl[ctrl_sel].cMultipleItems;
                mxc.cChannels:=1;
                mxc.cbDetails:=sizeof(mxcd);
                mxc.paDetails:=@mxcd;
                err:=mixerGetControlDetails(mixer,@mxc,0);
                if err<>0 then
                  begin
                    exit;
                  end;
                for i:=0 to MXC.cMultipleItems-1 do
                  if mxcl[i]<>0 then
                    begin
                      caption:=inttostr(i);
                      mxcd.dwValue:=i;
                      break;
                    end;
              end;
              mixerSetControlDetails(ItemIndex, @mxc, MIXER_SETCONTROLDETAILSF_VALUE);
        .............................................
        end;
        Ivan123, может у тебя в настройках аудиосистемы указано, что надо писать не только микрофон а ещё и добавлять к нему аудио-выход.
          Цитата amk @
          ещё и добавлять к нему аудио-выход

          я ведь выше написал что, что все приложения, в том числе и skype, и телефон работают нормально, иначе я бы слышал в наушниках собственный голос)
          А если вы имели ввиду вот эту птицу:

          ...то как видно из PS никакой птицы нет.
          Прикреплённый файлПрикреплённый файлMIXER_2.png (13,74 Кбайт, скачиваний: 1461)
            Попробуйте вот эти программы. Тоже на Delphi, с исходниками.
            WaveMeter - пишет с микрофона, PlayTone/PlayWave - воспроизводят.
            Если они будут работать нормально (одновременная запись и воспроизведение), можете там посмотреть как сделано (а у вас значит где-то косяк в коде). Там безо всяких микшеров.

            Прикреплённый файлПрикреплённый файлWaveMeter.zip (222,38 Кбайт, скачиваний: 565)
            Прикреплённый файлПрикреплённый файлPlayTone.zip (213,33 Кбайт, скачиваний: 556)
            Прикреплённый файлПрикреплённый файлPlayWave.zip (3,55 Мбайт, скачиваний: 546)
              Цитата Jin X @
              Если они будут работать нормально

              Спасибо конечно что пытаетесь мне помочь, но воз и ныне там)
              Можете сами попробовать и вы убедитесь что первые два софта не могут выполнить задачу которая стоит передо мной:
              1. подключите наушники с микрофоном через USB
              2. запустите одним приложением WaveMeter и нажмите на старт (если напоёте в микрофон визуально увидите что данные читаются)
              3. запустите вторым приложением PlayTone и нажмите воспроизведение одного из 3 сигналов (в наушниках вы услышите и сам сигнал и то что в этот момент говорите в микрофон)

              Отпишитесь пожалуйста что у вас получиться, очень удивлюсь если будет как нибудь иначе, для чистоты эксперимента попробую этот вариант на другом системнике.)
                Цитата Ivan123 @
                подключите наушники с микрофоном через USB
                У меня нет наушников с микрофоном для USB. Если не считать USB-аудиоинтерфейс, к которому подключен микрофон (через XLR) и колонки (через RCA - тюльпаны). Но с этой связкой всё нормально, микрофон пишется (шкала дёргается), звук воспроизводится без того, что я говорю в микрофон.
                Правда, есть ещё USB-"палочка" SB Play с джеками для входа и выхода. Но я не уверен, что вы это имеете в виду.
                Что у вас за наушники с микрофоном, подключаемые через USB ?
                  Цитата Jin X @
                  Что у вас за наушники с микро

                  Logitech USB Heeadset H340

                  Добавлено
                  Мне сейчас подумалось, что может быть вся проблема от того что в системе стоит ещё одна звуковая плата? (правда к её выходу непосредственно ничего не подключено кроме монитора)тем более что микрофон или наушники я воткнуть туда вообще не могу)
                  Я не совсем хорошо знаю организацию работы (вернее совсем не знаю)) мультимедийных устройств, но к сожалению я не могу проверить как этот вариант будет работать без второго канала аудио, поскольку он "вшит в видео".

                  Добавлено
                  Цитата Ivan123 @
                  не могу проверить как этот вариант будет работать

                  Отключил этот аудио канал в системе - результат тот же)
                  Сообщение отредактировано: Ivan123 -
                    Ну тут можно экспериментировать сколько угодно. Можно попробовать писать с гарнитуры, а выводить в другое устройство. Можно и писать, и выводить на другом устройстве. И ещё 100500 вариантов.
                    Вообще, такого глюка не должно быть. Может, это гарнитура так работает (или её драйвер).
                    p.s. Кстати, звук с микрофона с отставанием или нет?

                    Цитата Ivan123 @
                    1. мне не совсем понятно для чего проверять настройки системы/звуковой карты сторонними программами, если все встроенные мультимедийные функции в системе работают и так нормально, и кино и музыка и скайп и запись на микрофон и т.п.
                    Запись и воспроизведение по отдельности, может, и нормально работает, но вместе вот такой глюк получается. Причём, это может быть, например, только при использовании разных программ (поэтому Skype работает нормально; либо скайп может использовать не MME, а DirectSound, к примеру). Вариантов масса. Поэтому сторонними прогами есть смысл попробовать тоже. Проги MME, разумеется, тоже должны использовать.

                    Добавлено
                    Можно ещё попробовать работать через BASS. Ещё вариант для эксперимента... :)
                      Мне думается, имеет смысл выкладывать исходники. Ясно и внятно описать проблему. А то уж сколько страниц идет интенсивный поиск чего-то в тёмной комнате.
                        Цитата Jin X @
                        Ну тут можно экспериментировать сколько угодно

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

                        Цитата Prince @
                        Ясно и внятно описать проблему

                        я уже ранее писал, приходится повторяться
                        одно приложение считывает сигнал с микрофона (но не воспроизводит его сразу же на выходе, а записывает его в какой то промежуточный буфер (виртуальный блок памяти), и только). Второе приложение считывает эти данные, обрабатывает, изменяет по определённому алгоритму и записывает во второй промежуточный буфер. Третье приложение считывает из второго буфера и воспроизводит на выход. Что я нового написал? Просто средний кусок выбросил из предыдущего описания, он совершенно не имеет никакого значения для решения проблемы.
                        Для чего всё разбито на 3 (а может и 4 и 5 и тд) приложения можно догадаться и самому - разница по времени между первым и последним должна быть минимальной.

                        Цитата Prince @
                        А то уж сколько страниц идет интенсивный поиск чего-то в тёмной комнате

                        Если вы не понимаете в чём суть вопроса, это совсем не означает что на него нет ответа? и код кстати выложен выше - надо внимательнее читать тему чтобы давать советы.

                        Что касается ещё большей конкретики выкладываю схему стандартного микшера (просторы интернета), на которой крестиками указаны каналы которые необходимо отключить. В общем то весь вопрос заключается как это сделать программно). Кстати к сожалению люди которые меня туда отправили, почему то самоликвидировались, а мне их помощь в этом вопросе ох как нужна)
                        Прикреплённый файлПрикреплённый файлmixer_3.png (57 Кбайт, скачиваний: 1007)
                        Сообщение отредактировано: Ivan123 -
                          Цитата Ivan123 @
                          Вы так и не отписались об эксперименте с наушниками с микрофоном, или у вас нет возможности опробовать такой вариант?
                          Я же написал, что у меня нет USB-гарнитуры. Не покупать же специально для теста :)
                          Попробуйте сами другую гарнитуру, если есть возможность. Другую звуковуху.

                          Цитата Ivan123 @
                          и код кстати выложен выше - надо внимательнее читать тему чтобы давать советы.
                          Это не исходник, это кусок кода. Выложили бы полноценные проекты принимающей программы, обрабатывающей, выводящей звук. Чтобы другие могли потестить их у себя.

                          Цитата Ivan123 @
                          надо внимательнее читать тему чтобы давать советы.
                          Вам надо немного повежливее быть, а то иногда возникает ощущение, что вы одолжение делаете, позволяя другим давать вам советы...
                            Цитата Jin X @
                            надо немного повежливее быть

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

                            Добавлено
                            Цитата Ivan123 @
                            крестиками указаны каналы которые необходимо отключить. В общем то весь вопрос заключается как это сделать программно

                            При чём здесь модули обрабатывающие звук, и разве я просил потестить свою программу?, я выложил весь кусок кода который сумел написать касательно этого вопроса, а вас просил потестить тот софт который вы же мне и предложили в качестве решения проблемы) причём без всякого намёка на неуважение
                            Сообщение отредактировано: Ivan123 -
                              Цитата Jin X @
                              Кстати, звук с микрофона с отставанием или нет?

                              Звук без отставания
                              А у вас микрофон и колонки подключены к одной звуковой плате или микрофон к встроенному а колонки к отдельной звуковухе? если к разным, то первая программа открывает одно звуковое устройство для записи (только для записи), а вторая второе звуковое устройство для воспроизведения (мне так думается, хотя возможно я и ошибаюсь)

                              Добавлено
                              Цитата Jin X @
                              Попробуйте сами другую гарнитуру

                              Попробовал и не одну - результат тот же, вот другую систему проверить не удалось пока, поскольку Delphi только у меня

                              Добавлено
                              Цитата Jin X @
                              Чтобы другие могли потестить их у себя

                              Кстати мои программы и пишущая и воспроизводящая ничем не отличаются от WaveMeter и PlayTone, только я удалил все комментарии и проверки, все кнопки и картинки уровней (мне это ни к чему) . Код воспроизводящей лежит в предыдущей ветке, только там вместо синуса белый шум.
                              Сообщение отредактировано: Ivan123 -
                                Цитата Ivan123 @
                                Звук без отставания
                                Получается, что вы слышите свой голос одновременно с тем, как говорите + обработанный с задержкой.
                                Скорее всего, это какая-то аппаратная ерунда. Возможно, дефект на карте. Потому что программно вывести записанный звук без задержки не может даже система. Без задержек можно вывести только используя ASIO. Даже если вы поставите галочку "прослушивать звук", он будет звучать не сразу, попробуйте.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0518 ]   [ 22 queries used ]   [ Generated: 18.04.24, 17:06 GMT ]