|
19.09.2007, 20:08
|
#16
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Re: Меню
ээ с каналами это точно, надо вот так вот:
1) Создаем переменную для канала( напр kanal1 = PlaySound(sound))
2) Затем когда начинается загрузка игры выключем канал таким вот образом StopChannel kanal1
Вроде так должно работать.
PS. Где sound там дожно быть имя переменной содержащей звук( или хотя бы команда LoadSound("твоя_музыка"))
PSS.
Точно скзаать не могу, но там вроде надо с каналами работать.. как-то , вроде, создавать канал, в него записыват музон, проигрывать канал (также через каналы можно управлять громкостью и стерео), и останавливать его...
|
В таком случе PlayMusic работать не будет.
PSSS. И еще LoadSound() загружает только mp3,wav,raw,ogg
__________________
|
(Offline)
|
|
19.09.2007, 20:13
|
#17
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Re: Меню
говоря музон, я не имел ввиду команду PlayMusic.. я имел ввиду музон
|
(Offline)
|
|
05.10.2007, 20:32
|
#18
|
Оператор ЭВМ
Регистрация: 20.02.2007
Сообщений: 37
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Меню
Чоу то у меня не получается так сделать.
mr.DIMAS, можешь поподробнее написать?
|
(Offline)
|
|
05.10.2007, 21:44
|
#19
|
Нуждающийся
Регистрация: 01.07.2007
Сообщений: 58
Написано 15 полезных сообщений (для 49 пользователей)
|
Re: Меню
В процессе воспроизведения может понадобится остановка звука, продолжение его проигрывания, изменения каких-либо характеристик, увеличение-уменьшение громкости и т.д. Давайте приведем небольшой пример, как это можно реализовать в Blitz3D. Подопытным файлом будет .mp3 файл с битрейтом 44 кГц. Алгоритм действий будет таков: начнем воспроизводить файл, приостановим воспроизведение, продолжим проигрыш, изменим частоту звучания, вернем исходную частоту и, напоследок, поочередно сместим воспроизведение для правого и левого динамика. Код для нашего алгоритма будет выглядеть так:sound=LoadSound("sound1.mp3")
LoopSound sound
channel=PlaySound(sound)
Print"Playing sound for 2 seconds ..."
Delay 2000
Print"Pausing sound for 2 seconds ..."
PauseChannel channel
Delay 2000
Print"Restarting sound ..."
ResumeChannel channel
Delay 2000
Print"Changing frequency of sound ..."
ChannelPitch channel, 22000
Delay 2000
Print"Restore previous frequency of sound ..."
ChannelPitch channel, 44000
Delay 2000
Print"Left speaker only"
ChannelPan channel,-1
Delay 2000
Print"Right speaker only"
ChannelPan channel,1
Delay 2000
Print "All Tests complete!"
StopChannel channel11.2. Каналы и регулировка громкости
Как вы поняли из предыдущего пункта урока, дальнейшая манипуляция звуками и музыкой после загрузки и начала воспроизведения основывается на методике каналов: (CHANNEL ). Следовательно при вызове функции PlaySound() вы должны назначить возвращаемое значение непременной символизирующей канал таким образом:
chnWave = PlaySound( mySound ) Все последующие функции работы со звуком, используют впоследствии эту переменную, а не переменную, возвращаемую функцией LoadSound(). Это такие функции как: StopChannel(), PauseChannel(), ResumeChannel(), ChannelPitch(), ChannelVolume(), ChannelPan(), and ChannelPlaying(). В качестве первого аргумента всех этих функций как раз и выступает переменная chnWave (в нашем случае). Естественно, что благодаря этому вы можете воспроизводить параллельно несколько звуков, проигрывать музыкальный трек и по ходу дела менять параметры воспроизводимых эффектов - громкость, частоту и т.д.
Давайте сделаем маленькую программу, меняющую громкость звуков и музыки при нажатии клавиш. Стрелки "вправо - влево" - будут менять звуки речи, а "вперед - назад" - музыкальный "бэкграунд" (в качестве которого будем использовать звук ветра из первого пункта текущего урока)
Print"Press arrows to change the Volume"
sound1=LoadSound("sound1.mp3")
LoopSound sound1
sound2=LoadSound("wind1.mp3")
LoopSound sound2
channel1=PlaySound(sound1)
channel2=PlaySound(sound2)
iSpeechVolume# = 0.2
iWindVolume# = 0.4
ChannelVolume channel1, iSpeechVolume
ChannelVolume channel2, iWindVolume
WhileKeyDown(1) <> True
IfKeyHit(203) = True
If iSpeechVolume > 0
iSpeechVolume = iSpeechVolume - 0.1
EndIf
ChannelVolume channel1, iSpeechVolume
EndIf
IfKeyHit(205) = True
If iSpeechVolume < 1
iSpeechVolume = iSpeechVolume + 0.1
EndIf
ChannelVolume channel1, iSpeechVolume
EndIf
IfKeyHit(20 = True
If iWindVolume > 0
iWindVolume = iWindVolume - 0.1
EndIf
ChannelVolume channel2, iWindVolume
EndIf
IfKeyHit(200) = True
If iWindVolume < 1
iWindVolume = iWindVolume + 0.1
EndIf
ChannelVolume channel2, iWindVolume
EndIf
Wend
EndВыполните программу и нажимайте стрелки "вправо-влево", "вперед-назад" для изменения громкости ветра и речи. Изменения происходят в диапазоне от 0 до 1.
Помимо функции LoadSound() Blitz3D поддерживает функцию PlayMusic() для множества музыкальных форматов, перечисленных выше. В отличии от функции LoadSound() она сама загружает и начинает проигрывать музыкальный файл. PlayMusic() возвращает переменную канала, которая обрабатывается уже известными Вам способами.
Внимание: для проигрывания .mid (MIDI файлов) нужно обновить Blitz3D до версии 1.88 иначе на некоторых компьютерах воспроизведение данного формата музыкальных файлов может не происходить!
11.3. Объемный звук
Каким бы качественным не был звук в игре, он не может создать полноты ощущения присутствия без применения объемного звука. Blitz3D обладает набором функций для эмуляции трехмерного звучания. Так, например, звук может быть связан с каким-то объектом, а слушателем звука, будет наш игрок (или связанная с ним камера). Тогда при изменении взаимного положения этих объектов, мы почувствуем изменение направления источника звука, а также уменьшении или увеличение его громкости при удалении или приближении к этому источнику.
Функций для работы с объемным звуком всего три:
Load3DSound()
CreateListener()
EmitSound()
Функция Load3DSound(filename$) - загружает звуковой файл и возвращает его идентификатор для работы функции EmitSound()
Что касается функции CreateListener(), то в ее обязанности входит установка объекта, который будет улавливать звук. В большинстве случаев в качестве такого объекта выступает камера. Также функция CreateListener() принимает три опциональных параметра:
rolloff_factor# - коэффициент, по которому звук уменьшается на расстоянии (1 по
умолчанию.)
doppler_scale# - соответствие закону эффекта допплера. (1 по умолчанию.)
distance_scale# - масштаб расстояний между объектами (1 по умолчанию.)
И последняя функция: EmitSound() - собственно воспроизводит объемный звук, в в зависимости от текущего положения объектов источника и приемника звука. Этой функции можно передавать два аргумента:
sound - идентификатор звука, загруженного ранее функцией Load3DSound()
entity - объект - источник звука.
Располагая этими тремя функциями, звуковым файлом, известной уже моделью кораблика (ship1t.md2 с его текстурой ship.jpg) и анимированной текстурой воды (wateranim.jpg)
создадим небольшой пример для демонстрации объемного звука. Задание для примера: загрузить модель корабля, звук, связать объект приемника звука с камерой, а источник с кораблем. Все это решается следующим кодом:
Graphics3D 640, 480,16,2
SetBufferBackBuffer()
Global Ship
player=CreateSphere()
PositionEntity player, -12, 1, -5
cam=CreateCamera(player)
TurnEntity player, 0,0,0
TurnEntity player,0,-30,0
light=CreateLight(2)
PositionEntity light,0,60,30
; Load the animation strip for the water texture
watertext=LoadAnimTexture("wateranim.jpg",256,124,124,0,25)
water=CreatePlane()
PositionEntity water,0,0,0
ScaleTexture watertext, 20,20
PlaceShip()
listener=CreateListener(cam,1,1,1)
shipsound=Load3DSound("boat.wav") ; Load 3D sound
LoopSound shipsound
EmitSound(shipsound, ship)
WhileKeyHit(1) <> True
wd=wd+1
If wd=4
EntityTexture water,watertext,frame,1
frame=frame+1
If frame=22 Then frame=0
wd=0
EndIf
MoveEntity ship, 0,0,-0.01
If KeyDown(200) MoveEntity player,0,0,0.1
If KeyDown(20 MoveEntity player,0,0,-0.1
If KeyDown(203) TurnEntity player,0,2,0
If KeyDown(205) TurnEntity player,0,-2,0
UpdateWorld()
RenderWorld()
Flip
Wend
End
;=====================
Function PlaceShip()
shiptex = LoadTexture("ship.jpg")
Ship = LoadMD2("ship1t.md2")
ScaleEntity Ship, 0.1, 0.1, 0.1
EntityTexture Ship, shiptex
PositionEntity ship, 0,0,0
End FunctionКак видно из приведенного фрагмента - вся работа со звуком укладывается в четыре строчки:
listener=CreateListener(cam,1,1,1)
shipsound=Load3DSound("boat.wav") ; Load 3D sound
LoopSound shipsound
EmitSound(shipsound, ship) Первая строчка назначает камеру в качестве приемника звука, затем грузится звук. Известная по предыдущим примерам функция LoopSound() указывает на необходимость повторения звука в цикле и последняя строка посылает команду на воспроизведение с назначением объекта корабль в качестве источника звука.
Вот это должно помоч
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:35.
|