Конференция "Media" » Декодировка и синтез звукового потока [D7, WinXP]
 
  • FILCHERD © (18.08.10 16:00) [0]
    Люди. Есть такая задача. Нужно создать программу, которая будет захватывать звук (с микрофона), разделять его на пики и записывать в массив. Допустим, частота дискретизации 44100Гц значит программа обработая звук запишет в массив 44100 значений замера звука. За следующую секунду программа просто перепишет массив аналогичным образом. Далее этот массив обработает некий алгоритм и уже из полученных данных синтезирует звук, и выведет его через динамики.
    Я сам пытался разобраться в этом на примере исходников, но так ничего и не понял. Помогите пожалуйста, а то в мультимедии на Делфи Я новичок. :)
  • Сергей М. © (20.08.10 15:15) [1]

    > так ничего и не понял


    Что конкретно не понял ?
  • FILCHERD © (20.08.10 15:42) [2]
    Как это реализовать. Там вроде API функциями орудовать надо. Пытался разобраться по исходникам. Могу выложить или ссылки кинуть.
  • FILCHERD © (20.08.10 15:51) [3]
  • Сергей М. © (20.08.10 15:55) [4]

    > Там вроде API функциями орудовать надо


    Нечего новичку лезть в WinAPI.
    Используй готовые сторонние дельфийские компоненты, например, New Audio Components
  • FILCHERD © (20.08.10 16:13) [5]
    По WinAPI хоть документация есть, а у этих New Audio Components всё на английском. Хотя, если ты знаешь как это с помощью New Audio Components сделать, буду рад услышать.
  • Сергей М. © (20.08.10 16:20) [6]
    Учи английский, без него никуда.
  • FILCHERD © (20.08.10 16:24) [7]
    Инглиш то знаю, а доков по компонентам не густо.
  • Сергей М. © (20.08.10 16:37) [8]

    > Инглиш то знаю


    Если знаешь, то в чем проблема ?
    На сайте производителя этого пакета компонентов есть онлайн-версия документации.
  • FILCHERD © (20.08.10 17:23) [9]
    Но там не написано как разбивать и синтезировать звуковой поток по сэмплам. Не наугад же искать функцию типа RenderSample() или GetSample(). Если знаешь чего по этим компонентам, то можешь подсказать.
  • Сергей М. © (20.08.10 17:49) [10]
    Ну возьми компоненты попроще, если NAC совсем уж новые ворота

    http://sourceforge.net/projects/deaudio/

    Там достаточно понятная даже для новичков событийная модель
  • FILCHERD © (20.08.10 19:19) [11]
    Мда... Опять не то. Ну во первых там нечего качать. Во вторых вряд ли
    "This set of audio components will allow you to play, record, and compress audio data." поможет Мне распотрошить поток на семплы... Ну а в третьих опять те же примеры. Незная теории не поднять самолёт в воздух...
  • FILCHERD © (20.08.10 19:21) [12]
    Похоже опять прийдётся сношаться с API и мучать знакомых, знакомых с Делфи... :)
  • Сергей М. © (20.08.10 21:29) [13]
    http://www.torry.net/authorsmore.php?id=2148

    > распотрошить поток на семплы

    Не надо ничего "потрошить". Все уже "распотрошено".
  • Pavia © (22.08.10 21:11) [14]

    > Нечего новичку лезть в WinAPI.Используй готовые сторонние
    > дельфийские компоненты, например, New Audio Components

    Плохой совет. В вин API все чисто и прозрачно. Или почти.

    А чтобы было понятно советую почитать Ритхера.
    Лучше два буфера один обрабатываешь во второй пишешь. потом меняешь местами.
  • FILCHERD © (23.08.10 10:58) [15]
    А кто этот Ритхер и где его взять? Я ведь даже основ аудио в делфи не знаю, имею только небольшие теоретические представления об этом.
  • FILCHERD © (24.08.10 02:18) [16]
    А буфер это массив? Как из него можно переписывать данные и записывать в него? Мне бы примеры кода по обработке звука. В New Audio Components нашёл много интересных компонентов, да вот как-то дело не продвигается. Непонятно как с этим работать. Функции кагбе не те, которые Я хотел бы видеть...

    А насчёт аудио... Как Я себе это представляю сейчас опишу. Буду опираться на New Audio Components, т.к. WinAPI Я вообще не знаю. Ежели чего неправильно поправляйте.
    Итак. Сначала программа должна инициализировать устройство. В NewAC устройство выбирается по номеру (DeviceNumber). Далее каким-то неизведанным Мне алгоритмом (по крайней мере функции DXAudioIn.Run нет, а сам по себе DXAudioIn не даёт о себе знать) должен активироваться DXAudioIn и начать запись семплов в буфер. Буфер (по-моему) это некий массив, который служит для хранения значений замера звука (семплов) и перезаписывается каждый раз, когда запись доходит до конца. Тоесть если частота дискретизации 44100Гц и буфер размером больше третьего... шутка. :) размером 44100 значений (0..44100), то он будет обновляться каждую секунду. Если на 22050 значений, тогда обновление каждую 0.5 секунду и.т.д.
    Выводится аудио похожим способом (по моему). Данные берутся из буфера, преобразуются в сигнал, смешиваются с другими в Виндовс, через ЦАП звуковухи импульсы идут в динамик, а потом летят к нам в ухо, что уже не особенно важно.:)
    Дык вот вернёмся к нашим баранам. Меня интересует несколько вещей.
    1)Как заставить DXAudioIn работать на Меня.
    2)Как из DXAudioIn буфера скопировать данные в массив.
    3)Как заставить уже DXAudioOut Мне подчиняться, и куда ему, в какой буфер (если есть) вставлять Мой массив и как.
    Напомню. Входной массив обрабатывает "некий алгоритм" (это уже не важно) и выдаёт в выходной.

    Чем смогите помогите. Буду рад всему. Не обязательно это будет New Audio Components. Можно и API, но тут Я уже врядли разберусь, хотя... В общем любая помощь будет кстати. Но помните. В мультимедии Я ышо нуб. :)
  • Сергей М. © (24.08.10 09:47) [17]

    > Мне бы примеры кода по обработке звука. В New Audio Components


    Ну там же демо-проект AudioRecorder.dpr есть, в нем демонстрируется и запись и воспроизведение - чем он тебе не пример ?


    > 1)Как заставить DXAudioIn работать на Меня


    Он ни на кого кроме тебя не работает.
  • FILCHERD © (24.08.10 20:07) [18]
    Не работает этот DXAudioIn вообще. Его наверное как-то надо активировать.
    И проекта такого в Моей папке нет. Есть другие, но это не то.
    Сергей М. Я вижу ты толковый человек, и наверняка разбираешься в New Audio Components. Дык подскажи Мне пожалуйста как читать из буфера АКТИВНОГО DXAudioIn и заставить воспроизводить DXAudioOut массив значений сэмплов. А то эти буфера вообще непонятная штука, как и компоненты.
  • Сергей М. © (25.08.10 09:54) [19]

    > проекта такого в Моей папке нет


    Не знаю в какой такой "твоей", но папка Demo в штатном комплекте поставки пакета deAudio-компонентов быть обязана.

    http://delphi-lab.ucoz.ru/load/0-0-0-33-20
 
Конференция "Media" » Декодировка и синтез звукового потока [D7, WinXP]
Есть новые Нет новых   [120173   +8][b:0][p:0.001]