Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
GLScene - Трехмерный звук

Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru

В этой статье мы рассмотрим использование трёхмерного звука. Для этого мы будем использовать два звуковых менеджера: FMOD и BASS. Для этого нам понадобятся две библиотеки: fmod.dll и bass.dll. Их вы можете найти в папке SoundAPIs (в вашем каталоге GLScene\Source) например: “C:\GLScene\Source\SoundAPIs”.

Их можно копировать в папку с вашей программой, или поместить в папку System (C:\WINDOWS\system).

Займёмся внешним видом программы:

Помещаем на форму GLScene, GLSoundLibrary, GLCadencer, GLSMFMOD и GLSMBASS. Так же добавим на форму две RadioButton (FMOD и BASS), и две обычных кнопки(MP3 и Wav). С внешним видом разобрались. Должно получиться что-то вроде этого:


Далее создадим одну камеру(Camera), источник света(LightSource), куб(cube) и круг(sphere).

Зададим координаты круга(он будет издавать звук):

X = 2
Y = 0,5
Z = 0

Координаты камеры(не забудьте направить её на куб):

X = 0
Y = 5
Z = 10

Направьте источник света на куб. Задайте значение RadioButton2.Cecked = True ведь BASS менеджер будет активен с самого начала. Далее переходим к кодингу. В раздел uses Добавим Geometry. При создании формы добавим нашу музыку (или звуки) в звуковую библиотеку:

procedure TForm1.FormCreate(Sender: TObject);
begin
  GLSoundLibrary1.Samples.AddFile('Susl.wav');
  GLSoundLibrary1.Samples.AddFile('Wolf.mp3');
end;

Заставим вращаться круг вокруг куба, это и будет наше 3D:

procedure TForm1.GLCadencer1Progress(Sender: TObject;
  const deltaTime, newTime: Double);
begin
  Sphere1.Position.SetPoint(sin(60 * DegToRad(newTime)) * 2, 0.5,
    cos(60 * DegToRad(newTime)) * 5);
end;

Далее при нажатии на радио кнопки будут меняться звуковые менеджеры:

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  if GLSMFMOD1 <> GLSound.ActiveSoundManager then
  begin
    ActiveSoundManager.Active := False;
    GLSMFMOD1.Active := True;
    GLSound.GetOrCreateSoundEmitter(Cube1).Playing := True;
  end;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  if GLSMBASS1 <> GLSound.ActiveSoundManager then
  begin
    ActiveSoundManager.Active := False;
    GLSMBASS1.Active := True;
    GLSound.GetOrCreateSoundEmitter(Cube1).Playing := True;
  end;
end;

А при нажатии на кнопки проигрываются звуки:

procedure TForm1.Button1Click(Sender: TObject);
begin
  with GLSound.TGLBSoundEmitter.Create(Sphere1.Behaviours) do
  begin
    Source.SoundLibrary := GLSoundLibrary1;
    Source.SoundName := 'Wolf.mp3';
    Playing := True;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  with GLSound.TGLBSoundEmitter.Create(Sphere1.Behaviours) do
  begin
    Source.SoundLibrary := GLSoundLibrary1;
    Source.SoundName := 'Susl.wav';
    Playing := True;
  end;
end;

Всё. Не так сложно как кажется!

Вот исходник (без библиотек)

Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.