+ wavopenal example to play a wav file by Dmitry Boyarintsev (mantis #16961)

* only compile madopenal.pas for platforms for which the "mad" package
    gets compiled

git-svn-id: trunk@15610 -
This commit is contained in:
Jonas Maebe 2010-07-19 14:15:23 +00:00
parent 0207e5f8cd
commit e56f5d9462
4 changed files with 458 additions and 151 deletions

1
.gitattributes vendored
View File

@ -4629,6 +4629,7 @@ packages/openal/examples/Makefile svneol=native#text/plain
packages/openal/examples/Makefile.fpc svneol=native#text/plain
packages/openal/examples/captureplaybackopenal.pas svneol=native#text/plain
packages/openal/examples/madopenal.pas svneol=native#text/plain
packages/openal/examples/wavopenal.pas svneol=native#text/plain
packages/openal/fpmake.pp svneol=native#text/plain
packages/openal/src/alch.inc svneol=native#text/plain
packages/openal/src/alexth.inc svneol=native#text/plain

View File

@ -1,8 +1,8 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/12/11]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/07/18]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
BSDs = freebsd netbsd openbsd darwin
UNIXs = linux $(BSDs) solaris qnx haiku
LIMIT83fs = go32v2 os2 emx watcom
@ -265,184 +265,187 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-haiku)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-symbian)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),i386-nativent)
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-darwin)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-gba)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-nds)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),arm-symbian)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),avr-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),armeb-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
endif
ifeq ($(FULL_TARGET),mipsel-linux)
override TARGET_PROGRAMS+=madopenal captureplaybackopenal
override TARGET_PROGRAMS+=captureplaybackopenal wavopenal madopenal
endif
override INSTALL_FPCPACKAGE=y
ifdef REQUIRE_UNITSDIR
@ -787,6 +790,10 @@ ifeq ($(OS_TARGET),symbian)
SHAREDLIBEXT=.dll
SHORTSUFFIX=symbian
endif
ifeq ($(OS_TARGET),NativeNT)
SHAREDLIBEXT=.dll
SHORTSUFFIX=nativent
endif
else
ifeq ($(OS_TARGET),go32v1)
PPUEXT=.pp1
@ -1211,21 +1218,20 @@ else
TAROPT=vz
TAREXT=.tar.gz
endif
override REQUIRE_PACKAGES=rtl openal mad oggvorbis a52 dts modplug matroska
override REQUIRE_PACKAGES=rtl openal oggvorbis a52 dts modplug matroska
ifeq ($(FULL_TARGET),i386-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),i386-go32v2)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1235,17 +1241,16 @@ endif
ifeq ($(FULL_TARGET),i386-win32)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),i386-os2)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1255,7 +1260,6 @@ endif
ifeq ($(FULL_TARGET),i386-freebsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1265,7 +1269,6 @@ endif
ifeq ($(FULL_TARGET),i386-beos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1275,7 +1278,6 @@ endif
ifeq ($(FULL_TARGET),i386-haiku)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1285,7 +1287,6 @@ endif
ifeq ($(FULL_TARGET),i386-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1295,7 +1296,6 @@ endif
ifeq ($(FULL_TARGET),i386-solaris)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1305,7 +1305,6 @@ endif
ifeq ($(FULL_TARGET),i386-qnx)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1315,7 +1314,6 @@ endif
ifeq ($(FULL_TARGET),i386-netware)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1325,7 +1323,6 @@ endif
ifeq ($(FULL_TARGET),i386-openbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1335,7 +1332,6 @@ endif
ifeq ($(FULL_TARGET),i386-wdosx)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1345,7 +1341,6 @@ endif
ifeq ($(FULL_TARGET),i386-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1355,7 +1350,6 @@ endif
ifeq ($(FULL_TARGET),i386-emx)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1365,7 +1359,6 @@ endif
ifeq ($(FULL_TARGET),i386-watcom)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1375,7 +1368,6 @@ endif
ifeq ($(FULL_TARGET),i386-netwlibc)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1385,7 +1377,6 @@ endif
ifeq ($(FULL_TARGET),i386-wince)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1395,7 +1386,6 @@ endif
ifeq ($(FULL_TARGET),i386-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1405,7 +1395,15 @@ endif
ifeq ($(FULL_TARGET),i386-symbian)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
endif
ifeq ($(FULL_TARGET),i386-nativent)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1415,17 +1413,16 @@ endif
ifeq ($(FULL_TARGET),m68k-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1435,7 +1432,6 @@ endif
ifeq ($(FULL_TARGET),m68k-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1445,7 +1441,6 @@ endif
ifeq ($(FULL_TARGET),m68k-amiga)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1455,7 +1450,6 @@ endif
ifeq ($(FULL_TARGET),m68k-atari)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1465,7 +1459,6 @@ endif
ifeq ($(FULL_TARGET),m68k-openbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1475,7 +1468,6 @@ endif
ifeq ($(FULL_TARGET),m68k-palmos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1485,7 +1477,6 @@ endif
ifeq ($(FULL_TARGET),m68k-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1495,17 +1486,16 @@ endif
ifeq ($(FULL_TARGET),powerpc-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1515,7 +1505,6 @@ endif
ifeq ($(FULL_TARGET),powerpc-amiga)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1525,7 +1514,6 @@ endif
ifeq ($(FULL_TARGET),powerpc-macos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1535,7 +1523,6 @@ endif
ifeq ($(FULL_TARGET),powerpc-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1545,7 +1532,6 @@ endif
ifeq ($(FULL_TARGET),powerpc-morphos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1555,7 +1541,6 @@ endif
ifeq ($(FULL_TARGET),powerpc-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1565,17 +1550,16 @@ endif
ifeq ($(FULL_TARGET),sparc-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1585,7 +1569,6 @@ endif
ifeq ($(FULL_TARGET),sparc-solaris)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1595,7 +1578,6 @@ endif
ifeq ($(FULL_TARGET),sparc-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1605,17 +1587,16 @@ endif
ifeq ($(FULL_TARGET),x86_64-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1625,7 +1606,6 @@ endif
ifeq ($(FULL_TARGET),x86_64-solaris)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1635,7 +1615,6 @@ endif
ifeq ($(FULL_TARGET),x86_64-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1645,7 +1624,6 @@ endif
ifeq ($(FULL_TARGET),x86_64-win64)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1655,7 +1633,6 @@ endif
ifeq ($(FULL_TARGET),x86_64-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1665,17 +1642,16 @@ endif
ifeq ($(FULL_TARGET),arm-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),arm-palmos)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1685,7 +1661,6 @@ endif
ifeq ($(FULL_TARGET),arm-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1695,7 +1670,6 @@ endif
ifeq ($(FULL_TARGET),arm-wince)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1705,7 +1679,6 @@ endif
ifeq ($(FULL_TARGET),arm-gba)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1715,7 +1688,6 @@ endif
ifeq ($(FULL_TARGET),arm-nds)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1725,7 +1697,6 @@ endif
ifeq ($(FULL_TARGET),arm-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1735,7 +1706,6 @@ endif
ifeq ($(FULL_TARGET),arm-symbian)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1745,17 +1715,16 @@ endif
ifeq ($(FULL_TARGET),powerpc64-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1765,7 +1734,6 @@ endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1775,7 +1743,6 @@ endif
ifeq ($(FULL_TARGET),avr-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1785,17 +1752,16 @@ endif
ifeq ($(FULL_TARGET),armeb-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifeq ($(FULL_TARGET),armeb-embedded)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
@ -1805,12 +1771,12 @@ endif
ifeq ($(FULL_TARGET),mipsel-linux)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_OPENAL=1
REQUIRE_PACKAGES_MAD=1
REQUIRE_PACKAGES_OGGVORBIS=1
REQUIRE_PACKAGES_A52=1
REQUIRE_PACKAGES_DTS=1
REQUIRE_PACKAGES_MODPLUG=1
REQUIRE_PACKAGES_MATROSKA=1
REQUIRE_PACKAGES_MAD=1
endif
ifdef REQUIRE_PACKAGES_RTL
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
@ -1864,32 +1830,6 @@ ifdef UNITDIR_OPENAL
override COMPILER_UNITDIR+=$(UNITDIR_OPENAL)
endif
endif
ifdef REQUIRE_PACKAGES_MAD
PACKAGEDIR_MAD:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mad/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_MAD),)
ifneq ($(wildcard $(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)),)
UNITDIR_MAD=$(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)
else
UNITDIR_MAD=$(PACKAGEDIR_MAD)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_MAD)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_MAD) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_MAD)/$(FPCMADE)
endif
else
PACKAGEDIR_MAD=
UNITDIR_MAD:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mad/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_MAD),)
UNITDIR_MAD:=$(firstword $(UNITDIR_MAD))
else
UNITDIR_MAD=
endif
endif
ifdef UNITDIR_MAD
override COMPILER_UNITDIR+=$(UNITDIR_MAD)
endif
endif
ifdef REQUIRE_PACKAGES_OGGVORBIS
PACKAGEDIR_OGGVORBIS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /oggvorbis/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_OGGVORBIS),)
@ -2020,6 +1960,32 @@ ifdef UNITDIR_MATROSKA
override COMPILER_UNITDIR+=$(UNITDIR_MATROSKA)
endif
endif
ifdef REQUIRE_PACKAGES_MAD
PACKAGEDIR_MAD:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mad/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_MAD),)
ifneq ($(wildcard $(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)),)
UNITDIR_MAD=$(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)
else
UNITDIR_MAD=$(PACKAGEDIR_MAD)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_MAD)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_MAD) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_MAD)/$(FPCMADE)
endif
else
PACKAGEDIR_MAD=
UNITDIR_MAD:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mad/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_MAD),)
UNITDIR_MAD:=$(firstword $(UNITDIR_MAD))
else
UNITDIR_MAD=
endif
endif
ifdef UNITDIR_MAD
override COMPILER_UNITDIR+=$(UNITDIR_MAD)
endif
endif
ifndef NOCPUDEF
override FPCOPTDEF=$(ARCH)
endif
@ -2342,6 +2308,9 @@ endif
ifdef EXEFILES
override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
endif
ifdef CLEAN_PROGRAMS
override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
endif
ifdef CLEAN_UNITS
override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
endif
@ -2388,6 +2357,9 @@ endif
ifdef CLEANRSTFILES
-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
endif
endif
ifdef CLEAN_FILES
-$(DEL) $(CLEAN_FILES)
endif
-$(DELTREE) units
-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)

View File

@ -3,10 +3,14 @@
#
[target]
programs=madopenal captureplaybackopenal
programs=captureplaybackopenal wavopenal
programs_linux=madopenal
programs_win32=madopenal
[require]
packages=openal mad oggvorbis a52 dts modplug matroska
packages=openal oggvorbis a52 dts modplug matroska
packages_linux=mad
packages_win32=mad
[install]
fpcpackage=y

View File

@ -0,0 +1,330 @@
(* WavOpenAL - OpenAL wave playing example
Copyright (c) 2010 Dmitry Boyarintsev
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
WaveOpenAL is based on MadOpenAL playing sample.
Yhe wavopenal program accepts a single .wav file name as a parameter and
plays it using openal until the end.
*)
program wavopenal;
{$mode objfpc}
uses
classes, sysutils, openal;
// WAVE UTILS
type
TRiffHeader = packed record
ID : array [0..3] of char;
Size : LongWord;
Format : array [0..3] of char;
end;
TWaveFormat = packed record
ID : array [0..3] of char;
Size : LongWord;
Format : Word;
Channels : Word;
SampleRate : LongWord;
ByteRate : LongWord;
BlockAlign : Word;
BitsPerSample : Word;
end;
TDataChunk = packed record
Id : array [0..3] of char;
Size : LongWord;
end;
type
{ TWaveReader }
TWaveReader = class(TObject)
private
loaded : Boolean;
chunkdata : TDataChunk;
chunkpos : Int64;
pos : Int64;
eof : Boolean;
fStream : TStream;
public
fmt : TWaveFormat;
function LoadFromStream(AStream: TStream): Boolean;
function ReadBuf(var Buffer; BufferSize: Integer): Integer;
end;
const
ID_RIFF = 'RIFF';
ID_WAVE = 'WAVE';
ID_fmt = 'fmt ';
ID_data = 'data';
{ TWaveReader }
function TWaveReader.LoadFromStream(AStream:TStream):Boolean;
var
riff : TRiffHeader;
begin
fStream:=AStream;
loaded:=True;
try
Result:=fStream.Read(riff, sizeof(riff))=sizeof(riff);
riff.Size:=LEtoN(riff.Size);
Result:=Result and (riff.ID=ID_RIFF) and (riff.Format=ID_WAVE);
if not Result then Exit;
Result:=fStream.Read(fmt, sizeof(fmt))=sizeof(fmt);
fmt.Size:=LEtoN(fmt.Size);
fmt.Format:=LEtoN(fmt.Format);
fmt.Channels:=LEtoN(fmt.Channels);
fmt.SampleRate:=LEtoN(fmt.SampleRate);
fmt.ByteRate:=LEtoN(fmt.ByteRate);
fmt.BlockAlign:=LEtoN(fmt.BlockAlign);
fmt.BitsPerSample:=LEtoN(fmt.BitsPerSample);
Result:=fmt.ID=ID_fmt;
pos:=-1;
except
Result:=False;
Exit;
end;
end;
function Min(a,b: Integer): Integer;
begin
if a<b then Result:=a
else Result:=b;
end;
function TWaveReader.ReadBuf(var Buffer;BufferSize:Integer):Integer;
var
sz : Integer;
p : PByteArray;
i : Integer;
begin
FillChar(Buffer, BufferSize, 0);
Result:=0;
// all data read
if eof then Exit;
p:=@Buffer;
i:=0;
while (not eof) and (i<bufferSize) do begin
if chunkpos>=chunkdata.Size then begin
if pos<0 then
fstream.Position:=sizeof(TRiffHeader)+Int64(fmt.Size)+sizeof(TDataChunk)
else
fstream.Position:=pos+chunkdata.size+SizeOf(chunkdata);
eof:=pos>=fStream.Size;
if not eof then begin
pos:=fStream.Position;
sz:=fstream.Read(chunkdata, sizeof(chunkdata));
chunkdata.Size:=LEtoN(chunkdata.Size);
if (sz<>sizeof(chunkdata)) or (chunkdata.Id<>ID_data) then
chunkpos:=chunkdata.Size
else
chunkpos:=0;
end;
end else begin
sz:=Min(BufferSize, chunkdata.Size-chunkpos);
fStream.Position:=pos+sizeof(chunkdata)+chunkpos;
sz:=fStream.Read(p[i], sz);
if sz<0 then Exit;
inc(chunkpos, sz);
inc(i, sz);
end;
end;
Result:=i;
end;
// ------------------------ OPEN AL ----------------------
var
source : TStream;
codec_bs : Longword;
// openal
const
// Note: if you lower the al_bufcount, then you have to modify the al_polltime also!
al_bufcount = 4;
al_polltime = 100;
var
al_device : PALCdevice;
al_context : PALCcontext;
al_source : ALuint;
al_format : Integer;
al_buffers : array[0..al_bufcount-1] of ALuint;
al_bufsize : Longword;
al_readbuf : Pointer;
al_rate : Longword;
wave : TWaveReader;
procedure alPlay;
var
i: Integer;
begin
alSourceStop(al_source);
alSourceRewind(al_source);
alSourcei(al_source, AL_BUFFER, 0);
for i := 0 to al_bufcount - 1 do
begin
if wave.ReadBuf(al_readbuf^, al_bufsize) = 0 then
Break;
alBufferData(al_buffers[i], al_format, al_readbuf, al_bufsize, al_rate);
alSourceQueueBuffers(al_source, 1, @al_buffers[i]);
end;
// Under windows, AL_LOOPING = AL_TRUE breaks queueing, no idea why
alSourcei(al_source, AL_LOOPING, AL_FALSE);
alSourcePlay(al_source);
end;
procedure alStop;
begin
alSourceStop(al_source);
alSourceRewind(al_source);
alSourcei(al_source, AL_BUFFER, 0);
end;
function alProcess: Boolean;
var
processed : ALint;
buffer : ALuint;
sz : Integer;
begin
alGetSourcei(al_source, AL_BUFFERS_PROCESSED, processed);
while (processed > 0) and (processed <= al_bufcount) do
begin
Write('.');
alSourceUnqueueBuffers(al_source, 1, @buffer);
sz:=wave.ReadBuf(al_readbuf^, al_bufsize);
if sz <= 0 then
begin
Exit(False);
end;
alBufferData(buffer, al_format, al_readbuf, sz, al_rate);
alSourceQueueBuffers(al_source, 1, @buffer);
Dec(processed);
end;
Result := True;
end;
var
Filename: String;
queued : Integer;
done : Boolean;
begin
// define codec
if (ParamCount<=0) or not FileExists(ParamStr(1)) then begin
writeln('please specify .wav file name');
Exit;
end;
FileName:=ParamStr(1);
source := TFileStream.Create(Filename, fmOpenRead);
// inittialize codec
wave:=TWaveReader.Create;
if not wave.LoadFromStream(source) then begin
writeln('unable to read WAVE format');
Exit;
end;
if wave.fmt.Format<>1 then begin
writeln('WAVE file is using compression. Cannot play sorry. Please provide uncompressed .wav');
Exit;
end;
if wave.fmt.Channels=2 then begin
if wave.fmt.BitsPerSample=8 then al_format:=AL_FORMAT_STEREO8
else al_format:=AL_FORMAT_STEREO16
end else begin
if wave.fmt.BitsPerSample=8 then al_format:=AL_FORMAT_MONO8
else al_format:=AL_FORMAT_MONO16
end;
codec_bs:=2*wave.fmt.Channels;
//al_bufsize := 20000 - (20000 mod codec_bs);
al_bufsize := 20000 - (20000 mod codec_bs);
al_rate:=wave.fmt.SampleRate;
WriteLn('Blocksize : ', codec_bs);
WriteLn('Rate : ', wave.fmt.SampleRate);
WriteLn('Channels : ', wave.fmt.Channels);
WriteLn('OpenAL Buffers : ', al_bufcount);
WriteLn('OpenAL Buffer Size : ', al_bufsize);
// init openal
al_device := alcOpenDevice(nil);
al_context := alcCreateContext(al_device, nil);
alcMakeContextCurrent(al_context);
alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
alGenSources(1, @al_source);
alGenBuffers(al_bufcount, @al_buffers);
GetMem(al_readbuf, al_bufsize);
// play loop
alPlay;
done:=False;
queued:=0;
repeat
if alProcess then begin
alGetSourcei(al_source, AL_BUFFERS_QUEUED, queued);
done:=queued=0;
end;
Sleep(al_polltime);
until done;
alStop;
// finalize openal
alDeleteSources(1, @al_source);
alDeleteBuffers(al_bufcount, @al_buffers);
alcDestroyContext(al_context);
alcCloseDevice(al_device);
FreeMem(al_readbuf);
// finalize codec
wave.Free;
// close file
source.Free;
end.