|
|
||
|
Музыка по жанрам Еще по теме Материалы о музыке |
Теги страницы: Добавлять эффекты в текущем времени не так просто, как с помощью Direct- Music Producer, но все равно особых хитростей не требуется; также это научит вас еще одной необходимой методике: конкретно, как получить интерфейс к буферу DirectSound лежащему в основе звуковой дорожки. Напрямую с DirectSound вы работали в главе 2, когда вы разбирал и. как можно поместить поток байтов во вторичный буфер DirectSound, смикшировать и вывести его на динамики через первичный буфер. Внутри DirectMusic происходит тот же процесс, за исключением того что поток байтов генерируется не вашим кодом, а синтезатором DirectMusic. Каждая из звуковых дорожек DirectMusic на самом деле является вторичным буфером DirectSound, и на каждый буфер могут действовать несколько эффектов. При микшировании этих вторичных буферов в первичный DirectX Audio применяет действующие эффекты. Включение или выключение эффекта в текущем времени совершается путем выбора верного буфера DirectSound и добавлением или удалением эффекта для него. Каждый эффект, примененный к буферу, имеет свои собственные параметры, структуру и интерфейс для выставления или получения определенных значений для этого эффекта. Например, если вы хотите изменить задержку для эффекта эхо, вы берете интерфейс iPireciSoundbXFxhoS, который вам нужен, заполняете соответствующие члены структуры параметров DSFXbcho и передаете эту структуру методу SetAllParameters интерфейса I PirectSoimdFXFxho8. Программирование эффектов DirectX Audio. Для каждого эффекта существует GUID, описанный в файле dsounti.h. Например, название GUID для эффекта эхо GUID_DSFX_STANDARD_ECHO. Эти GUID являются способом объяснить DirectX Audio, что за эффект вам нужен. Чтобы использовать эффект, вы делаете две вещи. Во-первых, вам нужно получить интерфейс вторичного буфера DirectSound звуковой дорожки, для которого вы хотите использовать эффект. После того как вы получили интерфейс буфера, вы вызываете его метод SetFX, чтобы применить все ваши эффекты к буферу. После того как эффект применен, вы можете получить его интерфейс и настроить его параметры. Гипотетически, так может выглядеть код этого процесса (полагаем, что ai.dio- path - это интерфейс звуковой дорожки, к которой вы хотите применить эффект). В таком виде код нигде не используется - в реальности он разбросан по нескольким разным местам (о чем вы узнаете позже). Но так бы он выглядел, если бы вы работали строго с DirectX Audio; этот код показывает минимум шагов, необходимых для использования эффекта эхо для конкретной звуковой дорожки (точнее, для буфера DirectSound конкретной звуковой дорожки). Код начинается с получения интерфейса JDirectSoundUuflerS содержащегося в звуковой дорожке. Этот интерфейс сохраняется в directsoiindbijffer Далее, код задает структуру DSEFFECTDESC. Эта сообщает DirectX Audio, какого рода эффекты требуются. Метод буфера SetFX позволяет использовать несколько эффектов сразу; на вход методу подается массив структур, где каждая структура содержит GUID эффекта, который будет использоваться. Первый параметр для SetFX это количество структур DSEFFECTDESC, которые вы подаете ей на вход; второй параметр - это адрес первой структуры массива. Третий параметр - это адрес массива DWORD с количеством элементов, равным количеству структур DSEFFECTDESC. Если с каким-либо эффектом возникают проблемы, то DirectX Audio помещает код в соответствующий элемент массива. Это может быть использовано для определения, что конкретно вызвало ошибку в вызове SetFX. После того как SetFX закончит работу без ошибок, эффект эхо будет приложен к звуковой дорожке, но эффект эхо будет использовать значения по умолчанию. Чтобы изменить код получает интерфейс для эффекта эхо, вызывая GetObjectUi- Path. После этого настраиваются параметры, содержащиеся в структуре DSFXEcho, и новые значения устанавливаются для эффекта, через вызов SetAllParameters. В конце полученные интерфейсы освобождаются. Повторю еще раз, это только гипотетический код - на самом деле, различные шаги разбросаны по разным классам, о чем вы сейчас узнаете. |
|