|
|
||
|
Музыка по жанрам Еще по теме
Материалы о музыке |
Теги страницы: Требуется некоторая практика, чтобы научиться настраивать все эти различные величины так, чтобы получить хорошо звучащее окружение (т. е точно передать ощущение необходимого вам места). В качестве помощи вы можете использовать несколько предустановленных эффектов. Они охватывают широкий диапазон окружающих сред и освобождают вас от необходимости разбираться с отдельными переменными. Использование этих предустановок очень просто, просто вызовите метод SetPreset интерфейса и передайте ей GUID необходимой вам предустановки. Полный лист GUID включен в документацию DirectX по методу SetPreset. Конкретные значения переменных для каждой предустановки можно найти в заголовочном. Создание редактора окружения. Как вы могли заметить, числа не самоочевидны. Чтобы правильно создавать завораживающие звуковые с помощью отражений I3DL2, вам необходима та, которая позволит вам настраивать эти значения и незамедлительно слышать результат ваших настроек. Другими словами, вам нужен редактор окружения. К счастью переменных не так много. Простого диалога с 12 бегунками (или иначе, ползунками) должно хватить для простого редактора, так что его вы и научитесь создавать. Как вы видите, это просто несколько бегунков, кнопки загрузки и сохранения плюс несколько кнопок для поиска и воспроизведения WAV файла. Посмотрите, как работает пример программы Chi 5p2_I3DL2EnvEditor - последующие разделы объяснят вам эту программу. Если до сих пор у вас не было большого опыта работы написания для Win32 GUI, то этот пример может показать вам пару тркжоз в этой области. Инициализация. В Win 32 программировании с бегунками (trackbars) легко работать, только если вы не забыли вызвать функцию Win32 API InilCommonConlvols. Если вы не смогли ее вызвать, то у вас не получится создать ни одного окошка с бегунком в нем. Бегунки, в отличие от остальных элементов управления (кнопки, поля редактирования и т. д.), не были частью первоначального Windows GUI. Они были созданы позже, и необходимость в вызове функции. Работа с бегунками. Я не собираюсь объяснять стандартный механизм создания немодального диалогового окна и цикла обработки сообщений для него — существует несколько хороших вводных книг по программированию в Windows, которые объясняют этот материал и объясняют его хорошо. Но я хочу потратить некоторое время на объяснение вам того, как работают выполняемые функции GUI. Бегунки, как и любой другой элемент контроля, работает, используя сообщения Windows. Три самых важных сообщения, которые вы можете послать бегунку. ТЕМ SETRANGE. Устанавливает максимальное и минимальное значение ползунка. TBMJ5ETP0S. Устанавливает текущую позицию бегунка. TBM_GETPOS. Возвращает текущую позицию бегунка Когда пользователь перемещает бегунок, он уведомляет родительское окно, посылая сообщение WM_HSCROLL (для бегунков, ориентированных горизонтально) "или сообщение WM VSCROLL (для бегунков, ориентированных вертикально). Пока все выглядит очень просто, да? Все, что вам нужно - это отправить каждому бегунку сообщения, чтобы инициализировать диалоговое окно. После этого. вы отслеживаете сообщения WM_HSCROLL и посылаете ТВМ GR I POS, чтобы получить новую позицию бегунка. Но есть одна маленькая ловушка - бегунки принимают только целочисленные значения. Для большинства приложений это не проблема, но этот пример программы имеет несколько значений, которые могли быть числами с плавающей точкой. Например, существует переменная задержки отражения, flReverbDelay, которая имеет минимальное значение 0,0 и максимальное 0,1. Чтобы обойти эту проблему, вам необходимо все масштабировать умножением. Например, вы можете решить умножать значения flReverbDelay на Н.ККЮ. получая таким образом приличный целочисленный диапазон от 0 до I ООО. Тогда все будет в порядке, если вы не будете забывать умножать значения flReverbDelay на пути к ползунку и делить позицию ползунка на эту величину, после получения позиции через TBMJ3ETPGS. В примере программы ног имеются две функции Refresh Slider. Функция, которая требует целочисленные значения, не делает ничего особенного; функция, требующая значения с плавающей точкой, также требует фактор масштабирования. Совет. Бегунки способны на гораздо большее, чем я здесь рассказал. Например, вы можете также поставить им в соответствие шкалу отсчета и автоматически управлять другими элементами управления. Для более подробной информации обращайтесь к документации по MSDN, конкретно, Platform SDK\User Interface Servic- es\Shell and Common Controh\TrackbarControls. Загрузка и сохранение окружений. Простым способом записи и сохранения чего-то, что лежит в структуре, является запись отпечатка памяти этой структуры в качестве бинарного файла напрямую на жесткий диск. И это именно то, что делает этот простой редактор. Вот функции для записи и загрузки с диска. Как можно понять, весь этот код работает с обычными диалоговыми окнами загрузки и записи файла. Для использования этих диалогов, вы должны заполнить структуру OPENFILENAME. Вы можете посмотреть справку по функции GetOpen- FileName в MSDN, чтобы выяснить, что значит каждое конкретное значение в структуре OPENFILENAME. После того как структура заполнена, отображение диалога сводится к вызову GelOpenFileName. Если пользователь щелкает на ОК. функция вернет true и далее последующий код позаботится о сохранении или загрузке файла. Редактор - подытожим. Конечно, это совсем простой редактор. Редактор для профессиональной игры будет гораздо сложнее этого - он будет брать в расчет позицию персонажа в игровом мире и также позволит разработчикам игры настраивать различные части уровня, каждая часть со своими параметрами звукового окружения. Чтобы вы знали к чему стремиться, приведу несколько путей улучшения программы, U заставить ее сохранять параметры в более стандартном формате, таком, как > Ml...LI Добавить поддержку предустановленных окружений - я представляю себе это в виде ниспадающего меню, которое позволяет вам выбрать предустановку, настроить ее и сохранить в качестве нового окружения. Ввести элементы управления, позволяющие пользователю редактировать, кроме свойств окружения, еще и свойства 3D приемника и источника DirectSound. Достаточно часто настройка одного вызывает необходимость настройки другого. I3DL2: подытожим. Вам нужно знать, что I3DL2 позволяет большее, чем просто рассчитывать отражения. I3D 1,2 также определяет интерфейс для задания преград и помех, два понятия, которые одинаково важны в 3D звуке (далее будут даны их определения). Через расширения свойств DirectSound вы можете получить доступ к исполняемым функциям ирегтлд и помех и использовать их для создания еще более реалистичной атмосферы в вашей игре. Если вы хотите больше узнать о I3DL2, проверьте A-SIG's 3D Audio Working Group. |
|