Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка звука  (Прочитано 15500 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Tomat
Гость
« : 16-01-2004 18:11 » new

Мне нужно эмулировать/перехватывать буфер вывода звуковой карты обрабатывать, и только потом аж посылать на выдачу (т.е. играет музыка запускается моя прога - музыка начинает играть уже через мою прогу) Как мне это сделать? Помогите кто чем может.
Записан
grozny
Гость
« Ответ #1 : 16-01-2004 23:16 » 

а точнее? ОС? АПИ (ДиректСаунд, ДиректМьюзик, winMM)? или прям железные буфера (что малореально, они у всех разные).

Если директсаунд или мьюзик - то можно фильтры свои втыкать. Подробностей не знаю, читай мануалы/примерчики в DX SDK.
Записан
ixania
Гость
« Ответ #2 : 16-01-2004 23:43 » 

Да и некоторые проги, такие как WINAMP поддерживают плУгины, вот там и ковыряйся в музыке  Жжешь
Записан
Tomat
Гость
« Ответ #3 : 17-01-2004 06:34 » 

Мне нужно чтобы программа не только WinAmp обрабатывала, а любую информацию которая попадает в Render звуковой карты! Т.е. грубо говоря - у меня есть фильтр(задержки) и мне нужно чтобы они применялись ко всем звукам издаваемым компом, а не только к WinAmp овским.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 17-01-2004 06:41 » 

Tomat, чегото я такое читал насчет DirectX мол умеет только надо последовательность фильтров построить. О вспомнил в журнале программист я это читал, если дома номер сохранился посмотрю.
Записан

Странно всё это....
Tomat
Гость
« Ответ #5 : 17-01-2004 21:06 » 

У меня есть программа обрабатывающая звук на проце, мне не нужны ресурсы зв. карты для этих целей. Но мне нужно сделать так чтобы перед процедурой Render зв. карта вызывала мою процедуру\минипорт\ДЛЛку.
Записан
grozny
Гость
« Ответ #6 : 18-01-2004 04:49 » 

дак напиши враппер, который будет перехватывать метод из длл-ки ДиректСаунда и пропускать через себя.
Записан
Tomat
Гость
« Ответ #7 : 18-01-2004 06:28 » 

Я новичек в деле програмирования врапперов, в какой области смотреь то ?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #8 : 19-01-2004 10:21 » 

Tomat, а еще можно поставить свой драйвер-фильтр для драйвера звуковой карты.
Записан

Megabyte be with you!
Tomat
Гость
« Ответ #9 : 19-01-2004 17:34 » 

Как это все сделать, где искать, хотя бы в какой области. У меня  сейчас програмой генерится звук, далее он разлагается в спектр, вводятся задержки на разных частотах, далее IFFT собирает звук обратно, звуковая играет этот звук. Мне хочется чтобы моя программа работала так что бы любой звук на компе шел через нее. т.е. типа было Program -> Render (SoundCard) , а должно стать Program -> Мой Врапер ->Render (SoundCard). Для программ она должна быть не заметна, прозрачна, и может называтся не Врапером а как хотите. Как мне это сделать. Извините что несколько сумбурно.
Записан
grozny
Гость
« Ответ #10 : 19-01-2004 21:26 » 

технология враппера (обёртки) - ну, гм, смотреть особо негде. Один из способов общей теории систем для ревёрс-инжиниринга, бинарного рефакторинга и прочих умных слов.

В виде книжки не встречал, изустные предания интернета Улыбаюсь.


Смысл-то простой: есть чёрный ящик. Мы "оборачиваем" его входы и выходы. И манипуляцией данных на входе/выходе получаем нужный нам результат.

Применительно к виндовс и динамическим библиотекам (директсаунд и прочие иксы лежат в динамических библиотеках): чужая программу загружает целевую длл, как обычно, но на самом деле грузит твою собственную. А твоя собственная длл в манипулирует входными данными и вызывает по своему усмотрению целевую длл. Всё  прозрачно. Тыща и один способ реализации:

- подменить целевую длл своей, а оригинал сохранить под другим именем,
- подменять таблицу импорта, перехватывая LoadLibrary
- перерегистрировать СОМ-объекты
- запатчить таблицы ядра

2-й и 3-й самые элегантные, 1-й - самый простой в реализации. А против 4-го нету спасения, но он весьма чувствителен к версии системы (сервис-пакам и пр.)

ну и фильтр-драйвер можно написать, но для данной задачи у меня есть сомнения, что это лёгкий путь. Как минимум, надо хорошо ориентироваться в ХР ДДК и ДиректХ ДДК. Что непросто, да и отлаживаться в кернел-моде значительно сложнее, чем в обёртке на 3-м кольце
Записан
Tomat
Гость
« Ответ #11 : 19-01-2004 22:33 » 

2-й и 3-й самые элегантные, 1-й - самый простой в реализации. А против 4-го нету спасения, но он весьма чувствителен к версии системы (сервис-пакам и пр.)
//
спасибо за совет
Записан
Anonymous
Гость
« Ответ #12 : 19-01-2004 23:16 » 

ну вот ещё подробнее о рецепте (для 1-го и второго методов):

- изучить таблицу экспорта целевой ДЛЛ
- написать заготовку ДЛЛ с таблицей экспорта, совпадающей с целевой, назвать так же, как целевую, целевую предварительно сбэкапить и переименовать
- в ДЛЛМэйн() своей ДЛЛи грузить целевую ДЛЛ (переименованную!)
- при вызове экспортируемой ф-ции вызывать соответствующую ф-цию целевой ДЛЛ

ну и теперь запустить некоторую программу, которая использует цлевую ДЛЛ. Если ничего не упало, то первый этап - абсолютно "прозрачная" обёртка - успешно пройден.
Записан
grozny
Гость
« Ответ #13 : 19-01-2004 23:21 » 

пред. сообщение - моё. не заметил оффлайна
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #14 : 20-01-2004 12:14 » 

Tomat, про драйверы-фильтры и как их подгружать в стек драйверов есть раздел драйверы плюс на сайте есь очень толковая книжка по драйверам
Walter Oney "Программирование WDM"
Записан

Megabyte be with you!
Tomat
Гость
« Ответ #15 : 23-01-2004 06:29 » 

Спасибо всем за помощь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines