From 65d5b337ff30f6b3b2e3edb0502f0015d00139e9 Mon Sep 17 00:00:00 2001 From: jonas Date: Mon, 19 Jul 2010 14:15:23 +0000 Subject: + 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: http://svn.freepascal.org/svn/fpc/trunk@15610 3ad0048d-3df7-0310-abae-a5850022a9f2 --- packages/openal/examples/Makefile | 270 ++++++++++++--------------- packages/openal/examples/Makefile.fpc | 8 +- packages/openal/examples/wavopenal.pas | 330 +++++++++++++++++++++++++++++++++ 3 files changed, 457 insertions(+), 151 deletions(-) create mode 100644 packages/openal/examples/wavopenal.pas (limited to 'packages/openal') diff --git a/packages/openal/examples/Makefile b/packages/openal/examples/Makefile index 85ea5f1cfa..ce579b14ef 100644 --- a/packages/openal/examples/Makefile +++ b/packages/openal/examples/Makefile @@ -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) diff --git a/packages/openal/examples/Makefile.fpc b/packages/openal/examples/Makefile.fpc index b9f5f4b4c5..f36aab468e 100644 --- a/packages/openal/examples/Makefile.fpc +++ b/packages/openal/examples/Makefile.fpc @@ -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 diff --git a/packages/openal/examples/wavopenal.pas b/packages/openal/examples/wavopenal.pas new file mode 100644 index 0000000000..719a1d8e69 --- /dev/null +++ b/packages/openal/examples/wavopenal.pas @@ -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=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. -- cgit v1.2.1