Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Основные принципы:
С помощью TDXSound вы можете создавать звуковые эффекты в вашей программе. Все
что Вам понадобится это поставить на форму 2 компонента: DXSound и DXWaveList.
Последний является "коллекцией wav файлов". В который вы будете заносить wav
файлы.
Установите
DxWaveList1.DXSound := DXSound1
. В этот DXSound будет воспроизводиться звук. Чтобы проиграть звук вам надо в DxWaveList1 добавить какой нибудь wav файл. После чего вызвать
dxwavelist1.items[0].play(false);
Будет проигран звук, который находится в списке нулевым. Можно и так:
dxwavelist1.Items.Find('somewave1').Play(False);
Добавление дополнительных эффектов: Добавить можно следущие эффекты: изменение frequensy, pan, volume.
Pan - ориентация звука (левый правый канал).
dxwavelist1.Items.Find('somewave1').Pan := 0; - Центр.
dxwavelist1.Items.Find('somewave1').Pan := -10000; - Максимально слева.
dxwavelist1.Items.Find('somewave1').Pan := 10000; - Максимально справа.
После чего вызвать
dxwavelist1.Items.Find('somewave1').Play(False);
. Frequency - частота звука.
Назначается это значение так:
dxwavelist1.Items.Find('somewave1').Frequency.
Минимальное значение 4410, а максимальное 44100.
Volume - громкость звука.
Назначается это значение так:
dxwavelist1.Items.Find('somewave1').volume.
Минимальное значение -10000, а максимальное 0.
Looped.
У звука есть еще параметр .Looped : boolean который означает будет ли звук
проигрываться "покругу". Что бы остановить такое проигрывание используйте
.looped := false;
Загрузка wav файлов:
Загружать звуки в программу можно непосредственно через dxwavelist1 (просто
вручную добавить файлы и все). А можно через отдельные *.dxw файлы - это
контейнеры wav'ов. Создавать которые можно специальными программами.
Dxwavelist1.items.LoadFromFile ('sounds.dxw');
Это полезно для того чтобы ехе файл занимал меньше размера.
Загрузка wav файлов в "realtime"
Ниже указанная процедура загружает wav, и автоматически добавляет в Dxwavelist1:
procedureLoadSound (Filename, SoundName : String
); begin
dxwavelist1.Items.Add; with
dxwavelist1.Items[dxwavelist1.Items.Count-1] do begin
; Wave.LoadFromFile(filename); Name := SoundName; restore; end
; end
;
NOTE: не забудьте поставить with
form1 do
. или declarations.
Вызывайте эту процедуру до dxsound1.initialize; Если после, то выполните код:
dxsound1.Finalize; dxsound1.Initialize;
Загрузка всех wav файлов из директории Собственно использование findfirst. не более того:
varsr: TSearchRec; begin
chdir('sounds'); //директория в которой звуки лежат if
FindFirst('*.wav', faAnyFile, sr) = 0 then begin
LoadSound(sr.name, sr.name); //имя звука будет идентично имени файла. while
FindNext(sr)=0 do
LoadSound(sr.name, sr.name); //заметьте что в имени звука учитывается регистр end
;
Использование AudioStream:
varAudio: TAudioFileStream; WaveFormat: TWaveFormatEx; Audio := TAudioFileStream.Create(DXSound1.DSound); Audio.AutoUpdate := True; Audio.BufferLength := 1000; Audio.FileName := 'somefile.wav'; Audio.Looped := FALSE; MakePCMWaveFormatEx(WaveFormat, 44100, Audio.Format.wBitsPerSample, 2); DXSound1.Primary.SetFormat(WaveFormat); Audio.Play;
NOTE: Вам надо в uses
занести MMSystem, Wave; Я заметил что этот метод поджирает память (проверял по тестам).
И на последок классная процедура автоматического расчета звука по каналам:
Эта процедура автоматически расчитывает стерео для разрешения экрана 640х480.
Вызывается так:
playsound('somesound1',320); - центр.
playsound('somesound1',0); - слева. etc.
constOPT_SOUND : boolean = true ; //наличие звук OPT_STEREO : boolean = true ; //стерео OPT_CHANNELAPPROACH : word = 10 ; //степень смешения каналов OPT_REVERSESTEREO : boolean = false ; //реверсировать стерео OPT_VOLUME : integer = 0 ; //громкость (-10000 | 0). procedure
PlaySound(soundname : shortstring; x : word); var
PanFactor, PanValue : Double; begin if
OPT_SOUND = false then
exit; if
OPT_STEREO = true then begin
PanFactor := 31.25; // 10000 is the panning range PanValue := ((X * PanFactor)-10000) / OPT_CHANNELAPPROACH; if
OPT_REVERSESTEREO then
PanValue := -panvalue; end else
panvalue := 0; try
WaveLst.Items.Find(soundname).Pan := round(Panvalue); WaveLst.Items.Find(soundname).Play(False); WaveLst.Items.Find(soundame).Volume := OPT_VOLUME; except
ShowMessage('Error playing sound "'+soundname+'"'); end
; end
;
Автор статьи: 3d[Power]