mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Initial working commit of JonoF's audiolib re-port... I think
git-svn-id: https://svn.eduke32.com/eduke32@1471 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
039f004fb4
commit
4f10a9e477
51 changed files with 9677 additions and 0 deletions
47
polymer/eduke32/source/jaudiolib/Makefile
Normal file
47
polymer/eduke32/source/jaudiolib/Makefile
Normal file
|
@ -0,0 +1,47 @@
|
|||
CC=gcc
|
||||
OBJ=obj
|
||||
OBJNAME?=libjfaudiolib.a
|
||||
PRETTY_OUTPUT?=1
|
||||
EROOT?=build
|
||||
SRC=src
|
||||
|
||||
include ../../$(EROOT)/Makefile.shared
|
||||
|
||||
CFLAGS=-g -O2 -Wall
|
||||
CPPFLAGS=-Iinclude -Isrc -DHAVE_VORBIS
|
||||
|
||||
OBJECTS=$(OBJ)/drivers.o \
|
||||
$(OBJ)/fx_man.o \
|
||||
$(OBJ)/multivoc.o \
|
||||
$(OBJ)/mix.o \
|
||||
$(OBJ)/mixst.o \
|
||||
$(OBJ)/pitch.o \
|
||||
$(OBJ)/vorbis.o \
|
||||
$(OBJ)/driver_nosound.o
|
||||
|
||||
ifeq ($(PLATFORM),WINDOWS)
|
||||
CPPFLAGS+= -I/z/sdks/directx/dx7/include -Ithird-party/mingw32/include
|
||||
OBJECTS+= $(OBJ)/driver_directsound.o
|
||||
OBJNAME=libjfaudiolib_win32.a
|
||||
OBJ=obj_win
|
||||
else
|
||||
CPPFLAGS+= -DHAVE_SDL
|
||||
OBJECTS+= $(OBJ)/driver_sdl.o
|
||||
endif
|
||||
|
||||
# OBJECTS=$(SOURCES:%.c=$(OBJ)/%.o)
|
||||
|
||||
$(OBJNAME): $(OBJECTS)
|
||||
ar cr $@ $^
|
||||
|
||||
$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c
|
||||
-mkdir -p $(OBJ)
|
||||
$(COMPILE_STATUS)
|
||||
if $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi
|
||||
|
||||
ifeq ($(PRETTY_OUTPUT),1)
|
||||
.SILENT:
|
||||
endif
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-rm -f $(OBJECTS) $(OBJNAME)
|
113
polymer/eduke32/source/jaudiolib/include/fx_man.h
Normal file
113
polymer/eduke32/source/jaudiolib/include/fx_man.h
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
module: FX_MAN.H
|
||||
|
||||
author: James R. Dose
|
||||
date: March 17, 1994
|
||||
|
||||
Public header for FX_MAN.C
|
||||
|
||||
(c) Copyright 1994 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __FX_MAN_H
|
||||
#define __FX_MAN_H
|
||||
|
||||
#include "inttypes.h"
|
||||
#include "limits.h"
|
||||
#include "sndcards.h"
|
||||
|
||||
enum FX_ERRORS
|
||||
{
|
||||
FX_Warning = -2,
|
||||
FX_Error = -1,
|
||||
FX_Ok = 0,
|
||||
FX_ASSVersion,
|
||||
FX_SoundCardError,
|
||||
FX_InvalidCard,
|
||||
FX_MultiVocError,
|
||||
};
|
||||
|
||||
#define FX_MUSIC_PRIORITY INT_MAX
|
||||
|
||||
const char *FX_ErrorString( int32_t ErrorNumber );
|
||||
int32_t FX_Init( int32_t SoundCard, int32_t numvoices, int32_t numchannels, int32_t samplebits, unsigned mixrate, void * initdata );
|
||||
int32_t FX_Shutdown( void );
|
||||
int32_t FX_SetCallBack( void ( *function )( uint32_t ) );
|
||||
void FX_SetVolume( int32_t volume );
|
||||
int32_t FX_GetVolume( void );
|
||||
|
||||
void FX_SetReverseStereo( int32_t setting );
|
||||
int32_t FX_GetReverseStereo( void );
|
||||
void FX_SetReverb( int32_t reverb );
|
||||
void FX_SetFastReverb( int32_t reverb );
|
||||
int32_t FX_GetMaxReverbDelay( void );
|
||||
int32_t FX_GetReverbDelay( void );
|
||||
void FX_SetReverbDelay( int32_t delay );
|
||||
|
||||
int32_t FX_PauseVoice ( int32_t handle, int32_t pause );
|
||||
int32_t FX_VoiceAvailable( int32_t priority );
|
||||
int32_t FX_EndLooping( int32_t handle );
|
||||
int32_t FX_SetPan( int32_t handle, int32_t vol, int32_t left, int32_t right );
|
||||
int32_t FX_SetPitch( int32_t handle, int32_t pitchoffset );
|
||||
int32_t FX_SetFrequency( int32_t handle, int32_t frequency );
|
||||
|
||||
int32_t FX_PlayVOC( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t FX_PlayLoopedVOC( char *ptr, uint32_t ptrlength, int32_t loopstart, int32_t loopend,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t FX_PlayWAV( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t FX_PlayLoopedWAV( char *ptr, uint32_t ptrlength, int32_t loopstart, int32_t loopend,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t FX_PlayVOC3D( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t angle, int32_t distance,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t FX_PlayWAV3D( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t angle, int32_t distance,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
|
||||
int32_t FX_PlayAuto( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t FX_PlayLoopedAuto( char *ptr, uint32_t ptrlength, int32_t loopstart, int32_t loopend,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t FX_PlayAuto3D( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t angle, int32_t distance,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
|
||||
int32_t FX_PlayRaw( char *ptr, uint32_t length, unsigned rate,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t FX_PlayLoopedRaw( char *ptr, uint32_t length, char *loopstart,
|
||||
char *loopend, unsigned rate, int32_t pitchoffset, int32_t vol, int32_t left,
|
||||
int32_t right, int32_t priority, uint32_t callbackval );
|
||||
int32_t FX_Pan3D( int32_t handle, int32_t angle, int32_t distance );
|
||||
int32_t FX_SoundActive( int32_t handle );
|
||||
int32_t FX_SoundsPlaying( void );
|
||||
int32_t FX_StopSound( int32_t handle );
|
||||
int32_t FX_StopAllSounds( void );
|
||||
int32_t FX_StartDemandFeedPlayback( void ( *function )( char **ptr, uint32_t *length ),
|
||||
int32_t rate, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t FX_StartRecording( int32_t MixRate, void ( *function )( char *ptr, int32_t length ) );
|
||||
void FX_StopRecord( void );
|
||||
|
||||
#endif
|
93
polymer/eduke32/source/jaudiolib/include/music.h
Normal file
93
polymer/eduke32/source/jaudiolib/include/music.h
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
module: MUSIC.H
|
||||
|
||||
author: James R. Dose
|
||||
date: March 25, 1994
|
||||
|
||||
Public header for MUSIC.C
|
||||
|
||||
(c) Copyright 1994 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __MUSIC_H
|
||||
#define __MUSIC_H
|
||||
|
||||
#include "inttypes.h"
|
||||
#include "sndcards.h"
|
||||
|
||||
extern int32_t MUSIC_ErrorCode;
|
||||
|
||||
enum MUSIC_ERRORS
|
||||
{
|
||||
MUSIC_Warning = -2,
|
||||
MUSIC_Error = -1,
|
||||
MUSIC_Ok = 0,
|
||||
MUSIC_ASSVersion,
|
||||
MUSIC_SoundCardError,
|
||||
MUSIC_MPU401Error,
|
||||
MUSIC_InvalidCard,
|
||||
MUSIC_MidiError,
|
||||
MUSIC_TaskManError,
|
||||
MUSIC_FMNotDetected,
|
||||
MUSIC_DPMI_Error
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t tickposition;
|
||||
uint32_t milliseconds;
|
||||
uint32_t measure;
|
||||
uint32_t beat;
|
||||
uint32_t tick;
|
||||
} songposition;
|
||||
|
||||
#define MUSIC_LoopSong ( 1 == 1 )
|
||||
#define MUSIC_PlayOnce ( !MUSIC_LoopSong )
|
||||
|
||||
char *MUSIC_ErrorString( int32_t ErrorNumber );
|
||||
int32_t MUSIC_Init( int32_t SoundCard, int32_t Address );
|
||||
int32_t MUSIC_Shutdown( void );
|
||||
void MUSIC_SetMaxFMMidiChannel( int32_t channel );
|
||||
void MUSIC_SetVolume( int32_t volume );
|
||||
void MUSIC_SetMidiChannelVolume( int32_t channel, int32_t volume );
|
||||
void MUSIC_ResetMidiChannelVolumes( void );
|
||||
int32_t MUSIC_GetVolume( void );
|
||||
void MUSIC_SetLoopFlag( int32_t loopflag );
|
||||
int32_t MUSIC_SongPlaying( void );
|
||||
void MUSIC_Continue( void );
|
||||
void MUSIC_Pause( void );
|
||||
int32_t MUSIC_StopSong( void );
|
||||
int32_t MUSIC_PlaySong( uint8_t *song, int32_t loopflag );
|
||||
void MUSIC_SetContext( int32_t context );
|
||||
int32_t MUSIC_GetContext( void );
|
||||
void MUSIC_SetSongTick( uint32_t PositionInTicks );
|
||||
void MUSIC_SetSongTime( uint32_t milliseconds );
|
||||
void MUSIC_SetSongPosition( int32_t measure, int32_t beat, int32_t tick );
|
||||
void MUSIC_GetSongPosition( songposition *pos );
|
||||
void MUSIC_GetSongLength( songposition *pos );
|
||||
int32_t MUSIC_FadeVolume( int32_t tovolume, int32_t milliseconds );
|
||||
int32_t MUSIC_FadeActive( void );
|
||||
void MUSIC_StopFade( void );
|
||||
void MUSIC_RerouteMidiChannel( int32_t channel, int32_t ( *function )( int32_t event, int32_t c1, int32_t c2 ) );
|
||||
void MUSIC_RegisterTimbreBank( uint8_t *timbres );
|
||||
|
||||
#endif
|
46
polymer/eduke32/source/jaudiolib/include/sndcards.h
Normal file
46
polymer/eduke32/source/jaudiolib/include/sndcards.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
module: SNDCARDS.H
|
||||
|
||||
author: James R. Dose
|
||||
date: March 31, 1994
|
||||
|
||||
Contains enumerated type definitions for sound cards.
|
||||
|
||||
(c) Copyright 1994 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __SNDCARDS_H
|
||||
#define __SNDCARDS_H
|
||||
|
||||
#define ASS_VERSION_STRING "JonoF 20090718"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ASS_NoSound,
|
||||
ASS_SDL,
|
||||
ASS_CoreAudio,
|
||||
ASS_DirectSound,
|
||||
ASS_NumSoundCards,
|
||||
ASS_AutoDetect = -2
|
||||
} soundcardnames;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,307 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 42;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
AB2E9E5F1011E65900DD2F1F /* _multivc.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E4D1011E65900DD2F1F /* _multivc.h */; };
|
||||
AB2E9E601011E65900DD2F1F /* driver_coreaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2E9E4E1011E65900DD2F1F /* driver_coreaudio.c */; };
|
||||
AB2E9E611011E65900DD2F1F /* driver_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E4F1011E65900DD2F1F /* driver_coreaudio.h */; };
|
||||
AB2E9E641011E65900DD2F1F /* driver_nosound.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2E9E521011E65900DD2F1F /* driver_nosound.c */; };
|
||||
AB2E9E651011E65900DD2F1F /* driver_nosound.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E531011E65900DD2F1F /* driver_nosound.h */; };
|
||||
AB2E9E681011E65900DD2F1F /* drivers.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2E9E561011E65900DD2F1F /* drivers.c */; };
|
||||
AB2E9E691011E65900DD2F1F /* drivers.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E571011E65900DD2F1F /* drivers.h */; };
|
||||
AB2E9E6A1011E65900DD2F1F /* fx_man.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2E9E581011E65900DD2F1F /* fx_man.c */; };
|
||||
AB2E9E6B1011E65900DD2F1F /* linklist.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E591011E65900DD2F1F /* linklist.h */; };
|
||||
AB2E9E6C1011E65900DD2F1F /* ll_man.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E5A1011E65900DD2F1F /* ll_man.h */; };
|
||||
AB2E9E6D1011E65900DD2F1F /* multivoc.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2E9E5B1011E65900DD2F1F /* multivoc.c */; };
|
||||
AB2E9E6E1011E65900DD2F1F /* multivoc.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E5C1011E65900DD2F1F /* multivoc.h */; };
|
||||
AB2E9E6F1011E65900DD2F1F /* pitch.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2E9E5D1011E65900DD2F1F /* pitch.c */; };
|
||||
AB2E9E701011E65900DD2F1F /* pitch.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E5E1011E65900DD2F1F /* pitch.h */; };
|
||||
AB2E9E741011E66100DD2F1F /* fx_man.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E711011E66100DD2F1F /* fx_man.h */; };
|
||||
AB2E9E751011E66100DD2F1F /* music.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E721011E66100DD2F1F /* music.h */; };
|
||||
AB2E9E761011E66100DD2F1F /* sndcards.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2E9E731011E66100DD2F1F /* sndcards.h */; };
|
||||
AB2EA0831012029200DD2F1F /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB2EA0821012029200DD2F1F /* AudioUnit.framework */; };
|
||||
AB2EA17710121AA900DD2F1F /* mix.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2EA17610121AA900DD2F1F /* mix.c */; };
|
||||
AB8C5612101A077700B42306 /* mixst.c in Sources */ = {isa = PBXBuildFile; fileRef = AB8C5611101A077700B42306 /* mixst.c */; };
|
||||
AB8C5828101B6B7100B42306 /* ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C5826101B6B7100B42306 /* ogg.framework */; };
|
||||
AB8C5829101B6B7100B42306 /* vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C5827101B6B7100B42306 /* vorbis.framework */; };
|
||||
AB8C5868101B6D7500B42306 /* vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = AB8C5867101B6D7500B42306 /* vorbis.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
AB2E9E421011E61700DD2F1F /* libjfaudiolib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjfaudiolib.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AB2E9E4D1011E65900DD2F1F /* _multivc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _multivc.h; sourceTree = "<group>"; };
|
||||
AB2E9E4E1011E65900DD2F1F /* driver_coreaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = driver_coreaudio.c; sourceTree = "<group>"; };
|
||||
AB2E9E4F1011E65900DD2F1F /* driver_coreaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = driver_coreaudio.h; sourceTree = "<group>"; };
|
||||
AB2E9E521011E65900DD2F1F /* driver_nosound.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = driver_nosound.c; sourceTree = "<group>"; };
|
||||
AB2E9E531011E65900DD2F1F /* driver_nosound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = driver_nosound.h; sourceTree = "<group>"; };
|
||||
AB2E9E561011E65900DD2F1F /* drivers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = drivers.c; sourceTree = "<group>"; };
|
||||
AB2E9E571011E65900DD2F1F /* drivers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = drivers.h; sourceTree = "<group>"; };
|
||||
AB2E9E581011E65900DD2F1F /* fx_man.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fx_man.c; sourceTree = "<group>"; };
|
||||
AB2E9E591011E65900DD2F1F /* linklist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linklist.h; sourceTree = "<group>"; };
|
||||
AB2E9E5A1011E65900DD2F1F /* ll_man.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ll_man.h; sourceTree = "<group>"; };
|
||||
AB2E9E5B1011E65900DD2F1F /* multivoc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = multivoc.c; sourceTree = "<group>"; };
|
||||
AB2E9E5C1011E65900DD2F1F /* multivoc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = multivoc.h; sourceTree = "<group>"; };
|
||||
AB2E9E5D1011E65900DD2F1F /* pitch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pitch.c; sourceTree = "<group>"; };
|
||||
AB2E9E5E1011E65900DD2F1F /* pitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pitch.h; sourceTree = "<group>"; };
|
||||
AB2E9E711011E66100DD2F1F /* fx_man.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fx_man.h; sourceTree = "<group>"; };
|
||||
AB2E9E721011E66100DD2F1F /* music.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = music.h; sourceTree = "<group>"; };
|
||||
AB2E9E731011E66100DD2F1F /* sndcards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndcards.h; sourceTree = "<group>"; };
|
||||
AB2EA0821012029200DD2F1F /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
AB2EA17610121AA900DD2F1F /* mix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mix.c; sourceTree = "<group>"; };
|
||||
AB8C5611101A077700B42306 /* mixst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mixst.c; sourceTree = "<group>"; };
|
||||
AB8C5826101B6B7100B42306 /* ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ogg.framework; path = "third-party/ogg.framework"; sourceTree = "<group>"; };
|
||||
AB8C5827101B6B7100B42306 /* vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vorbis.framework; path = "third-party/vorbis.framework"; sourceTree = "<group>"; };
|
||||
AB8C5867101B6D7500B42306 /* vorbis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vorbis.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
AB2E9E401011E61600DD2F1F /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AB2EA0831012029200DD2F1F /* AudioUnit.framework in Frameworks */,
|
||||
AB8C5828101B6B7100B42306 /* ogg.framework in Frameworks */,
|
||||
AB8C5829101B6B7100B42306 /* vorbis.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
AB2E9E301011E60300DD2F1F = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AB8C582E101B6B7900B42306 /* Linked frameworks */,
|
||||
AB2E9E481011E63F00DD2F1F /* include */,
|
||||
AB2E9E471011E63900DD2F1F /* src */,
|
||||
AB2E9E431011E61700DD2F1F /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AB2E9E431011E61700DD2F1F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AB2E9E421011E61700DD2F1F /* libjfaudiolib.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AB2E9E471011E63900DD2F1F /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AB2E9E4D1011E65900DD2F1F /* _multivc.h */,
|
||||
AB2E9E4E1011E65900DD2F1F /* driver_coreaudio.c */,
|
||||
AB2E9E4F1011E65900DD2F1F /* driver_coreaudio.h */,
|
||||
AB2E9E521011E65900DD2F1F /* driver_nosound.c */,
|
||||
AB2E9E531011E65900DD2F1F /* driver_nosound.h */,
|
||||
AB2E9E561011E65900DD2F1F /* drivers.c */,
|
||||
AB2E9E571011E65900DD2F1F /* drivers.h */,
|
||||
AB2E9E581011E65900DD2F1F /* fx_man.c */,
|
||||
AB2E9E591011E65900DD2F1F /* linklist.h */,
|
||||
AB2E9E5A1011E65900DD2F1F /* ll_man.h */,
|
||||
AB2E9E5B1011E65900DD2F1F /* multivoc.c */,
|
||||
AB2E9E5C1011E65900DD2F1F /* multivoc.h */,
|
||||
AB2E9E5D1011E65900DD2F1F /* pitch.c */,
|
||||
AB2E9E5E1011E65900DD2F1F /* pitch.h */,
|
||||
AB2EA17610121AA900DD2F1F /* mix.c */,
|
||||
AB8C5611101A077700B42306 /* mixst.c */,
|
||||
AB8C5867101B6D7500B42306 /* vorbis.c */,
|
||||
);
|
||||
path = src;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AB2E9E481011E63F00DD2F1F /* include */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AB2E9E711011E66100DD2F1F /* fx_man.h */,
|
||||
AB2E9E721011E66100DD2F1F /* music.h */,
|
||||
AB2E9E731011E66100DD2F1F /* sndcards.h */,
|
||||
);
|
||||
path = include;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AB8C582E101B6B7900B42306 /* Linked frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AB2EA0821012029200DD2F1F /* AudioUnit.framework */,
|
||||
AB8C5827101B6B7100B42306 /* vorbis.framework */,
|
||||
AB8C5826101B6B7100B42306 /* ogg.framework */,
|
||||
);
|
||||
name = "Linked frameworks";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
AB2E9E3E1011E61600DD2F1F /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AB2E9E5F1011E65900DD2F1F /* _multivc.h in Headers */,
|
||||
AB2E9E611011E65900DD2F1F /* driver_coreaudio.h in Headers */,
|
||||
AB2E9E651011E65900DD2F1F /* driver_nosound.h in Headers */,
|
||||
AB2E9E691011E65900DD2F1F /* drivers.h in Headers */,
|
||||
AB2E9E6B1011E65900DD2F1F /* linklist.h in Headers */,
|
||||
AB2E9E6C1011E65900DD2F1F /* ll_man.h in Headers */,
|
||||
AB2E9E6E1011E65900DD2F1F /* multivoc.h in Headers */,
|
||||
AB2E9E701011E65900DD2F1F /* pitch.h in Headers */,
|
||||
AB2E9E741011E66100DD2F1F /* fx_man.h in Headers */,
|
||||
AB2E9E751011E66100DD2F1F /* music.h in Headers */,
|
||||
AB2E9E761011E66100DD2F1F /* sndcards.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
AB2E9E411011E61600DD2F1F /* jfaudiolib */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = AB2E9E441011E61900DD2F1F /* Build configuration list for PBXNativeTarget "jfaudiolib" */;
|
||||
buildPhases = (
|
||||
AB2E9E3E1011E61600DD2F1F /* Headers */,
|
||||
AB2E9E3F1011E61600DD2F1F /* Sources */,
|
||||
AB2E9E401011E61600DD2F1F /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = jfaudiolib;
|
||||
productName = jfaudiolib;
|
||||
productReference = AB2E9E421011E61700DD2F1F /* libjfaudiolib.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
AB2E9E321011E60300DD2F1F /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
buildConfigurationList = AB2E9E331011E60300DD2F1F /* Build configuration list for PBXProject "jfaudiolib" */;
|
||||
compatibilityVersion = "Xcode 2.4";
|
||||
hasScannedForEncodings = 0;
|
||||
mainGroup = AB2E9E301011E60300DD2F1F;
|
||||
productRefGroup = AB2E9E431011E61700DD2F1F /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
AB2E9E411011E61600DD2F1F /* jfaudiolib */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
AB2E9E3F1011E61600DD2F1F /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AB2E9E601011E65900DD2F1F /* driver_coreaudio.c in Sources */,
|
||||
AB2E9E641011E65900DD2F1F /* driver_nosound.c in Sources */,
|
||||
AB2E9E681011E65900DD2F1F /* drivers.c in Sources */,
|
||||
AB2E9E6A1011E65900DD2F1F /* fx_man.c in Sources */,
|
||||
AB2E9E6D1011E65900DD2F1F /* multivoc.c in Sources */,
|
||||
AB2E9E6F1011E65900DD2F1F /* pitch.c in Sources */,
|
||||
AB2EA17710121AA900DD2F1F /* mix.c in Sources */,
|
||||
AB8C5612101A077700B42306 /* mixst.c in Sources */,
|
||||
AB8C5868101B6D7500B42306 /* vorbis.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
AB2E9E341011E60300DD2F1F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = (
|
||||
ppc,
|
||||
i386,
|
||||
);
|
||||
COPY_PHASE_STRIP = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = "third-party";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__;
|
||||
GCC_VERSION_i386 = 4.0;
|
||||
GCC_VERSION_ppc = 4.0;
|
||||
MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
|
||||
MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
|
||||
SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||
SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
AB2E9E351011E60300DD2F1F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = (
|
||||
ppc,
|
||||
i386,
|
||||
);
|
||||
COPY_PHASE_STRIP = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "third-party";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = __MACOSX__;
|
||||
GCC_VERSION_i386 = 4.0;
|
||||
GCC_VERSION_ppc = 4.0;
|
||||
MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
|
||||
MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
|
||||
SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||
SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
AB2E9E451011E61900DD2F1F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = jfaudiolib;
|
||||
ZERO_LINK = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
AB2E9E461011E61900DD2F1F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = jfaudiolib;
|
||||
ZERO_LINK = NO;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
AB2E9E331011E60300DD2F1F /* Build configuration list for PBXProject "jfaudiolib" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
AB2E9E341011E60300DD2F1F /* Debug */,
|
||||
AB2E9E351011E60300DD2F1F /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
AB2E9E441011E61900DD2F1F /* Build configuration list for PBXNativeTarget "jfaudiolib" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
AB2E9E451011E61900DD2F1F /* Debug */,
|
||||
AB2E9E461011E61900DD2F1F /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = AB2E9E321011E60300DD2F1F /* Project object */;
|
||||
}
|
320
polymer/eduke32/source/jaudiolib/src/_multivc.h
Normal file
320
polymer/eduke32/source/jaudiolib/src/_multivc.h
Normal file
|
@ -0,0 +1,320 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
file: _MULTIVC.H
|
||||
|
||||
author: James R. Dose
|
||||
date: December 20, 1993
|
||||
|
||||
Private header for MULTIVOC.C
|
||||
|
||||
(c) Copyright 1993 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#include "limits.h"
|
||||
#include "inttypes.h"
|
||||
|
||||
#ifndef ___MULTIVC_H
|
||||
#define ___MULTIVC_H
|
||||
|
||||
#define TRUE ( 1 == 1 )
|
||||
#define FALSE ( !TRUE )
|
||||
|
||||
#define VOC_8BIT 0x0
|
||||
#define VOC_CT4_ADPCM 0x1
|
||||
#define VOC_CT3_ADPCM 0x2
|
||||
#define VOC_CT2_ADPCM 0x3
|
||||
#define VOC_16BIT 0x4
|
||||
#define VOC_ALAW 0x6
|
||||
#define VOC_MULAW 0x7
|
||||
#define VOC_CREATIVE_ADPCM 0x200
|
||||
|
||||
#define T_SIXTEENBIT_STEREO 0
|
||||
#define T_8BITS 1
|
||||
#define T_MONO 2
|
||||
#define T_16BITSOURCE 4
|
||||
#define T_STEREOSOURCE 8
|
||||
#define T_LEFTQUIET 16
|
||||
#define T_RIGHTQUIET 32
|
||||
#define T_DEFAULT T_SIXTEENBIT_STEREO
|
||||
|
||||
#define MV_MaxPanPosition 127
|
||||
#define MV_NumPanPositions ( MV_MaxPanPosition + 1 )
|
||||
#define MV_MaxTotalVolume 255
|
||||
//#define MV_MaxVolume 63
|
||||
#define MV_NumVoices 8
|
||||
|
||||
// mirrors FX_MUSIC_PRIORITY from fx_man.h
|
||||
#define MV_MUSIC_PRIORITY INT_MAX
|
||||
|
||||
#define MIX_VOLUME( volume ) \
|
||||
( ( max( 0, min( ( volume ), 255 ) ) * ( MV_MaxVolume + 1 ) ) >> 8 )
|
||||
// ( ( max( 0, min( ( volume ), 255 ) ) ) >> 2 )
|
||||
|
||||
#define STEREO 1
|
||||
#define SIXTEEN_BIT 2
|
||||
|
||||
#define MONO_8BIT 0
|
||||
#define STEREO_8BIT ( STEREO )
|
||||
#define MONO_16BIT ( SIXTEEN_BIT )
|
||||
#define STEREO_16BIT ( STEREO | SIXTEEN_BIT )
|
||||
|
||||
#define MONO_8BIT_SAMPLE_SIZE 1
|
||||
#define MONO_16BIT_SAMPLE_SIZE 2
|
||||
#define STEREO_8BIT_SAMPLE_SIZE ( 2 * MONO_8BIT_SAMPLE_SIZE )
|
||||
#define STEREO_16BIT_SAMPLE_SIZE ( 2 * MONO_16BIT_SAMPLE_SIZE )
|
||||
|
||||
//#define SILENCE_16BIT 0x80008000
|
||||
#define SILENCE_16BIT 0
|
||||
#define SILENCE_8BIT 0x80808080
|
||||
//#define SILENCE_16BIT_PAS 0
|
||||
|
||||
#define MixBufferSize 256
|
||||
|
||||
#define NumberOfBuffers 16
|
||||
#define TotalBufferSize ( MixBufferSize * NumberOfBuffers )
|
||||
|
||||
#define PI 3.1415926536
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Raw,
|
||||
VOC,
|
||||
DemandFeed,
|
||||
WAV,
|
||||
Vorbis
|
||||
} wavedata;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NoMoreData,
|
||||
KeepPlaying
|
||||
} playbackstatus;
|
||||
|
||||
|
||||
typedef struct VoiceNode
|
||||
{
|
||||
struct VoiceNode *next;
|
||||
struct VoiceNode *prev;
|
||||
|
||||
wavedata wavetype;
|
||||
char bits;
|
||||
char channels;
|
||||
|
||||
playbackstatus ( *GetSound )( struct VoiceNode *voice );
|
||||
|
||||
void ( *mix )( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length );
|
||||
|
||||
char *NextBlock;
|
||||
char *LoopStart;
|
||||
char *LoopEnd;
|
||||
unsigned LoopCount;
|
||||
uint32_t LoopSize;
|
||||
uint32_t BlockLength;
|
||||
|
||||
uint32_t PitchScale;
|
||||
uint32_t FixedPointBufferSize;
|
||||
|
||||
char *sound;
|
||||
uint32_t length;
|
||||
uint32_t SamplingRate;
|
||||
uint32_t RateScale;
|
||||
uint32_t position;
|
||||
int32_t Playing;
|
||||
int32_t Paused;
|
||||
|
||||
int32_t handle;
|
||||
int32_t priority;
|
||||
|
||||
void ( *DemandFeed )( char **ptr, uint32_t *length );
|
||||
void *extra;
|
||||
|
||||
int16_t *LeftVolume;
|
||||
int16_t *RightVolume;
|
||||
|
||||
uint32_t callbackval;
|
||||
|
||||
} VoiceNode;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
VoiceNode *start;
|
||||
VoiceNode *end;
|
||||
} VList;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t left;
|
||||
uint8_t right;
|
||||
} Pan;
|
||||
|
||||
typedef int16_t MONO16;
|
||||
typedef int8_t MONO8;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MONO16 left;
|
||||
MONO16 right;
|
||||
// uint16_t left;
|
||||
// uint16_t right;
|
||||
} STEREO16;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MONO16 left;
|
||||
MONO16 right;
|
||||
} SIGNEDSTEREO16;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// MONO8 left;
|
||||
// MONO8 right;
|
||||
char left;
|
||||
char right;
|
||||
} STEREO8;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char RIFF[ 4 ];
|
||||
uint32_t file_size;
|
||||
char WAVE[ 4 ];
|
||||
char fmt[ 4 ];
|
||||
uint32_t format_size;
|
||||
} riff_header;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t wFormatTag;
|
||||
uint16_t nChannels;
|
||||
uint32_t nSamplesPerSec;
|
||||
uint32_t nAvgBytesPerSec;
|
||||
uint16_t nBlockAlign;
|
||||
uint16_t nBitsPerSample;
|
||||
} format_header;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t DATA[ 4 ];
|
||||
uint32_t size;
|
||||
} data_header;
|
||||
|
||||
typedef MONO8 VOLUME8[ 256 ];
|
||||
typedef MONO16 VOLUME16[ 256 ];
|
||||
|
||||
extern Pan MV_PanTable[ MV_NumPanPositions ][ 255 + 1 ];
|
||||
extern int32_t MV_ErrorCode;
|
||||
extern int32_t MV_Installed;
|
||||
extern int32_t MV_MaxVolume;
|
||||
extern int32_t MV_MixRate;
|
||||
typedef char HARSH_CLIP_TABLE_8[ MV_NumVoices * 256 ];
|
||||
|
||||
#define MV_SetErrorCode( status ) \
|
||||
MV_ErrorCode = ( status );
|
||||
|
||||
static void MV_Mix( VoiceNode *voice, int32_t buffer );
|
||||
void MV_PlayVoice( VoiceNode *voice );
|
||||
static void MV_StopVoice( VoiceNode *voice );
|
||||
static void MV_ServiceVoc( void );
|
||||
|
||||
static playbackstatus MV_GetNextVOCBlock( VoiceNode *voice );
|
||||
static playbackstatus MV_GetNextDemandFeedBlock( VoiceNode *voice );
|
||||
static playbackstatus MV_GetNextRawBlock( VoiceNode *voice );
|
||||
static playbackstatus MV_GetNextWAVBlock( VoiceNode *voice );
|
||||
static playbackstatus MV_GetNextVorbisBlock( VoiceNode *voice );
|
||||
|
||||
static void MV_ServiceRecord( void );
|
||||
static VoiceNode *MV_GetVoice( int32_t handle );
|
||||
VoiceNode *MV_AllocVoice( int32_t priority );
|
||||
|
||||
static int16_t *MV_GetVolumeTable( int32_t vol );
|
||||
|
||||
void MV_SetVoiceMixMode( VoiceNode *voice );
|
||||
void MV_SetVoiceVolume ( VoiceNode *voice, int32_t vol, int32_t left, int32_t right );
|
||||
|
||||
static void MV_SetVoicePitch( VoiceNode *voice, uint32_t rate, int32_t pitchoffset );
|
||||
static void MV_CalcVolume( int32_t MaxLevel );
|
||||
static void MV_CalcPanTable( void );
|
||||
|
||||
void MV_ReleaseVorbisVoice( VoiceNode * voice );
|
||||
|
||||
// implemented in mix.c
|
||||
void ClearBuffer_DW( void *ptr, unsigned data, int32_t length );
|
||||
|
||||
void MV_Mix8BitMono( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length );
|
||||
|
||||
void MV_Mix8BitStereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitMono( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitStereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitMono16( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix8BitMono16( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length );
|
||||
|
||||
void MV_Mix8BitStereo16( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitStereo16( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_16BitReverb( char *src, char *dest, VOLUME16 *volume, int32_t count );
|
||||
|
||||
void MV_8BitReverb( int8_t *src, int8_t *dest, VOLUME16 *volume, int32_t count );
|
||||
|
||||
void MV_16BitReverbFast( char *src, char *dest, int32_t count, int32_t shift );
|
||||
|
||||
void MV_8BitReverbFast( int8_t *src, int8_t *dest, int32_t count, int32_t shift );
|
||||
|
||||
// implemented in mixst.c
|
||||
void ClearBuffer_DW( void *ptr, unsigned data, int32_t length );
|
||||
|
||||
void MV_Mix8BitMono8Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length );
|
||||
|
||||
void MV_Mix8BitStereo8Stereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitMono8Stereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitStereo8Stereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitMono16Stereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix8BitMono16Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length );
|
||||
|
||||
void MV_Mix8BitStereo16Stereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
void MV_Mix16BitStereo16Stereo( uint32_t position,
|
||||
uint32_t rate, char *start, uint32_t length );
|
||||
|
||||
#endif
|
339
polymer/eduke32/source/jaudiolib/src/driver_coreaudio.c
Normal file
339
polymer/eduke32/source/jaudiolib/src/driver_coreaudio.c
Normal file
|
@ -0,0 +1,339 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* CoreAudio output driver for MultiVoc
|
||||
*
|
||||
* Inspired by the example set by the Audiere sound library available at
|
||||
* https://audiere.svn.sourceforge.net/svnroot/audiere/trunk/audiere/
|
||||
*
|
||||
*/
|
||||
|
||||
#include <AudioUnit/AudioUnit.h>
|
||||
#include <pthread.h>
|
||||
#include "driver_coreaudio.h"
|
||||
|
||||
enum {
|
||||
CAErr_Warning = -2,
|
||||
CAErr_Error = -1,
|
||||
CAErr_Ok = 0,
|
||||
CAErr_Uninitialised,
|
||||
CAErr_FindNextComponent,
|
||||
CAErr_OpenAComponent,
|
||||
CAErr_AudioUnitInitialize,
|
||||
CAErr_AudioUnitSetProperty,
|
||||
CAErr_Mutex
|
||||
};
|
||||
|
||||
static int32_t ErrorCode = CAErr_Ok;
|
||||
static int32_t Initialised = 0;
|
||||
static int32_t Playing = 0;
|
||||
static ComponentInstance output_audio_unit;
|
||||
static pthread_mutex_t mutex;
|
||||
|
||||
static char *MixBuffer = 0;
|
||||
static int32_t MixBufferSize = 0;
|
||||
static int32_t MixBufferCount = 0;
|
||||
static int32_t MixBufferCurrent = 0;
|
||||
static int32_t MixBufferUsed = 0;
|
||||
static void ( *MixCallBack )( void ) = 0;
|
||||
|
||||
static OSStatus fillInput(
|
||||
void *inRefCon,
|
||||
AudioUnitRenderActionFlags inActionFlags,
|
||||
const AudioTimeStamp *inTimeStamp,
|
||||
UInt32 inBusNumber,
|
||||
AudioBuffer *ioData)
|
||||
{
|
||||
UInt32 remaining, len;
|
||||
char *ptr, *sptr;
|
||||
|
||||
remaining = ioData->mDataByteSize;
|
||||
ptr = ioData->mData;
|
||||
|
||||
while (remaining > 0) {
|
||||
if (MixBufferUsed == MixBufferSize) {
|
||||
CoreAudioDrv_Lock();
|
||||
MixCallBack();
|
||||
CoreAudioDrv_Unlock();
|
||||
|
||||
MixBufferUsed = 0;
|
||||
MixBufferCurrent++;
|
||||
if (MixBufferCurrent >= MixBufferCount) {
|
||||
MixBufferCurrent -= MixBufferCount;
|
||||
}
|
||||
}
|
||||
|
||||
while (remaining > 0 && MixBufferUsed < MixBufferSize) {
|
||||
sptr = MixBuffer + (MixBufferCurrent * MixBufferSize) + MixBufferUsed;
|
||||
|
||||
len = MixBufferSize - MixBufferUsed;
|
||||
if (remaining < len) {
|
||||
len = remaining;
|
||||
}
|
||||
|
||||
memcpy(ptr, sptr, len);
|
||||
|
||||
ptr += len;
|
||||
MixBufferUsed += len;
|
||||
remaining -= len;
|
||||
}
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
int32_t CoreAudioDrv_GetError(void)
|
||||
{
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
const char *CoreAudioDrv_ErrorString( int32_t ErrorNumber )
|
||||
{
|
||||
const char *ErrorString;
|
||||
|
||||
switch( ErrorNumber )
|
||||
{
|
||||
case CAErr_Warning :
|
||||
case CAErr_Error :
|
||||
ErrorString = CoreAudioDrv_ErrorString( ErrorCode );
|
||||
break;
|
||||
|
||||
case CAErr_Ok :
|
||||
ErrorString = "CoreAudio ok.";
|
||||
break;
|
||||
|
||||
case CAErr_Uninitialised:
|
||||
ErrorString = "CoreAudio uninitialised.";
|
||||
break;
|
||||
|
||||
case CAErr_FindNextComponent:
|
||||
ErrorString = "CoreAudio error: FindNextComponent returned NULL.";
|
||||
break;
|
||||
|
||||
case CAErr_OpenAComponent:
|
||||
ErrorString = "CoreAudio error: OpenAComponent failed.";
|
||||
break;
|
||||
|
||||
case CAErr_AudioUnitInitialize:
|
||||
ErrorString = "CoreAudio error: AudioUnitInitialize failed.";
|
||||
break;
|
||||
|
||||
case CAErr_AudioUnitSetProperty:
|
||||
ErrorString = "CoreAudio error: AudioUnitSetProperty failed.";
|
||||
break;
|
||||
|
||||
case CAErr_Mutex:
|
||||
ErrorString = "CoreAudio error: could not initialise mutex.";
|
||||
break;
|
||||
|
||||
default:
|
||||
ErrorString = "Unknown CoreAudio error code.";
|
||||
break;
|
||||
}
|
||||
|
||||
return ErrorString;
|
||||
}
|
||||
|
||||
/*
|
||||
int32_t CoreAudioDrv_InitMIDI()
|
||||
{
|
||||
AudioStreamBasicDescription requestedDesc;
|
||||
|
||||
requestedDesc.mFormatID = kAudioFormatMIDIStream;
|
||||
}
|
||||
*/
|
||||
|
||||
int32_t CoreAudioDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata)
|
||||
{
|
||||
OSStatus result = noErr;
|
||||
Component comp;
|
||||
ComponentDescription desc;
|
||||
AudioStreamBasicDescription requestedDesc;
|
||||
struct AudioUnitInputCallback callback;
|
||||
|
||||
if (Initialised) {
|
||||
CoreAudioDrv_Shutdown();
|
||||
}
|
||||
|
||||
if (pthread_mutex_init(&mutex, 0) < 0) {
|
||||
ErrorCode = CAErr_Mutex;
|
||||
return CAErr_Error;
|
||||
}
|
||||
|
||||
// Setup a AudioStreamBasicDescription with the requested format
|
||||
requestedDesc.mFormatID = kAudioFormatLinearPCM;
|
||||
requestedDesc.mFormatFlags = kLinearPCMFormatFlagIsPacked;
|
||||
requestedDesc.mChannelsPerFrame = numchannels;
|
||||
requestedDesc.mSampleRate = mixrate;
|
||||
|
||||
requestedDesc.mBitsPerChannel = samplebits;
|
||||
if (samplebits == 16) {
|
||||
requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger;
|
||||
#ifdef __POWERPC__
|
||||
requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
|
||||
#endif
|
||||
}
|
||||
|
||||
requestedDesc.mFramesPerPacket = 1;
|
||||
requestedDesc.mBytesPerFrame = requestedDesc.mBitsPerChannel * \
|
||||
requestedDesc.mChannelsPerFrame / 8;
|
||||
requestedDesc.mBytesPerPacket = requestedDesc.mBytesPerFrame * \
|
||||
requestedDesc.mFramesPerPacket;
|
||||
|
||||
// Locate the default output audio unit
|
||||
desc.componentType = kAudioUnitComponentType;
|
||||
desc.componentSubType = kAudioUnitSubType_Output;
|
||||
desc.componentManufacturer = kAudioUnitID_DefaultOutput;
|
||||
desc.componentFlags = 0;
|
||||
desc.componentFlagsMask = 0;
|
||||
|
||||
comp = FindNextComponent(NULL, &desc);
|
||||
if (comp == NULL) {
|
||||
ErrorCode = CAErr_FindNextComponent;
|
||||
pthread_mutex_destroy(&mutex);
|
||||
return CAErr_Error;
|
||||
}
|
||||
|
||||
// Open & initialize the default output audio unit
|
||||
result = OpenAComponent(comp, &output_audio_unit);
|
||||
if (result != noErr) {
|
||||
ErrorCode = CAErr_OpenAComponent;
|
||||
CloseComponent(output_audio_unit);
|
||||
pthread_mutex_destroy(&mutex);
|
||||
return CAErr_Error;
|
||||
}
|
||||
|
||||
result = AudioUnitInitialize(output_audio_unit);
|
||||
if (result != noErr) {
|
||||
ErrorCode = CAErr_AudioUnitInitialize;
|
||||
CloseComponent(output_audio_unit);
|
||||
pthread_mutex_destroy(&mutex);
|
||||
return CAErr_Error;
|
||||
}
|
||||
|
||||
// Set the input format of the audio unit.
|
||||
result = AudioUnitSetProperty(output_audio_unit,
|
||||
kAudioUnitProperty_StreamFormat,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&requestedDesc,
|
||||
sizeof(requestedDesc));
|
||||
if (result != noErr) {
|
||||
ErrorCode = CAErr_AudioUnitSetProperty;
|
||||
CloseComponent(output_audio_unit);
|
||||
pthread_mutex_destroy(&mutex);
|
||||
return CAErr_Error;
|
||||
}
|
||||
|
||||
// Set the audio callback
|
||||
callback.inputProc = fillInput;
|
||||
callback.inputProcRefCon = 0;
|
||||
AudioUnitSetProperty(output_audio_unit,
|
||||
kAudioUnitProperty_SetInputCallback,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&callback,
|
||||
sizeof(callback));
|
||||
|
||||
Initialised = 1;
|
||||
|
||||
return CAErr_Ok;
|
||||
}
|
||||
|
||||
void CoreAudioDrv_Shutdown(void)
|
||||
{
|
||||
OSStatus result;
|
||||
struct AudioUnitInputCallback callback;
|
||||
|
||||
if (!Initialised) {
|
||||
return;
|
||||
}
|
||||
|
||||
// stop processing the audio unit
|
||||
CoreAudioDrv_StopPlayback();
|
||||
|
||||
// Remove the input callback
|
||||
callback.inputProc = 0;
|
||||
callback.inputProcRefCon = 0;
|
||||
result = AudioUnitSetProperty(output_audio_unit,
|
||||
kAudioUnitProperty_SetInputCallback,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&callback,
|
||||
sizeof(callback));
|
||||
result = CloseComponent(output_audio_unit);
|
||||
|
||||
pthread_mutex_destroy(&mutex);
|
||||
|
||||
Initialised = 0;
|
||||
}
|
||||
|
||||
int32_t CoreAudioDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) )
|
||||
{
|
||||
if (!Initialised) {
|
||||
ErrorCode = CAErr_Uninitialised;
|
||||
return CAErr_Error;
|
||||
}
|
||||
|
||||
if (Playing) {
|
||||
CoreAudioDrv_StopPlayback();
|
||||
}
|
||||
|
||||
MixBuffer = BufferStart;
|
||||
MixBufferSize = BufferSize;
|
||||
MixBufferCount = NumDivisions;
|
||||
MixBufferCurrent = 0;
|
||||
MixBufferUsed = 0;
|
||||
MixCallBack = CallBackFunc;
|
||||
|
||||
// prime the buffer
|
||||
MixCallBack();
|
||||
|
||||
AudioOutputUnitStart(output_audio_unit);
|
||||
|
||||
Playing = 1;
|
||||
|
||||
return CAErr_Ok;
|
||||
}
|
||||
|
||||
void CoreAudioDrv_StopPlayback(void)
|
||||
{
|
||||
if (!Initialised || !Playing) {
|
||||
return;
|
||||
}
|
||||
|
||||
CoreAudioDrv_Lock();
|
||||
AudioOutputUnitStop(output_audio_unit);
|
||||
CoreAudioDrv_Unlock();
|
||||
|
||||
Playing = 0;
|
||||
}
|
||||
|
||||
void CoreAudioDrv_Lock(void)
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
}
|
||||
|
||||
void CoreAudioDrv_Unlock(void)
|
||||
{
|
||||
pthread_mutex_unlock(&mutex);
|
||||
}
|
29
polymer/eduke32/source/jaudiolib/src/driver_coreaudio.h
Normal file
29
polymer/eduke32/source/jaudiolib/src/driver_coreaudio.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
int32_t CoreAudioDrv_GetError(void);
|
||||
const char *CoreAudioDrv_ErrorString( int32_t ErrorNumber );
|
||||
int32_t CoreAudioDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata);
|
||||
void CoreAudioDrv_Shutdown(void);
|
||||
int32_t CoreAudioDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) );
|
||||
void CoreAudioDrv_StopPlayback(void);
|
||||
void CoreAudioDrv_Lock(void);
|
||||
void CoreAudioDrv_Unlock(void);
|
487
polymer/eduke32/source/jaudiolib/src/driver_directsound.c
Normal file
487
polymer/eduke32/source/jaudiolib/src/driver_directsound.c
Normal file
|
@ -0,0 +1,487 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* DirectSound output driver for MultiVoc
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define DIRECTSOUND_VERSION 0x0700
|
||||
#include <windows.h>
|
||||
#include <mmsystem.h>
|
||||
#include <dsound.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "driver_directsound.h"
|
||||
|
||||
enum {
|
||||
DSErr_Warning = -2,
|
||||
DSErr_Error = -1,
|
||||
DSErr_Ok = 0,
|
||||
DSErr_Uninitialised,
|
||||
DSErr_DirectSoundCreate,
|
||||
DSErr_SetCooperativeLevel,
|
||||
DSErr_CreateSoundBuffer,
|
||||
DSErr_CreateSoundBufferSecondary,
|
||||
DSErr_SetFormat,
|
||||
DSErr_SetFormatSecondary,
|
||||
DSErr_Notify,
|
||||
DSErr_NotifyEvents,
|
||||
DSErr_SetNotificationPositions,
|
||||
DSErr_Play,
|
||||
DSErr_PlaySecondary,
|
||||
DSErr_CreateThread,
|
||||
DSErr_CreateMutex
|
||||
};
|
||||
|
||||
static int32_t ErrorCode = DSErr_Ok;
|
||||
static int32_t Initialised = 0;
|
||||
static int32_t Playing = 0;
|
||||
|
||||
static char *MixBuffer = 0;
|
||||
static int32_t MixBufferSize = 0;
|
||||
static int32_t MixBufferCount = 0;
|
||||
static int32_t MixBufferCurrent = 0;
|
||||
static int32_t MixBufferUsed = 0;
|
||||
static void ( *MixCallBack )( void ) = 0;
|
||||
|
||||
static LPDIRECTSOUND lpds = 0;
|
||||
static LPDIRECTSOUNDBUFFER lpdsbprimary = 0, lpdsbsec = 0;
|
||||
static LPDIRECTSOUNDNOTIFY lpdsnotify = 0;
|
||||
static DSBPOSITIONNOTIFY notifyPositions[3] = { { 0,0 }, { 0,0 }, { 0,0 } };
|
||||
static HANDLE mixThread = 0;
|
||||
static HANDLE mutex = 0;
|
||||
|
||||
|
||||
static void FillBufferPortion(char * ptr, int32_t remaining)
|
||||
{
|
||||
int32_t len;
|
||||
char *sptr;
|
||||
|
||||
while (remaining > 0) {
|
||||
if (MixBufferUsed == MixBufferSize) {
|
||||
MixCallBack();
|
||||
|
||||
MixBufferUsed = 0;
|
||||
MixBufferCurrent++;
|
||||
if (MixBufferCurrent >= MixBufferCount) {
|
||||
MixBufferCurrent -= MixBufferCount;
|
||||
}
|
||||
}
|
||||
|
||||
while (remaining > 0 && MixBufferUsed < MixBufferSize) {
|
||||
sptr = MixBuffer + (MixBufferCurrent * MixBufferSize) + MixBufferUsed;
|
||||
|
||||
len = MixBufferSize - MixBufferUsed;
|
||||
if (remaining < len) {
|
||||
len = remaining;
|
||||
}
|
||||
|
||||
memcpy(ptr, sptr, len);
|
||||
|
||||
ptr += len;
|
||||
MixBufferUsed += len;
|
||||
remaining -= len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void FillBuffer(int32_t bufnum)
|
||||
{
|
||||
HRESULT err;
|
||||
LPVOID ptr, ptr2;
|
||||
DWORD remaining, remaining2;
|
||||
int32_t retries = 1;
|
||||
|
||||
//fprintf(stderr, "DirectSound FillBuffer: filling %d\n", bufnum);
|
||||
|
||||
do {
|
||||
err = IDirectSoundBuffer_Lock(lpdsbsec,
|
||||
notifyPositions[bufnum].dwOffset,
|
||||
notifyPositions[1].dwOffset,
|
||||
&ptr, &remaining,
|
||||
&ptr2, &remaining2,
|
||||
0);
|
||||
if (FAILED(err)) {
|
||||
if (err == DSERR_BUFFERLOST) {
|
||||
err = IDirectSoundBuffer_Restore(lpdsbsec);
|
||||
if (FAILED(err)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (retries-- > 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, "DirectSound FillBuffer: err %x\n", (uint32_t) err);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
} while (1);
|
||||
|
||||
if (ptr) {
|
||||
FillBufferPortion((char *) ptr, remaining);
|
||||
}
|
||||
if (ptr2) {
|
||||
FillBufferPortion((char *) ptr2, remaining2);
|
||||
}
|
||||
|
||||
IDirectSoundBuffer_Unlock(lpdsbsec, ptr, remaining, ptr2, remaining2);
|
||||
}
|
||||
|
||||
static DWORD WINAPI fillDataThread(LPVOID lpParameter)
|
||||
{
|
||||
HANDLE handles[3];
|
||||
DWORD waitret, waitret2;
|
||||
|
||||
handles[0] = notifyPositions[0].hEventNotify;
|
||||
handles[1] = notifyPositions[1].hEventNotify;
|
||||
handles[2] = notifyPositions[2].hEventNotify;
|
||||
|
||||
do {
|
||||
waitret = WaitForMultipleObjects(3, handles, FALSE, INFINITE);
|
||||
switch (waitret) {
|
||||
case WAIT_OBJECT_0:
|
||||
case WAIT_OBJECT_0+1:
|
||||
waitret2 = WaitForSingleObject(mutex, INFINITE);
|
||||
if (waitret2 == WAIT_OBJECT_0) {
|
||||
FillBuffer(WAIT_OBJECT_0 + 1 - waitret);
|
||||
ReleaseMutex(mutex);
|
||||
} else {
|
||||
fprintf(stderr, "DirectSound fillDataThread: wfso err %d\n", (int32_t) waitret2);
|
||||
}
|
||||
break;
|
||||
case WAIT_OBJECT_0+2:
|
||||
fprintf(stderr, "DirectSound fillDataThread: exiting\n");
|
||||
ExitThread(0);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "DirectSound fillDataThread: wfmo err %d\n", (int32_t) waitret);
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int32_t DirectSoundDrv_GetError(void)
|
||||
{
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
const char *DirectSoundDrv_ErrorString( int32_t ErrorNumber )
|
||||
{
|
||||
const char *ErrorString;
|
||||
|
||||
switch( ErrorNumber )
|
||||
{
|
||||
case DSErr_Warning :
|
||||
case DSErr_Error :
|
||||
ErrorString = DirectSoundDrv_ErrorString( ErrorCode );
|
||||
break;
|
||||
|
||||
case DSErr_Ok :
|
||||
ErrorString = "DirectSound ok.";
|
||||
break;
|
||||
|
||||
case DSErr_Uninitialised:
|
||||
ErrorString = "DirectSound uninitialised.";
|
||||
break;
|
||||
|
||||
case DSErr_DirectSoundCreate:
|
||||
ErrorString = "DirectSound error: DirectSoundCreate failed.";
|
||||
break;
|
||||
|
||||
case DSErr_SetCooperativeLevel:
|
||||
ErrorString = "DirectSound error: SetCooperativeLevel failed.";
|
||||
break;
|
||||
|
||||
case DSErr_CreateSoundBuffer:
|
||||
ErrorString = "DirectSound error: primary CreateSoundBuffer failed.";
|
||||
break;
|
||||
|
||||
case DSErr_CreateSoundBufferSecondary:
|
||||
ErrorString = "DirectSound error: secondary CreateSoundBuffer failed.";
|
||||
break;
|
||||
|
||||
case DSErr_SetFormat:
|
||||
ErrorString = "DirectSound error: primary buffer SetFormat failed.";
|
||||
break;
|
||||
|
||||
case DSErr_SetFormatSecondary:
|
||||
ErrorString = "DirectSound error: secondary buffer SetFormat failed.";
|
||||
break;
|
||||
|
||||
case DSErr_Notify:
|
||||
ErrorString = "DirectSound error: failed querying secondary buffer for notify interface.";
|
||||
break;
|
||||
|
||||
case DSErr_NotifyEvents:
|
||||
ErrorString = "DirectSound error: failed creating notify events.";
|
||||
break;
|
||||
|
||||
case DSErr_SetNotificationPositions:
|
||||
ErrorString = "DirectSound error: failed setting notification positions.";
|
||||
break;
|
||||
|
||||
case DSErr_Play:
|
||||
ErrorString = "DirectSound error: primary buffer Play failed.";
|
||||
break;
|
||||
|
||||
case DSErr_PlaySecondary:
|
||||
ErrorString = "DirectSound error: secondary buffer Play failed.";
|
||||
break;
|
||||
|
||||
case DSErr_CreateThread:
|
||||
ErrorString = "DirectSound error: failed creating mix thread.";
|
||||
break;
|
||||
|
||||
case DSErr_CreateMutex:
|
||||
ErrorString = "DirectSound error: failed creating mix mutex.";
|
||||
break;
|
||||
|
||||
default:
|
||||
ErrorString = "Unknown DirectSound error code.";
|
||||
break;
|
||||
}
|
||||
|
||||
return ErrorString;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void TeardownDSound(HRESULT err)
|
||||
{
|
||||
if (FAILED(err)) {
|
||||
fprintf(stderr, "Dying error: %x\n", (uint32_t) err);
|
||||
}
|
||||
|
||||
if (lpdsnotify) IDirectSoundNotify_Release(lpdsnotify);
|
||||
if (notifyPositions[0].hEventNotify) CloseHandle(notifyPositions[0].hEventNotify);
|
||||
if (notifyPositions[1].hEventNotify) CloseHandle(notifyPositions[1].hEventNotify);
|
||||
if (notifyPositions[2].hEventNotify) CloseHandle(notifyPositions[2].hEventNotify);
|
||||
if (mutex) CloseHandle(mutex);
|
||||
if (lpdsbsec) IDirectSoundBuffer_Release(lpdsbsec);
|
||||
if (lpdsbprimary) IDirectSoundBuffer_Release(lpdsbprimary);
|
||||
if (lpds) IDirectSound_Release(lpds);
|
||||
notifyPositions[0].hEventNotify =
|
||||
notifyPositions[1].hEventNotify =
|
||||
notifyPositions[2].hEventNotify = 0;
|
||||
mutex = 0;
|
||||
lpdsnotify = 0;
|
||||
lpdsbsec = 0;
|
||||
lpdsbprimary = 0;
|
||||
lpds = 0;
|
||||
}
|
||||
|
||||
int32_t DirectSoundDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata)
|
||||
{
|
||||
HRESULT err;
|
||||
DSBUFFERDESC bufdesc;
|
||||
WAVEFORMATEX wfex;
|
||||
|
||||
if (Initialised) {
|
||||
DirectSoundDrv_Shutdown();
|
||||
}
|
||||
|
||||
err = DirectSoundCreate(0, &lpds, 0);
|
||||
if (FAILED( err )) {
|
||||
ErrorCode = DSErr_DirectSoundCreate;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
err = IDirectSound_SetCooperativeLevel(lpds, (HWND) initdata, DSSCL_PRIORITY);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_SetCooperativeLevel;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
memset(&bufdesc, 0, sizeof(DSBUFFERDESC));
|
||||
bufdesc.dwSize = sizeof(DSBUFFERDESC);
|
||||
bufdesc.dwFlags = DSBCAPS_PRIMARYBUFFER;
|
||||
|
||||
err = IDirectSound_CreateSoundBuffer(lpds, &bufdesc, &lpdsbprimary, 0);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_CreateSoundBuffer;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
memset(&wfex, 0, sizeof(WAVEFORMATEX));
|
||||
wfex.wFormatTag = WAVE_FORMAT_PCM;
|
||||
wfex.nChannels = numchannels;
|
||||
wfex.nSamplesPerSec = mixrate;
|
||||
wfex.wBitsPerSample = samplebits;
|
||||
wfex.nBlockAlign = wfex.nChannels * wfex.wBitsPerSample / 8;
|
||||
wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign;
|
||||
|
||||
err = IDirectSoundBuffer_SetFormat(lpdsbprimary, &wfex);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_SetFormat;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
bufdesc.dwFlags = DSBCAPS_LOCSOFTWARE |
|
||||
DSBCAPS_CTRLPOSITIONNOTIFY |
|
||||
DSBCAPS_GETCURRENTPOSITION2;
|
||||
bufdesc.dwBufferBytes = wfex.nBlockAlign * 2048 * 2;
|
||||
bufdesc.lpwfxFormat = &wfex;
|
||||
|
||||
err = IDirectSound_CreateSoundBuffer(lpds, &bufdesc, &lpdsbsec, 0);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_SetFormatSecondary;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
err = IDirectSoundBuffer_QueryInterface(lpdsbsec, &IID_IDirectSoundNotify,
|
||||
(LPVOID *) &lpdsnotify);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_Notify;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
notifyPositions[0].dwOffset = 0;
|
||||
notifyPositions[0].hEventNotify = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
notifyPositions[1].dwOffset = bufdesc.dwBufferBytes / 2;
|
||||
notifyPositions[1].hEventNotify = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
notifyPositions[2].dwOffset = DSBPN_OFFSETSTOP;
|
||||
notifyPositions[2].hEventNotify = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
if (!notifyPositions[0].hEventNotify ||
|
||||
!notifyPositions[1].hEventNotify ||
|
||||
!notifyPositions[2].hEventNotify) {
|
||||
TeardownDSound(DS_OK);
|
||||
ErrorCode = DSErr_NotifyEvents;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
err = IDirectSoundNotify_SetNotificationPositions(lpdsnotify, 3, notifyPositions);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_SetNotificationPositions;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
err = IDirectSoundBuffer_Play(lpdsbprimary, 0, 0, DSBPLAY_LOOPING);
|
||||
if (FAILED( err )) {
|
||||
TeardownDSound(err);
|
||||
ErrorCode = DSErr_Play;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
mutex = CreateMutex(0, FALSE, 0);
|
||||
if (!mutex) {
|
||||
TeardownDSound(DS_OK);
|
||||
ErrorCode = DSErr_CreateMutex;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
Initialised = 1;
|
||||
|
||||
fprintf(stderr, "DirectSound Init: yay\n");
|
||||
|
||||
return DSErr_Ok;
|
||||
}
|
||||
|
||||
void DirectSoundDrv_Shutdown(void)
|
||||
{
|
||||
if (!Initialised) {
|
||||
return;
|
||||
}
|
||||
|
||||
DirectSoundDrv_StopPlayback();
|
||||
|
||||
TeardownDSound(DS_OK);
|
||||
|
||||
Initialised = 0;
|
||||
}
|
||||
|
||||
int32_t DirectSoundDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) )
|
||||
{
|
||||
HRESULT err;
|
||||
|
||||
if (!Initialised) {
|
||||
ErrorCode = DSErr_Uninitialised;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
DirectSoundDrv_StopPlayback();
|
||||
|
||||
MixBuffer = BufferStart;
|
||||
MixBufferSize = BufferSize;
|
||||
MixBufferCount = NumDivisions;
|
||||
MixBufferCurrent = 0;
|
||||
MixBufferUsed = 0;
|
||||
MixCallBack = CallBackFunc;
|
||||
|
||||
// prime the buffer
|
||||
FillBuffer(0);
|
||||
|
||||
mixThread = CreateThread(NULL, 0, fillDataThread, 0, 0, 0);
|
||||
if (!mixThread) {
|
||||
ErrorCode = DSErr_CreateThread;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
SetThreadPriority(mixThread, THREAD_PRIORITY_HIGHEST);
|
||||
|
||||
err = IDirectSoundBuffer_Play(lpdsbsec, 0, 0, DSBPLAY_LOOPING);
|
||||
if (FAILED( err )) {
|
||||
ErrorCode = DSErr_PlaySecondary;
|
||||
return DSErr_Error;
|
||||
}
|
||||
|
||||
Playing = 1;
|
||||
|
||||
return DSErr_Ok;
|
||||
}
|
||||
|
||||
void DirectSoundDrv_StopPlayback(void)
|
||||
{
|
||||
if (!Playing) {
|
||||
return;
|
||||
}
|
||||
|
||||
IDirectSoundBuffer_Stop(lpdsbsec);
|
||||
IDirectSoundBuffer_SetCurrentPosition(lpdsbsec, 0);
|
||||
|
||||
Playing = 0;
|
||||
}
|
||||
|
||||
void DirectSoundDrv_Lock(void)
|
||||
{
|
||||
DWORD err;
|
||||
|
||||
err = WaitForSingleObject(mutex, INFINITE);
|
||||
if (err != WAIT_OBJECT_0) {
|
||||
fprintf(stderr, "DirectSound lock: wfso %d\n", (int32_t) err);
|
||||
}
|
||||
}
|
||||
|
||||
void DirectSoundDrv_Unlock(void)
|
||||
{
|
||||
ReleaseMutex(mutex);
|
||||
}
|
31
polymer/eduke32/source/jaudiolib/src/driver_directsound.h
Normal file
31
polymer/eduke32/source/jaudiolib/src/driver_directsound.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#include "inttypes.h"
|
||||
|
||||
int32_t DirectSoundDrv_GetError(void);
|
||||
const char *DirectSoundDrv_ErrorString( int32_t ErrorNumber );
|
||||
int32_t DirectSoundDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata);
|
||||
void DirectSoundDrv_Shutdown(void);
|
||||
int32_t DirectSoundDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) );
|
||||
void DirectSoundDrv_StopPlayback(void);
|
||||
void DirectSoundDrv_Lock(void);
|
||||
void DirectSoundDrv_Unlock(void);
|
62
polymer/eduke32/source/jaudiolib/src/driver_nosound.c
Normal file
62
polymer/eduke32/source/jaudiolib/src/driver_nosound.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* Stub driver for no output
|
||||
*/
|
||||
|
||||
#include "inttypes.h"
|
||||
|
||||
int32_t NoSoundDrv_GetError(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *NoSoundDrv_ErrorString( int32_t ErrorNumber )
|
||||
{
|
||||
return "No sound, Ok.";
|
||||
}
|
||||
|
||||
int32_t NoSoundDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NoSoundDrv_Shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
int32_t NoSoundDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NoSoundDrv_StopPlayback(void)
|
||||
{
|
||||
}
|
||||
|
||||
void NoSoundDrv_Lock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void NoSoundDrv_Unlock(void)
|
||||
{
|
||||
}
|
30
polymer/eduke32/source/jaudiolib/src/driver_nosound.h
Normal file
30
polymer/eduke32/source/jaudiolib/src/driver_nosound.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
int NoSoundDrv_GetError(void);
|
||||
const char *NoSoundDrv_ErrorString( int ErrorNumber );
|
||||
int NoSoundDrv_Init(int mixrate, int numchannels, int samplebits, void * initdata);
|
||||
void NoSoundDrv_Shutdown(void);
|
||||
int NoSoundDrv_BeginPlayback(char *BufferStart, int BufferSize,
|
||||
int NumDivisions, void ( *CallBackFunc )( void ) );
|
||||
void NoSoundDrv_StopPlayback(void);
|
||||
void NoSoundDrv_Lock(void);
|
||||
void NoSoundDrv_Unlock(void);
|
231
polymer/eduke32/source/jaudiolib/src/driver_sdl.c
Normal file
231
polymer/eduke32/source/jaudiolib/src/driver_sdl.c
Normal file
|
@ -0,0 +1,231 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* libSDL output driver for MultiVoc
|
||||
*/
|
||||
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
#include "driver_sdl.h"
|
||||
|
||||
enum {
|
||||
SDLErr_Warning = -2,
|
||||
SDLErr_Error = -1,
|
||||
SDLErr_Ok = 0,
|
||||
SDLErr_Uninitialised,
|
||||
SDLErr_InitSubSystem,
|
||||
SDLErr_OpenAudio
|
||||
};
|
||||
|
||||
static int32_t ErrorCode = SDLErr_Ok;
|
||||
static int32_t Initialised = 0;
|
||||
static int32_t Playing = 0;
|
||||
static int32_t StartedSDL = -1;
|
||||
|
||||
static char *MixBuffer = 0;
|
||||
static int32_t MixBufferSize = 0;
|
||||
static int32_t MixBufferCount = 0;
|
||||
static int32_t MixBufferCurrent = 0;
|
||||
static int32_t MixBufferUsed = 0;
|
||||
static void ( *MixCallBack )( void ) = 0;
|
||||
|
||||
static void fillData(void * userdata, Uint8 * ptr, int32_t remaining)
|
||||
{
|
||||
int32_t len;
|
||||
char *sptr;
|
||||
|
||||
while (remaining > 0) {
|
||||
if (MixBufferUsed == MixBufferSize) {
|
||||
MixCallBack();
|
||||
|
||||
MixBufferUsed = 0;
|
||||
MixBufferCurrent++;
|
||||
if (MixBufferCurrent >= MixBufferCount) {
|
||||
MixBufferCurrent -= MixBufferCount;
|
||||
}
|
||||
}
|
||||
|
||||
while (remaining > 0 && MixBufferUsed < MixBufferSize) {
|
||||
sptr = MixBuffer + (MixBufferCurrent * MixBufferSize) + MixBufferUsed;
|
||||
|
||||
len = MixBufferSize - MixBufferUsed;
|
||||
if (remaining < len) {
|
||||
len = remaining;
|
||||
}
|
||||
|
||||
memcpy(ptr, sptr, len);
|
||||
|
||||
ptr += len;
|
||||
MixBufferUsed += len;
|
||||
remaining -= len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int32_t SDLDrv_GetError(void)
|
||||
{
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
const char *SDLDrv_ErrorString( int32_t ErrorNumber )
|
||||
{
|
||||
const char *ErrorString;
|
||||
|
||||
switch( ErrorNumber ) {
|
||||
case SDLErr_Warning :
|
||||
case SDLErr_Error :
|
||||
ErrorString = SDLDrv_ErrorString( ErrorCode );
|
||||
break;
|
||||
|
||||
case SDLErr_Ok :
|
||||
ErrorString = "SDL Audio ok.";
|
||||
break;
|
||||
|
||||
case SDLErr_Uninitialised:
|
||||
ErrorString = "SDL Audio uninitialised.";
|
||||
break;
|
||||
|
||||
case SDLErr_InitSubSystem:
|
||||
ErrorString = "SDL Audio: error in Init or InitSubSystem.";
|
||||
break;
|
||||
|
||||
case SDLErr_OpenAudio:
|
||||
ErrorString = "SDL Audio: error in OpenAudio.";
|
||||
break;
|
||||
|
||||
default:
|
||||
ErrorString = "Unknown SDL Audio error code.";
|
||||
break;
|
||||
}
|
||||
|
||||
return ErrorString;
|
||||
}
|
||||
|
||||
int32_t SDLDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata)
|
||||
{
|
||||
Uint32 inited;
|
||||
Uint32 err = 0;
|
||||
SDL_AudioSpec spec;
|
||||
|
||||
if (Initialised) {
|
||||
SDLDrv_Shutdown();
|
||||
}
|
||||
|
||||
inited = SDL_WasInit(SDL_INIT_EVERYTHING);
|
||||
|
||||
if (inited == 0) {
|
||||
// nothing was initialised
|
||||
err = SDL_Init(SDL_INIT_AUDIO);
|
||||
StartedSDL = 0;
|
||||
} else if (inited & SDL_INIT_AUDIO) {
|
||||
err = SDL_InitSubSystem(SDL_INIT_AUDIO);
|
||||
StartedSDL = 1;
|
||||
}
|
||||
|
||||
if (err < 0) {
|
||||
ErrorCode = SDLErr_InitSubSystem;
|
||||
return SDLErr_Error;
|
||||
}
|
||||
|
||||
spec.freq = mixrate;
|
||||
spec.format = (samplebits == 8) ? AUDIO_U8 : AUDIO_S16SYS;
|
||||
spec.channels = numchannels;
|
||||
spec.samples = 256;
|
||||
spec.callback = fillData;
|
||||
spec.userdata = 0;
|
||||
|
||||
err = SDL_OpenAudio(&spec, NULL);
|
||||
if (err < 0) {
|
||||
ErrorCode = SDLErr_OpenAudio;
|
||||
return SDLErr_Error;
|
||||
}
|
||||
|
||||
Initialised = 1;
|
||||
|
||||
return SDLErr_Ok;
|
||||
}
|
||||
|
||||
void SDLDrv_Shutdown(void)
|
||||
{
|
||||
if (!Initialised) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (StartedSDL > 0) {
|
||||
SDL_QuitSubSystem(SDL_INIT_AUDIO);
|
||||
} else if (StartedSDL == 0) {
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
StartedSDL = -1;
|
||||
}
|
||||
|
||||
int32_t SDLDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) )
|
||||
{
|
||||
if (!Initialised) {
|
||||
ErrorCode = SDLErr_Uninitialised;
|
||||
return SDLErr_Error;
|
||||
}
|
||||
|
||||
if (Playing) {
|
||||
SDLDrv_StopPlayback();
|
||||
}
|
||||
|
||||
MixBuffer = BufferStart;
|
||||
MixBufferSize = BufferSize;
|
||||
MixBufferCount = NumDivisions;
|
||||
MixBufferCurrent = 0;
|
||||
MixBufferUsed = 0;
|
||||
MixCallBack = CallBackFunc;
|
||||
|
||||
// prime the buffer
|
||||
MixCallBack();
|
||||
|
||||
SDL_PauseAudio(0);
|
||||
|
||||
Playing = 1;
|
||||
|
||||
return SDLErr_Ok;
|
||||
}
|
||||
|
||||
void SDLDrv_StopPlayback(void)
|
||||
{
|
||||
if (!Initialised || !Playing) {
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_PauseAudio(1);
|
||||
|
||||
Playing = 0;
|
||||
}
|
||||
|
||||
void SDLDrv_Lock(void)
|
||||
{
|
||||
SDL_LockAudio();
|
||||
}
|
||||
|
||||
void SDLDrv_Unlock(void)
|
||||
{
|
||||
SDL_UnlockAudio();
|
||||
}
|
||||
|
30
polymer/eduke32/source/jaudiolib/src/driver_sdl.h
Normal file
30
polymer/eduke32/source/jaudiolib/src/driver_sdl.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
int32_t SDLDrv_GetError(void);
|
||||
const char *SDLDrv_ErrorString( int32_t ErrorNumber );
|
||||
int32_t SDLDrv_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata);
|
||||
void SDLDrv_Shutdown(void);
|
||||
int32_t SDLDrv_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) );
|
||||
void SDLDrv_StopPlayback(void);
|
||||
void SDLDrv_Lock(void);
|
||||
void SDLDrv_Unlock(void);
|
174
polymer/eduke32/source/jaudiolib/src/drivers.c
Normal file
174
polymer/eduke32/source/jaudiolib/src/drivers.c
Normal file
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* Abstraction layer for hiding the various supported sound devices
|
||||
* behind a common and opaque interface called on by MultiVoc.
|
||||
*/
|
||||
|
||||
#include "drivers.h"
|
||||
|
||||
#include "driver_nosound.h"
|
||||
|
||||
#ifdef HAVE_SDL
|
||||
# include "driver_sdl.h"
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include "driver_coreaudio.h"
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# include "driver_directsound.h"
|
||||
#endif
|
||||
|
||||
int32_t ASS_SoundDriver = -1;
|
||||
|
||||
#define UNSUPPORTED { 0,0,0,0,0,0,0,0, },
|
||||
|
||||
static struct {
|
||||
int32_t (* GetError)(void);
|
||||
const char * (* ErrorString)(int32_t);
|
||||
int32_t (* Init)(int32_t, int32_t, int32_t, void *);
|
||||
void (* Shutdown)(void);
|
||||
int32_t (* BeginPlayback)(char *, int32_t, int32_t, void ( * )(void) );
|
||||
void (* StopPlayback)(void);
|
||||
void (* Lock)(void);
|
||||
void (* Unlock)(void);
|
||||
} SoundDrivers[ASS_NumSoundCards] = {
|
||||
|
||||
// Everyone gets the "no sound" driver
|
||||
{
|
||||
NoSoundDrv_GetError,
|
||||
NoSoundDrv_ErrorString,
|
||||
NoSoundDrv_Init,
|
||||
NoSoundDrv_Shutdown,
|
||||
NoSoundDrv_BeginPlayback,
|
||||
NoSoundDrv_StopPlayback,
|
||||
NoSoundDrv_Lock,
|
||||
NoSoundDrv_Unlock,
|
||||
},
|
||||
|
||||
// Simple DirectMedia Layer
|
||||
#ifdef HAVE_SDL
|
||||
{
|
||||
SDLDrv_GetError,
|
||||
SDLDrv_ErrorString,
|
||||
SDLDrv_Init,
|
||||
SDLDrv_Shutdown,
|
||||
SDLDrv_BeginPlayback,
|
||||
SDLDrv_StopPlayback,
|
||||
SDLDrv_Lock,
|
||||
SDLDrv_Unlock,
|
||||
},
|
||||
#else
|
||||
UNSUPPORTED
|
||||
#endif
|
||||
|
||||
// OS X CoreAudio
|
||||
#ifdef __APPLE__
|
||||
{
|
||||
CoreAudioDrv_GetError,
|
||||
CoreAudioDrv_ErrorString,
|
||||
CoreAudioDrv_Init,
|
||||
CoreAudioDrv_Shutdown,
|
||||
CoreAudioDrv_BeginPlayback,
|
||||
CoreAudioDrv_StopPlayback,
|
||||
CoreAudioDrv_Lock,
|
||||
CoreAudioDrv_Unlock,
|
||||
},
|
||||
#else
|
||||
UNSUPPORTED
|
||||
#endif
|
||||
|
||||
// Windows DirectSound
|
||||
#ifdef WIN32
|
||||
{
|
||||
DirectSoundDrv_GetError,
|
||||
DirectSoundDrv_ErrorString,
|
||||
DirectSoundDrv_Init,
|
||||
DirectSoundDrv_Shutdown,
|
||||
DirectSoundDrv_BeginPlayback,
|
||||
DirectSoundDrv_StopPlayback,
|
||||
DirectSoundDrv_Lock,
|
||||
DirectSoundDrv_Unlock,
|
||||
},
|
||||
#else
|
||||
UNSUPPORTED
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
int32_t SoundDriver_IsSupported(int32_t driver)
|
||||
{
|
||||
return (SoundDrivers[driver].GetError != 0);
|
||||
}
|
||||
|
||||
|
||||
int32_t SoundDriver_GetError(void)
|
||||
{
|
||||
if (!SoundDriver_IsSupported(ASS_SoundDriver)) {
|
||||
return -1;
|
||||
}
|
||||
return SoundDrivers[ASS_SoundDriver].GetError();
|
||||
}
|
||||
|
||||
const char * SoundDriver_ErrorString( int32_t ErrorNumber )
|
||||
{
|
||||
if (ASS_SoundDriver < 0 || ASS_SoundDriver >= ASS_NumSoundCards) {
|
||||
return "No sound driver selected.";
|
||||
}
|
||||
if (!SoundDriver_IsSupported(ASS_SoundDriver)) {
|
||||
return "Unsupported sound driver selected.";
|
||||
}
|
||||
return SoundDrivers[ASS_SoundDriver].ErrorString(ErrorNumber);
|
||||
}
|
||||
|
||||
int32_t SoundDriver_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata)
|
||||
{
|
||||
return SoundDrivers[ASS_SoundDriver].Init(mixrate, numchannels, samplebits, initdata);
|
||||
}
|
||||
|
||||
void SoundDriver_Shutdown(void)
|
||||
{
|
||||
SoundDrivers[ASS_SoundDriver].Shutdown();
|
||||
}
|
||||
|
||||
int32_t SoundDriver_BeginPlayback(char *BufferStart, int32_t BufferSize,
|
||||
int32_t NumDivisions, void ( *CallBackFunc )( void ) )
|
||||
{
|
||||
return SoundDrivers[ASS_SoundDriver].BeginPlayback(BufferStart,
|
||||
BufferSize, NumDivisions, CallBackFunc);
|
||||
}
|
||||
|
||||
void SoundDriver_StopPlayback(void)
|
||||
{
|
||||
SoundDrivers[ASS_SoundDriver].StopPlayback();
|
||||
}
|
||||
|
||||
void SoundDriver_Lock(void)
|
||||
{
|
||||
SoundDrivers[ASS_SoundDriver].Lock();
|
||||
}
|
||||
|
||||
void SoundDriver_Unlock(void)
|
||||
{
|
||||
SoundDrivers[ASS_SoundDriver].Unlock();
|
||||
}
|
42
polymer/eduke32/source/jaudiolib/src/drivers.h
Normal file
42
polymer/eduke32/source/jaudiolib/src/drivers.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef DRIVERS_H
|
||||
#define DRIVERS_H
|
||||
|
||||
#include "inttypes.h"
|
||||
#include "sndcards.h"
|
||||
|
||||
extern int32_t ASS_SoundDriver;
|
||||
|
||||
int32_t SoundDriver_IsSupported(int32_t driver);
|
||||
|
||||
int32_t SoundDriver_GetError(void);
|
||||
const char * SoundDriver_ErrorString( int32_t ErrorNumber );
|
||||
int32_t SoundDriver_Init(int32_t mixrate, int32_t numchannels, int32_t samplebits, void * initdata);
|
||||
void SoundDriver_Shutdown(void);
|
||||
int32_t SoundDriver_BeginPlayback( char *BufferStart,
|
||||
int32_t BufferSize, int32_t NumDivisions,
|
||||
void ( *CallBackFunc )( void ) );
|
||||
void SoundDriver_StopPlayback(void);
|
||||
void SoundDriver_Lock(void);
|
||||
void SoundDriver_Unlock(void);
|
||||
|
||||
#endif
|
1069
polymer/eduke32/source/jaudiolib/src/fx_man.c
Normal file
1069
polymer/eduke32/source/jaudiolib/src/fx_man.c
Normal file
File diff suppressed because it is too large
Load diff
118
polymer/eduke32/source/jaudiolib/src/linklist.h
Normal file
118
polymer/eduke32/source/jaudiolib/src/linklist.h
Normal file
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
#ifndef __linklist_h
|
||||
#define __linklist_h
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define NewNode(type) ((type*)SafeMalloc(sizeof(type)))
|
||||
|
||||
|
||||
#define LL_CreateNewLinkedList(rootnode,type,next,prev) \
|
||||
{ \
|
||||
(rootnode) = NewNode(type); \
|
||||
(rootnode)->prev = (rootnode); \
|
||||
(rootnode)->next = (rootnode); \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define LL_AddNode(rootnode, newnode, next, prev) \
|
||||
{ \
|
||||
(newnode)->next = (rootnode); \
|
||||
(newnode)->prev = (rootnode)->prev; \
|
||||
(rootnode)->prev->next = (newnode); \
|
||||
(rootnode)->prev = (newnode); \
|
||||
}
|
||||
|
||||
#define LL_TransferList(oldroot,newroot,next,prev) \
|
||||
{ \
|
||||
if ((oldroot)->prev != (oldroot)) \
|
||||
{ \
|
||||
(oldroot)->prev->next = (newroot); \
|
||||
(oldroot)->next->prev = (newroot)->prev; \
|
||||
(newroot)->prev->next = (oldroot)->next; \
|
||||
(newroot)->prev = (oldroot)->prev; \
|
||||
(oldroot)->next = (oldroot); \
|
||||
(oldroot)->prev = (oldroot); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define LL_ReverseList(root,type,next,prev) \
|
||||
{ \
|
||||
type *newend,*trav,*tprev; \
|
||||
\
|
||||
newend = (root)->next; \
|
||||
for(trav = (root)->prev; trav != newend; trav = tprev) \
|
||||
{ \
|
||||
tprev = trav->prev; \
|
||||
LL_MoveNode(trav,newend,next,prev); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#define LL_RemoveNode(node,next,prev) \
|
||||
{ \
|
||||
(node)->prev->next = (node)->next; \
|
||||
(node)->next->prev = (node)->prev; \
|
||||
(node)->next = (node); \
|
||||
(node)->prev = (node); \
|
||||
}
|
||||
|
||||
|
||||
#define LL_SortedInsertion(rootnode,insertnode,next,prev,type,sortparm) \
|
||||
{ \
|
||||
type *hoya; \
|
||||
\
|
||||
hoya = (rootnode)->next; \
|
||||
while((hoya != (rootnode)) && ((insertnode)->sortparm > hoya->sortparm)) \
|
||||
{ \
|
||||
hoya = hoya->next; \
|
||||
} \
|
||||
LL_AddNode(hoya,(insertnode),next,prev); \
|
||||
}
|
||||
|
||||
#define LL_MoveNode(node,newroot,next,prev) \
|
||||
{ \
|
||||
LL_RemoveNode((node),next,prev); \
|
||||
LL_AddNode((newroot),(node),next,prev); \
|
||||
}
|
||||
|
||||
#define LL_ListEmpty(list,next,prev) \
|
||||
( \
|
||||
((list)->next == (list)) && \
|
||||
((list)->prev == (list)) \
|
||||
)
|
||||
|
||||
#define LL_Free(list) SafeFree(list)
|
||||
#define LL_Reset(list,next,prev) (list)->next = (list)->prev = (list)
|
||||
#define LL_New LL_CreateNewLinkedList
|
||||
#define LL_Remove LL_RemoveNode
|
||||
#define LL_Add LL_AddNode
|
||||
#define LL_Empty LL_ListEmpty
|
||||
#define LL_Move LL_MoveNode
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif
|
76
polymer/eduke32/source/jaudiolib/src/ll_man.h
Normal file
76
polymer/eduke32/source/jaudiolib/src/ll_man.h
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
module: LL_MAN.H
|
||||
|
||||
author: James R. Dose
|
||||
date: February 4, 1994
|
||||
|
||||
Public header for LL_MAN.C. Linked list management routines.
|
||||
|
||||
(c) Copyright 1994 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __LL_MAN_H
|
||||
#define __LL_MAN_H
|
||||
|
||||
enum LL_Errors
|
||||
{
|
||||
LL_Warning = -2,
|
||||
LL_Error = -1,
|
||||
LL_Ok = 0
|
||||
};
|
||||
|
||||
typedef struct list
|
||||
{
|
||||
void *start;
|
||||
void *end;
|
||||
} list;
|
||||
|
||||
void LL_AddNode( char *node, char **head, char **tail, int32_t next, int32_t prev );
|
||||
void LL_RemoveNode( char *node, char **head, char **tail, int32_t next, int32_t prev );
|
||||
void LL_UnlockMemory( void );
|
||||
int32_t LL_LockMemory( void );
|
||||
|
||||
#define LL_AddToHead( type, listhead, node ) \
|
||||
LL_AddNode( ( char * )( node ), \
|
||||
( char ** )&( ( listhead )->start ), \
|
||||
( char ** )&( ( listhead )->end ), \
|
||||
( int32_t )&( ( type * ) 0 )->next, \
|
||||
( int32_t )&( ( type * ) 0 )->prev )
|
||||
|
||||
#define LL_AddToTail( type, listhead, node ) \
|
||||
LL_AddNode( ( char * )( node ), \
|
||||
( char ** )&( ( listhead )->end ), \
|
||||
( char ** )&( ( listhead )->start ), \
|
||||
( int32_t )&( ( type * ) 0 )->prev, \
|
||||
( int32_t )&( ( type * ) 0 )->next )
|
||||
|
||||
#define LL_Remove( type, listhead, node ) \
|
||||
LL_RemoveNode( ( char * )( node ), \
|
||||
( char ** )&( ( listhead )->start ), \
|
||||
( char ** )&( ( listhead )->end ), \
|
||||
( int32_t )&( ( type * ) 0 )->next, \
|
||||
( int32_t )&( ( type * ) 0 )->prev )
|
||||
|
||||
#define LL_NextNode( node ) ( ( node )->next )
|
||||
#define LL_PreviousNode( node ) ( ( node )->prev )
|
||||
|
||||
#endif
|
353
polymer/eduke32/source/jaudiolib/src/mix.c
Normal file
353
polymer/eduke32/source/jaudiolib/src/mix.c
Normal file
|
@ -0,0 +1,353 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#include "_multivc.h"
|
||||
|
||||
extern char *MV_HarshClipTable;
|
||||
extern char *MV_MixDestination; // pointer to the next output sample
|
||||
extern uint32_t MV_MixPosition; // return value of where the source pointer got to
|
||||
extern int16_t *MV_LeftVolume;
|
||||
extern int16_t *MV_RightVolume;
|
||||
extern int32_t MV_SampleSize;
|
||||
extern int32_t MV_RightChannelOffset;
|
||||
|
||||
#ifdef __POWERPC__
|
||||
# define BIGENDIAN
|
||||
#endif
|
||||
|
||||
void ClearBuffer_DW( void *ptr, unsigned data, int32_t length )
|
||||
{
|
||||
unsigned *ptrdw = ptr;
|
||||
while (length--) {
|
||||
*(ptrdw++) = data;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
JBF:
|
||||
|
||||
position = offset of starting sample in start
|
||||
rate = resampling increment
|
||||
start = sound data
|
||||
length = count of samples to mix
|
||||
*/
|
||||
|
||||
// 8-bit mono source, 8-bit mono output
|
||||
void MV_Mix8BitMono( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[position >> 16];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0] + *dest;
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 8-bit mono source, 8-bit stereo output
|
||||
void MV_Mix8BitStereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[position >> 16];
|
||||
sample1 = sample0;
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0] + *dest;
|
||||
sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset);
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
sample1 = MV_HarshClipTable[sample1 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
*(dest + MV_RightChannelOffset) = sample1 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 8-bit mono source, 16-bit mono output
|
||||
void MV_Mix16BitMono( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[position >> 16];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0] + *dest;
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 8-bit mono source, 16-bit stereo output
|
||||
void MV_Mix16BitStereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[position >> 16];
|
||||
sample1 = sample0;
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0] + *dest;
|
||||
sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset / 2);
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
if (sample1 < -32768) sample1 = -32768;
|
||||
else if (sample1 > 32767) sample1 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
*(dest + MV_RightChannelOffset/2) = (int16_t) sample1;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit mono source, 16-bit mono output
|
||||
void MV_Mix16BitMono16( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint16_t *source = (uint16_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0l, sample0h, sample0;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[position >> 16];
|
||||
#ifdef BIGENDIAN
|
||||
sample0l = sample0 >> 8;
|
||||
sample0h = (sample0 & 255) ^ 128;
|
||||
#else
|
||||
sample0l = sample0 & 255;
|
||||
sample0h = (sample0 >> 8) ^ 128;
|
||||
#endif
|
||||
position += rate;
|
||||
|
||||
sample0l = MV_LeftVolume[sample0l] >> 8;
|
||||
sample0h = MV_LeftVolume[sample0h];
|
||||
sample0 = sample0l + sample0h + 128 + *dest;
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit mono source, 8-bit mono output
|
||||
void MV_Mix8BitMono16( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
int8_t *source = (int8_t *) start + 1;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0 + 128] + *dest;
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit mono source, 8-bit stereo output
|
||||
void MV_Mix8BitStereo16( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
int8_t *source = (int8_t *) start + 1;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = sample0;
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0 + 128] + *dest;
|
||||
sample1 = MV_RightVolume[sample1 + 128] + *(dest + MV_RightChannelOffset);
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
sample1 = MV_HarshClipTable[sample1 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
*(dest + MV_RightChannelOffset) = sample1 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit mono source, 16-bit stereo output
|
||||
void MV_Mix16BitStereo16( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint16_t *source = (uint16_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0l, sample0h, sample0;
|
||||
int32_t sample1l, sample1h, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[position >> 16];
|
||||
#ifdef BIGENDIAN
|
||||
sample0l = sample0 >> 8;
|
||||
sample0h = (sample0 & 255) ^ 128;
|
||||
#else
|
||||
sample0l = sample0 & 255;
|
||||
sample0h = (sample0 >> 8) ^ 128;
|
||||
#endif
|
||||
sample1l = sample0l;
|
||||
sample1h = sample0h;
|
||||
position += rate;
|
||||
|
||||
sample0l = MV_LeftVolume[sample0l] >> 8;
|
||||
sample0h = MV_LeftVolume[sample0h];
|
||||
sample1l = MV_RightVolume[sample1l] >> 8;
|
||||
sample1h = MV_RightVolume[sample1h];
|
||||
sample0 = sample0l + sample0h + 128 + *dest;
|
||||
sample1 = sample1l + sample1h + 128 + *(dest + MV_RightChannelOffset/2);
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
if (sample1 < -32768) sample1 = -32768;
|
||||
else if (sample1 > 32767) sample1 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
*(dest + MV_RightChannelOffset/2) = (int16_t) sample1;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
void MV_16BitReverb( char *src, char *dest, VOLUME16 *volume, int32_t count )
|
||||
{
|
||||
uint16_t * input = (uint16_t *) src;
|
||||
int16_t * output = (int16_t *) dest;
|
||||
int16_t sample0l, sample0h, sample0;
|
||||
|
||||
do {
|
||||
sample0 = *input;
|
||||
#ifdef BIGENDIAN
|
||||
sample0l = sample0 >> 8;
|
||||
sample0h = (sample0 & 255) ^ 128;
|
||||
#else
|
||||
sample0l = sample0 & 255;
|
||||
sample0h = (sample0 >> 8) ^ 128;
|
||||
#endif
|
||||
|
||||
sample0l = ((int16_t *) volume)[sample0l] >> 8;
|
||||
sample0h = ((int16_t *) volume)[sample0h];
|
||||
*output = (int16_t) (sample0l + sample0h + 128);
|
||||
|
||||
input++;
|
||||
output++;
|
||||
} while (count-- > 0);
|
||||
}
|
||||
|
||||
void MV_8BitReverb( int8_t *src, int8_t *dest, VOLUME16 *volume, int32_t count )
|
||||
{
|
||||
uint8_t * input = (uint8_t *) src;
|
||||
uint8_t * output = (uint8_t *) dest;
|
||||
|
||||
do {
|
||||
*output = ((int16_t *) volume)[*input] + 128;
|
||||
|
||||
input++;
|
||||
output++;
|
||||
} while (count-- > 0);
|
||||
}
|
||||
|
||||
void MV_16BitReverbFast( char *src, char *dest, int32_t count, int32_t shift )
|
||||
{
|
||||
int16_t * input = (int16_t *) src;
|
||||
int16_t * output = (int16_t *) dest;
|
||||
|
||||
do {
|
||||
*output = *input >> shift;
|
||||
|
||||
input++;
|
||||
output++;
|
||||
} while (count-- > 0);
|
||||
}
|
||||
|
||||
void MV_8BitReverbFast( int8_t *src, int8_t *dest, int32_t count, int32_t shift )
|
||||
{
|
||||
uint8_t sample0, c;
|
||||
|
||||
c = 128 - (128 >> shift);
|
||||
|
||||
do {
|
||||
sample0 = *((uint8_t *) src) >> shift;
|
||||
*dest = sample0 + c + ((sample0 ^ 128) >> 7);
|
||||
|
||||
src++;
|
||||
dest++;
|
||||
} while (count-- > 0);
|
||||
}
|
||||
|
297
polymer/eduke32/source/jaudiolib/src/mixst.c
Normal file
297
polymer/eduke32/source/jaudiolib/src/mixst.c
Normal file
|
@ -0,0 +1,297 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
#include "_multivc.h"
|
||||
|
||||
extern char *MV_HarshClipTable;
|
||||
extern char *MV_MixDestination; // pointer to the next output sample
|
||||
extern uint32_t MV_MixPosition; // return value of where the source pointer got to
|
||||
extern int16_t *MV_LeftVolume;
|
||||
extern int16_t *MV_RightVolume;
|
||||
extern int32_t MV_SampleSize;
|
||||
extern int32_t MV_RightChannelOffset;
|
||||
|
||||
#ifdef __POWERPC__
|
||||
# define BIGENDIAN
|
||||
#endif
|
||||
|
||||
/*
|
||||
JBF:
|
||||
|
||||
position = offset of starting sample in start
|
||||
rate = resampling increment
|
||||
start = sound data
|
||||
length = count of samples to mix
|
||||
*/
|
||||
|
||||
// 8-bit stereo source, 8-bit mono output
|
||||
void MV_Mix8BitMono8Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = source[((position >> 16) << 1) + 1];
|
||||
position += rate;
|
||||
|
||||
sample0 = (MV_LeftVolume[sample0] + MV_LeftVolume[sample1]) / 2 + *dest;
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 8-bit stereo source, 8-bit stereo output
|
||||
void MV_Mix8BitStereo8Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = source[((position >> 16) << 1) + 1];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0] + *dest;
|
||||
sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset);
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
sample1 = MV_HarshClipTable[sample1 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
*(dest + MV_RightChannelOffset) = sample1 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 8-bit stereo source, 16-bit mono output
|
||||
void MV_Mix16BitMono8Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = source[((position >> 16) << 1) + 1];
|
||||
position += rate;
|
||||
|
||||
sample0 = (MV_LeftVolume[sample0] + MV_LeftVolume[sample1]) / 2 + *dest;
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 8-bit stereo source, 16-bit stereo output
|
||||
void MV_Mix16BitStereo8Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint8_t *source = (uint8_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = source[((position >> 16) << 1) + 1];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0] + *dest;
|
||||
sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset / 2);
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
if (sample1 < -32768) sample1 = -32768;
|
||||
else if (sample1 > 32767) sample1 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
*(dest + MV_RightChannelOffset/2) = (int16_t) sample1;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit stereo source, 16-bit mono output
|
||||
void MV_Mix16BitMono16Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint16_t *source = (uint16_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0l, sample0h, sample0;
|
||||
int32_t sample1l, sample1h, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = source[((position >> 16) << 1) + 1];
|
||||
#ifdef BIGENDIAN
|
||||
sample0l = sample0 >> 8;
|
||||
sample0h = (sample0 & 255) ^ 128;
|
||||
sample1l = sample1 >> 8;
|
||||
sample1h = (sample1 & 255) ^ 128;
|
||||
#else
|
||||
sample0l = sample0 & 255;
|
||||
sample0h = (sample0 >> 8) ^ 128;
|
||||
sample1l = sample1 & 255;
|
||||
sample1h = (sample1 >> 8) ^ 128;
|
||||
#endif
|
||||
position += rate;
|
||||
|
||||
sample0l = MV_LeftVolume[sample0l] >> 8;
|
||||
sample0h = MV_LeftVolume[sample0h];
|
||||
sample0 = sample0l + sample0h + 128;
|
||||
sample1l = MV_LeftVolume[sample1l] >> 8;
|
||||
sample1h = MV_LeftVolume[sample1h];
|
||||
sample1 = sample1l + sample1h + 128;
|
||||
|
||||
sample0 = (sample0 + sample1) / 2 + *dest;
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit stereo source, 8-bit mono output
|
||||
void MV_Mix8BitMono16Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
int8_t *source = (int8_t *) start + 1;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 2];
|
||||
sample1 = source[((position >> 16) << 2) + 2];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0 + 128];
|
||||
sample1 = MV_LeftVolume[sample1 + 128];
|
||||
sample0 = (sample0 + sample1) / 2 + *dest;
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit stereo source, 8-bit stereo output
|
||||
void MV_Mix8BitStereo16Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
int8_t *source = (int8_t *) start + 1;
|
||||
uint8_t *dest = (uint8_t *) MV_MixDestination;
|
||||
int32_t sample0, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 2];
|
||||
sample1 = source[((position >> 16) << 2) + 2];
|
||||
position += rate;
|
||||
|
||||
sample0 = MV_LeftVolume[sample0 + 128] + *dest;
|
||||
sample1 = MV_RightVolume[sample1 + 128] + *(dest + MV_RightChannelOffset);
|
||||
sample0 = MV_HarshClipTable[sample0 + 128];
|
||||
sample1 = MV_HarshClipTable[sample1 + 128];
|
||||
|
||||
*dest = sample0 & 255;
|
||||
*(dest + MV_RightChannelOffset) = sample1 & 255;
|
||||
|
||||
dest += MV_SampleSize;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
||||
|
||||
// 16-bit stereo source, 16-bit stereo output
|
||||
void MV_Mix16BitStereo16Stereo( uint32_t position, uint32_t rate,
|
||||
char *start, uint32_t length )
|
||||
{
|
||||
uint16_t *source = (uint16_t *) start;
|
||||
int16_t *dest = (int16_t *) MV_MixDestination;
|
||||
int32_t sample0l, sample0h, sample0;
|
||||
int32_t sample1l, sample1h, sample1;
|
||||
|
||||
while (length--) {
|
||||
sample0 = source[(position >> 16) << 1];
|
||||
sample1 = source[((position >> 16) << 1) + 1];
|
||||
#ifdef BIGENDIAN
|
||||
sample0l = sample0 >> 8;
|
||||
sample0h = (sample0 & 255) ^ 128;
|
||||
sample1l = sample1 >> 8;
|
||||
sample1h = (sample1 & 255) ^ 128;
|
||||
#else
|
||||
sample0l = sample0 & 255;
|
||||
sample0h = (sample0 >> 8) ^ 128;
|
||||
sample1l = sample1 & 255;
|
||||
sample1h = (sample1 >> 8) ^ 128;
|
||||
#endif
|
||||
position += rate;
|
||||
|
||||
sample0l = MV_LeftVolume[sample0l] >> 8;
|
||||
sample0h = MV_LeftVolume[sample0h];
|
||||
sample1l = MV_RightVolume[sample1l] >> 8;
|
||||
sample1h = MV_RightVolume[sample1h];
|
||||
sample0 = sample0l + sample0h + 128 + *dest;
|
||||
sample1 = sample1l + sample1h + 128 + *(dest + MV_RightChannelOffset/2);
|
||||
if (sample0 < -32768) sample0 = -32768;
|
||||
else if (sample0 > 32767) sample0 = 32767;
|
||||
if (sample1 < -32768) sample1 = -32768;
|
||||
else if (sample1 > 32767) sample1 = 32767;
|
||||
|
||||
*dest = (int16_t) sample0;
|
||||
*(dest + MV_RightChannelOffset/2) = (int16_t) sample1;
|
||||
|
||||
dest += MV_SampleSize / 2;
|
||||
}
|
||||
|
||||
MV_MixPosition = position;
|
||||
MV_MixDestination = (char *) dest;
|
||||
}
|
2910
polymer/eduke32/source/jaudiolib/src/multivoc.c
Normal file
2910
polymer/eduke32/source/jaudiolib/src/multivoc.c
Normal file
File diff suppressed because it is too large
Load diff
119
polymer/eduke32/source/jaudiolib/src/multivoc.h
Normal file
119
polymer/eduke32/source/jaudiolib/src/multivoc.h
Normal file
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
file: MULTIVOC.H
|
||||
|
||||
author: James R. Dose
|
||||
date: December 20, 1993
|
||||
|
||||
Public header for MULTIVOC.C
|
||||
|
||||
(c) Copyright 1993 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __MULTIVOC_H
|
||||
#define __MULTIVOC_H
|
||||
|
||||
#define MV_MinVoiceHandle 1
|
||||
|
||||
extern int32_t MV_ErrorCode;
|
||||
|
||||
enum MV_Errors
|
||||
{
|
||||
MV_Warning = -2,
|
||||
MV_Error = -1,
|
||||
MV_Ok = 0,
|
||||
MV_UnsupportedCard,
|
||||
MV_NotInstalled,
|
||||
MV_DriverError,
|
||||
MV_NoVoices,
|
||||
MV_NoMem,
|
||||
MV_VoiceNotFound,
|
||||
MV_InvalidVOCFile,
|
||||
MV_InvalidWAVFile,
|
||||
MV_InvalidVorbisFile,
|
||||
MV_InvalidMixMode,
|
||||
MV_NullRecordFunction
|
||||
};
|
||||
|
||||
const char *MV_ErrorString( int32_t ErrorNumber );
|
||||
int32_t MV_VoicePlaying( int32_t handle );
|
||||
int32_t MV_KillAllVoices( void );
|
||||
int32_t MV_Kill( int32_t handle );
|
||||
int32_t MV_VoicesPlaying( void );
|
||||
int32_t MV_VoiceAvailable( int32_t priority );
|
||||
int32_t MV_SetPitch( int32_t handle, int32_t pitchoffset );
|
||||
int32_t MV_SetFrequency( int32_t handle, int32_t frequency );
|
||||
int32_t MV_PauseVoice( int32_t handle, int32_t pause );
|
||||
int32_t MV_EndLooping( int32_t handle );
|
||||
int32_t MV_SetPan( int32_t handle, int32_t vol, int32_t left, int32_t right );
|
||||
int32_t MV_Pan3D( int32_t handle, int32_t angle, int32_t distance );
|
||||
void MV_SetReverb( int32_t reverb );
|
||||
void MV_SetFastReverb( int32_t reverb );
|
||||
int32_t MV_GetMaxReverbDelay( void );
|
||||
int32_t MV_GetReverbDelay( void );
|
||||
void MV_SetReverbDelay( int32_t delay );
|
||||
int32_t MV_SetMixMode( int32_t numchannels, int32_t samplebits );
|
||||
int32_t MV_StartPlayback( void );
|
||||
void MV_StopPlayback( void );
|
||||
int32_t MV_StartRecording( int32_t MixRate, void ( *function )( char *ptr, int32_t length ) );
|
||||
void MV_StopRecord( void );
|
||||
int32_t MV_StartDemandFeedPlayback( void ( *function )( char **ptr, uint32_t *length ),
|
||||
int32_t rate, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayRaw( char *ptr, uint32_t length,
|
||||
unsigned rate, int32_t pitchoffset, int32_t vol, int32_t left,
|
||||
int32_t right, int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayLoopedRaw( char *ptr, uint32_t length,
|
||||
char *loopstart, char *loopend, unsigned rate, int32_t pitchoffset,
|
||||
int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t MV_PlayWAV( char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, int32_t left,
|
||||
int32_t right, int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayWAV3D( char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, int32_t distance,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayLoopedWAV( char *ptr, uint32_t length, int32_t loopstart, int32_t loopend,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t MV_PlayVOC3D( char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, int32_t distance,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayVOC( char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayLoopedVOC( char *ptr, uint32_t length, int32_t loopstart, int32_t loopend,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
int32_t MV_PlayVorbis3D( char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, int32_t distance,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayVorbis( char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right,
|
||||
int32_t priority, uint32_t callbackval );
|
||||
int32_t MV_PlayLoopedVorbis( char *ptr, uint32_t length, int32_t loopstart, int32_t loopend,
|
||||
int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority,
|
||||
uint32_t callbackval );
|
||||
void MV_CreateVolumeTable( int32_t index, int32_t volume, int32_t MaxVolume );
|
||||
void MV_SetVolume( int32_t volume );
|
||||
int32_t MV_GetVolume( void );
|
||||
void MV_SetCallBack( void ( *function )( uint32_t ) );
|
||||
void MV_SetReverseStereo( int32_t setting );
|
||||
int32_t MV_GetReverseStereo( void );
|
||||
int32_t MV_Init( int32_t soundcard, int32_t MixRate, int32_t Voices, int32_t numchannels,
|
||||
int32_t samplebits, void * initdata );
|
||||
int32_t MV_Shutdown( void );
|
||||
|
||||
#endif
|
187
polymer/eduke32/source/jaudiolib/src/pitch.c
Normal file
187
polymer/eduke32/source/jaudiolib/src/pitch.c
Normal file
|
@ -0,0 +1,187 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
module: PITCH.C
|
||||
|
||||
author: James R. Dose
|
||||
date: June 14, 1993
|
||||
|
||||
Routines for pitch scaling.
|
||||
|
||||
(c) Copyright 1993 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#include <stdlib.h>
|
||||
//#include <math.h>
|
||||
#include "pitch.h"
|
||||
|
||||
#define MAXDETUNE 25
|
||||
|
||||
static uint32_t PitchTable[ 12 ][ MAXDETUNE ] =
|
||||
{
|
||||
{ 0x10000, 0x10097, 0x1012f, 0x101c7, 0x10260, 0x102f9, 0x10392, 0x1042c,
|
||||
0x104c6, 0x10561, 0x105fb, 0x10696, 0x10732, 0x107ce, 0x1086a, 0x10907,
|
||||
0x109a4, 0x10a41, 0x10adf, 0x10b7d, 0x10c1b, 0x10cba, 0x10d59, 0x10df8,
|
||||
0x10e98 },
|
||||
{ 0x10f38, 0x10fd9, 0x1107a, 0x1111b, 0x111bd, 0x1125f, 0x11302, 0x113a5,
|
||||
0x11448, 0x114eb, 0x1158f, 0x11634, 0x116d8, 0x1177e, 0x11823, 0x118c9,
|
||||
0x1196f, 0x11a16, 0x11abd, 0x11b64, 0x11c0c, 0x11cb4, 0x11d5d, 0x11e06,
|
||||
0x11eaf },
|
||||
{ 0x11f59, 0x12003, 0x120ae, 0x12159, 0x12204, 0x122b0, 0x1235c, 0x12409,
|
||||
0x124b6, 0x12563, 0x12611, 0x126bf, 0x1276d, 0x1281c, 0x128cc, 0x1297b,
|
||||
0x12a2b, 0x12adc, 0x12b8d, 0x12c3e, 0x12cf0, 0x12da2, 0x12e55, 0x12f08,
|
||||
0x12fbc },
|
||||
{ 0x1306f, 0x13124, 0x131d8, 0x1328d, 0x13343, 0x133f9, 0x134af, 0x13566,
|
||||
0x1361d, 0x136d5, 0x1378d, 0x13846, 0x138fe, 0x139b8, 0x13a72, 0x13b2c,
|
||||
0x13be6, 0x13ca1, 0x13d5d, 0x13e19, 0x13ed5, 0x13f92, 0x1404f, 0x1410d,
|
||||
0x141cb },
|
||||
{ 0x1428a, 0x14349, 0x14408, 0x144c8, 0x14588, 0x14649, 0x1470a, 0x147cc,
|
||||
0x1488e, 0x14951, 0x14a14, 0x14ad7, 0x14b9b, 0x14c5f, 0x14d24, 0x14dea,
|
||||
0x14eaf, 0x14f75, 0x1503c, 0x15103, 0x151cb, 0x15293, 0x1535b, 0x15424,
|
||||
0x154ee },
|
||||
{ 0x155b8, 0x15682, 0x1574d, 0x15818, 0x158e4, 0x159b0, 0x15a7d, 0x15b4a,
|
||||
0x15c18, 0x15ce6, 0x15db4, 0x15e83, 0x15f53, 0x16023, 0x160f4, 0x161c5,
|
||||
0x16296, 0x16368, 0x1643a, 0x1650d, 0x165e1, 0x166b5, 0x16789, 0x1685e,
|
||||
0x16934 },
|
||||
{ 0x16a09, 0x16ae0, 0x16bb7, 0x16c8e, 0x16d66, 0x16e3e, 0x16f17, 0x16ff1,
|
||||
0x170ca, 0x171a5, 0x17280, 0x1735b, 0x17437, 0x17513, 0x175f0, 0x176ce,
|
||||
0x177ac, 0x1788a, 0x17969, 0x17a49, 0x17b29, 0x17c09, 0x17cea, 0x17dcc,
|
||||
0x17eae },
|
||||
{ 0x17f91, 0x18074, 0x18157, 0x1823c, 0x18320, 0x18406, 0x184eb, 0x185d2,
|
||||
0x186b8, 0x187a0, 0x18888, 0x18970, 0x18a59, 0x18b43, 0x18c2d, 0x18d17,
|
||||
0x18e02, 0x18eee, 0x18fda, 0x190c7, 0x191b5, 0x192a2, 0x19391, 0x19480,
|
||||
0x1956f },
|
||||
{ 0x1965f, 0x19750, 0x19841, 0x19933, 0x19a25, 0x19b18, 0x19c0c, 0x19d00,
|
||||
0x19df4, 0x19ee9, 0x19fdf, 0x1a0d5, 0x1a1cc, 0x1a2c4, 0x1a3bc, 0x1a4b4,
|
||||
0x1a5ad, 0x1a6a7, 0x1a7a1, 0x1a89c, 0x1a998, 0x1aa94, 0x1ab90, 0x1ac8d,
|
||||
0x1ad8b },
|
||||
{ 0x1ae89, 0x1af88, 0x1b088, 0x1b188, 0x1b289, 0x1b38a, 0x1b48c, 0x1b58f,
|
||||
0x1b692, 0x1b795, 0x1b89a, 0x1b99f, 0x1baa4, 0x1bbaa, 0x1bcb1, 0x1bdb8,
|
||||
0x1bec0, 0x1bfc9, 0x1c0d2, 0x1c1dc, 0x1c2e6, 0x1c3f1, 0x1c4fd, 0x1c609,
|
||||
0x1c716 },
|
||||
{ 0x1c823, 0x1c931, 0x1ca40, 0x1cb50, 0x1cc60, 0x1cd70, 0x1ce81, 0x1cf93,
|
||||
0x1d0a6, 0x1d1b9, 0x1d2cd, 0x1d3e1, 0x1d4f6, 0x1d60c, 0x1d722, 0x1d839,
|
||||
0x1d951, 0x1da69, 0x1db82, 0x1dc9c, 0x1ddb6, 0x1ded1, 0x1dfec, 0x1e109,
|
||||
0x1e225 },
|
||||
{ 0x1e343, 0x1e461, 0x1e580, 0x1e6a0, 0x1e7c0, 0x1e8e0, 0x1ea02, 0x1eb24,
|
||||
0x1ec47, 0x1ed6b, 0x1ee8f, 0x1efb4, 0x1f0d9, 0x1f1ff, 0x1f326, 0x1f44e,
|
||||
0x1f576, 0x1f69f, 0x1f7c9, 0x1f8f3, 0x1fa1e, 0x1fb4a, 0x1fc76, 0x1fda3,
|
||||
0x1fed1 }
|
||||
};
|
||||
|
||||
|
||||
//static int32_t PITCH_Installed = FALSE;
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Function: PITCH_Init
|
||||
|
||||
Initializes pitch table.
|
||||
---------------------------------------------------------------------*/
|
||||
/*
|
||||
void PITCH_Init
|
||||
(
|
||||
void
|
||||
)
|
||||
|
||||
{
|
||||
int32_t note;
|
||||
int32_t detune;
|
||||
|
||||
if ( !PITCH_Installed )
|
||||
{
|
||||
for( note = 0; note < 12; note++ )
|
||||
{
|
||||
for( detune = 0; detune < MAXDETUNE; detune++ )
|
||||
{
|
||||
PitchTable[ note ][ detune ] = 0x10000 *
|
||||
pow( 2, ( note * MAXDETUNE + detune ) / ( 12.0 * MAXDETUNE ) );
|
||||
}
|
||||
}
|
||||
|
||||
PITCH_Installed = TRUE;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Function: PITCH_GetScale
|
||||
|
||||
Returns a fixed-point value to scale number the specified amount.
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
uint32_t PITCH_GetScale
|
||||
(
|
||||
int32_t pitchoffset
|
||||
)
|
||||
|
||||
{
|
||||
uint32_t scale;
|
||||
int32_t octaveshift;
|
||||
int32_t noteshift;
|
||||
int32_t note;
|
||||
int32_t detune;
|
||||
|
||||
// if ( !PITCH_Installed )
|
||||
// {
|
||||
// PITCH_Init();
|
||||
// }
|
||||
|
||||
if ( pitchoffset == 0 )
|
||||
{
|
||||
return( PitchTable[ 0 ][ 0 ] );
|
||||
}
|
||||
|
||||
noteshift = pitchoffset % 1200;
|
||||
if ( noteshift < 0 )
|
||||
{
|
||||
noteshift += 1200;
|
||||
}
|
||||
|
||||
note = noteshift / 100;
|
||||
detune = ( noteshift % 100 ) / ( 100 / MAXDETUNE );
|
||||
octaveshift = ( pitchoffset - noteshift ) / 1200;
|
||||
|
||||
if ( detune < 0 )
|
||||
{
|
||||
detune += ( 100 / MAXDETUNE );
|
||||
note--;
|
||||
if ( note < 0 )
|
||||
{
|
||||
note += 12;
|
||||
octaveshift--;
|
||||
}
|
||||
}
|
||||
|
||||
scale = PitchTable[ note ][ detune ];
|
||||
|
||||
if ( octaveshift < 0 )
|
||||
{
|
||||
scale >>= -octaveshift;
|
||||
}
|
||||
else
|
||||
{
|
||||
scale <<= octaveshift;
|
||||
}
|
||||
|
||||
return( scale );
|
||||
}
|
||||
|
47
polymer/eduke32/source/jaudiolib/src/pitch.h
Normal file
47
polymer/eduke32/source/jaudiolib/src/pitch.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/**********************************************************************
|
||||
module: PITCH.H
|
||||
|
||||
author: James R. Dose
|
||||
date: June 14, 1994
|
||||
|
||||
Public header for PITCH.C
|
||||
|
||||
(c) Copyright 1994 James R. Dose. All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __PITCH_H
|
||||
#define __PITCH_H
|
||||
|
||||
#include "inttypes.h"
|
||||
|
||||
enum PITCH_ERRORS
|
||||
{
|
||||
PITCH_Warning = -2,
|
||||
PITCH_Error = -1,
|
||||
PITCH_Ok = 0,
|
||||
};
|
||||
|
||||
//void PITCH_Init( void );
|
||||
uint32_t PITCH_GetScale( int32_t pitchoffset );
|
||||
void PITCH_UnlockMemory( void );
|
||||
int32_t PITCH_LockMemory( void );
|
||||
#endif
|
424
polymer/eduke32/source/jaudiolib/src/vorbis.c
Normal file
424
polymer/eduke32/source/jaudiolib/src/vorbis.c
Normal file
|
@ -0,0 +1,424 @@
|
|||
/*
|
||||
Copyright (C) 2009 Jonathon Fowler <jf@jonof.id.au>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* OggVorbis source support for MultiVoc
|
||||
*/
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include <vorbis/vorbisfile.h>
|
||||
#else
|
||||
# include "vorbis/vorbisfile.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include "pitch.h"
|
||||
#include "multivoc.h"
|
||||
#include "_multivc.h"
|
||||
|
||||
#define min(x,y) ((x) < (y) ? (x) : (y))
|
||||
#define max(x,y) ((x) > (y) ? (x) : (y))
|
||||
|
||||
|
||||
typedef struct {
|
||||
void * ptr;
|
||||
size_t length;
|
||||
size_t pos;
|
||||
|
||||
OggVorbis_File vf;
|
||||
|
||||
char block[0x8000];
|
||||
int32_t blockused;
|
||||
int32_t lastbitstream;
|
||||
} vorbis_data;
|
||||
|
||||
static size_t read_vorbis(void * ptr, size_t size, size_t nmemb, void * datasource)
|
||||
{
|
||||
vorbis_data * vorb = (vorbis_data *) datasource;
|
||||
size_t nread = 0;
|
||||
size_t bytes;
|
||||
|
||||
errno = 0;
|
||||
|
||||
if (vorb->length == vorb->pos) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (; nmemb > 0; nmemb--, nread++) {
|
||||
bytes = vorb->length - vorb->pos;
|
||||
if (size < bytes) {
|
||||
bytes = size;
|
||||
}
|
||||
|
||||
memcpy(ptr, vorb->ptr + vorb->pos, bytes);
|
||||
vorb->pos += bytes;
|
||||
ptr += bytes;
|
||||
|
||||
if (vorb->length == vorb->pos) {
|
||||
nread++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return nread;
|
||||
}
|
||||
|
||||
static int32_t seek_vorbis(void * datasource, ogg_int64_t offset, int32_t whence)
|
||||
{
|
||||
vorbis_data * vorb = (vorbis_data *) datasource;
|
||||
|
||||
switch (whence) {
|
||||
case SEEK_SET: vorb->pos = 0; break;
|
||||
case SEEK_CUR: break;
|
||||
case SEEK_END: vorb->pos = vorb->length; break;
|
||||
}
|
||||
|
||||
vorb->pos += offset;
|
||||
if (vorb->pos < 0) {
|
||||
vorb->pos = 0;
|
||||
} else if (vorb->pos > vorb->length) {
|
||||
vorb->pos = vorb->length;
|
||||
}
|
||||
|
||||
return vorb->pos;
|
||||
}
|
||||
|
||||
static int32_t close_vorbis(void * datasource)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t tell_vorbis(void * datasource)
|
||||
{
|
||||
vorbis_data * vorb = (vorbis_data *) datasource;
|
||||
|
||||
return vorb->pos;
|
||||
}
|
||||
|
||||
static ov_callbacks vorbis_callbacks = {
|
||||
read_vorbis,
|
||||
seek_vorbis,
|
||||
close_vorbis,
|
||||
tell_vorbis
|
||||
};
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Function: MV_GetNextVorbisBlock
|
||||
|
||||
Controls playback of OggVorbis data
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
playbackstatus MV_GetNextVorbisBlock
|
||||
(
|
||||
VoiceNode *voice
|
||||
)
|
||||
|
||||
{
|
||||
vorbis_data * vd = (vorbis_data *) voice->extra;
|
||||
int32_t bytes, bytesread;
|
||||
int32_t bitstream, err;
|
||||
|
||||
voice->Playing = TRUE;
|
||||
|
||||
if ( voice->BlockLength > 0 )
|
||||
{
|
||||
voice->position -= voice->length;
|
||||
voice->sound += voice->length >> 16;
|
||||
voice->length = min( voice->BlockLength, 0x8000 );
|
||||
voice->BlockLength -= voice->length;
|
||||
voice->length <<= 16;
|
||||
|
||||
return( KeepPlaying );
|
||||
}
|
||||
|
||||
bytesread = 0;
|
||||
do {
|
||||
bytes = ov_read(&vd->vf, vd->block + bytesread, sizeof(vd->block) - bytesread, 0, 2, 1, &bitstream);
|
||||
//fprintf(stderr, "ov_read = %d\n", bytes);
|
||||
if (bytes == OV_HOLE) continue;
|
||||
if (bytes == 0) {
|
||||
if (voice->LoopStart) {
|
||||
err = ov_pcm_seek_page(&vd->vf, 0);
|
||||
if (err != 0) {
|
||||
fprintf(stderr, "MV_GetNextVorbisBlock ov_pcm_seek_page_lap: err %d\n", err);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else if (bytes < 0) {
|
||||
fprintf(stderr, "MV_GetNextVorbisBlock ov_read: err %d\n", bytes);
|
||||
voice->Playing = FALSE;
|
||||
return NoMoreData;
|
||||
}
|
||||
|
||||
bytesread += bytes;
|
||||
} while (bytesread < sizeof(vd->block));
|
||||
|
||||
if (bytesread == 0) {
|
||||
voice->Playing = FALSE;
|
||||
return NoMoreData;
|
||||
}
|
||||
|
||||
if (bitstream != vd->lastbitstream) {
|
||||
vorbis_info * vi = 0;
|
||||
|
||||
vi = ov_info(&vd->vf, -1);
|
||||
if (!vi) {
|
||||
voice->Playing = FALSE;
|
||||
return NoMoreData;
|
||||
}
|
||||
|
||||
if (vi->channels != 1 && vi->channels != 2) {
|
||||
voice->Playing = FALSE;
|
||||
return NoMoreData;
|
||||
}
|
||||
|
||||
voice->channels = vi->channels;
|
||||
voice->SamplingRate = vi->rate;
|
||||
voice->RateScale = ( voice->SamplingRate * voice->PitchScale ) / MV_MixRate;
|
||||
MV_SetVoiceMixMode( voice );
|
||||
}
|
||||
vd->lastbitstream = bitstream;
|
||||
|
||||
vd->blockused = bytesread;
|
||||
bytesread /= 2 * voice->channels;
|
||||
|
||||
voice->position = 0;
|
||||
voice->sound = vd->block;
|
||||
voice->BlockLength = bytesread;
|
||||
voice->length = min( voice->BlockLength, 0x8000 );
|
||||
voice->BlockLength -= voice->length;
|
||||
voice->length <<= 16;
|
||||
|
||||
return( KeepPlaying );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Function: MV_PlayVorbis3D
|
||||
|
||||
Begin playback of sound data at specified angle and distance
|
||||
from listener.
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
int32_t MV_PlayVorbis3D
|
||||
(
|
||||
char *ptr,
|
||||
uint32_t ptrlength,
|
||||
int32_t pitchoffset,
|
||||
int32_t angle,
|
||||
int32_t distance,
|
||||
int32_t priority,
|
||||
uint32_t callbackval
|
||||
)
|
||||
|
||||
{
|
||||
int32_t left;
|
||||
int32_t right;
|
||||
int32_t mid;
|
||||
int32_t volume;
|
||||
int32_t status;
|
||||
|
||||
if ( !MV_Installed )
|
||||
{
|
||||
MV_SetErrorCode( MV_NotInstalled );
|
||||
return( MV_Error );
|
||||
}
|
||||
|
||||
if ( distance < 0 )
|
||||
{
|
||||
distance = -distance;
|
||||
angle += MV_NumPanPositions / 2;
|
||||
}
|
||||
|
||||
volume = MIX_VOLUME( distance );
|
||||
|
||||
// Ensure angle is within 0 - 31
|
||||
angle &= MV_MaxPanPosition;
|
||||
|
||||
left = MV_PanTable[ angle ][ volume ].left;
|
||||
right = MV_PanTable[ angle ][ volume ].right;
|
||||
mid = max( 0, 255 - distance );
|
||||
|
||||
status = MV_PlayVorbis( ptr, ptrlength, pitchoffset, mid, left, right, priority,
|
||||
callbackval );
|
||||
|
||||
return( status );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Function: MV_PlayVorbis
|
||||
|
||||
Begin playback of sound data with the given sound levels and
|
||||
priority.
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
int32_t MV_PlayVorbis
|
||||
(
|
||||
char *ptr,
|
||||
uint32_t ptrlength,
|
||||
int32_t pitchoffset,
|
||||
int32_t vol,
|
||||
int32_t left,
|
||||
int32_t right,
|
||||
int32_t priority,
|
||||
uint32_t callbackval
|
||||
)
|
||||
|
||||
{
|
||||
int32_t status;
|
||||
|
||||
status = MV_PlayLoopedVorbis( ptr, ptrlength, -1, -1, pitchoffset, vol, left, right,
|
||||
priority, callbackval );
|
||||
|
||||
return( status );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
Function: MV_PlayLoopedVorbis
|
||||
|
||||
Begin playback of sound data with the given sound levels and
|
||||
priority.
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
int32_t MV_PlayLoopedVorbis
|
||||
(
|
||||
char *ptr,
|
||||
uint32_t ptrlength,
|
||||
int32_t loopstart,
|
||||
int32_t loopend,
|
||||
int32_t pitchoffset,
|
||||
int32_t vol,
|
||||
int32_t left,
|
||||
int32_t right,
|
||||
int32_t priority,
|
||||
uint32_t callbackval
|
||||
)
|
||||
|
||||
{
|
||||
VoiceNode *voice;
|
||||
int32_t status;
|
||||
vorbis_data * vd = 0;
|
||||
vorbis_info * vi = 0;
|
||||
|
||||
if ( !MV_Installed )
|
||||
{
|
||||
MV_SetErrorCode( MV_NotInstalled );
|
||||
return( MV_Error );
|
||||
}
|
||||
|
||||
vd = (vorbis_data *) malloc( sizeof(vorbis_data) );
|
||||
if (!vd) {
|
||||
MV_SetErrorCode( MV_InvalidVorbisFile );
|
||||
return MV_Error;
|
||||
}
|
||||
|
||||
memset(vd, 0, sizeof(vorbis_data));
|
||||
vd->ptr = ptr;
|
||||
vd->pos = 0;
|
||||
vd->length = ptrlength;
|
||||
vd->blockused = 0;
|
||||
vd->lastbitstream = -1;
|
||||
|
||||
status = ov_open_callbacks((void *) vd, &vd->vf, 0, 0, vorbis_callbacks);
|
||||
if (status < 0) {
|
||||
fprintf(stderr, "MV_PlayLoopedVorbis: err %d\n", status);
|
||||
MV_SetErrorCode( MV_InvalidVorbisFile );
|
||||
return MV_Error;
|
||||
}
|
||||
|
||||
vi = ov_info(&vd->vf, 0);
|
||||
if (!vi) {
|
||||
ov_clear(&vd->vf);
|
||||
free(vd);
|
||||
MV_SetErrorCode( MV_InvalidVorbisFile );
|
||||
return MV_Error;
|
||||
}
|
||||
|
||||
if (vi->channels != 1 && vi->channels != 2) {
|
||||
ov_clear(&vd->vf);
|
||||
free(vd);
|
||||
MV_SetErrorCode( MV_InvalidVorbisFile );
|
||||
return MV_Error;
|
||||
}
|
||||
|
||||
// Request a voice from the voice pool
|
||||
voice = MV_AllocVoice( priority );
|
||||
if ( voice == NULL )
|
||||
{
|
||||
ov_clear(&vd->vf);
|
||||
free(vd);
|
||||
MV_SetErrorCode( MV_NoVoices );
|
||||
return( MV_Error );
|
||||
}
|
||||
|
||||
voice->wavetype = Vorbis;
|
||||
voice->bits = 16;
|
||||
voice->channels = vi->channels;
|
||||
voice->extra = (void *) vd;
|
||||
voice->GetSound = MV_GetNextVorbisBlock;
|
||||
voice->NextBlock = vd->block;
|
||||
voice->DemandFeed = NULL;
|
||||
voice->LoopCount = 0;
|
||||
voice->BlockLength = 0;
|
||||
voice->PitchScale = PITCH_GetScale( pitchoffset );
|
||||
voice->length = 0;
|
||||
voice->next = NULL;
|
||||
voice->prev = NULL;
|
||||
voice->priority = priority;
|
||||
voice->callbackval = callbackval;
|
||||
voice->LoopStart = (char *) (loopstart >= 0 ? TRUE : FALSE);
|
||||
voice->LoopEnd = 0;
|
||||
voice->LoopSize = 0;
|
||||
|
||||
voice->SamplingRate = vi->rate;
|
||||
voice->RateScale = ( voice->SamplingRate * voice->PitchScale ) / MV_MixRate;
|
||||
MV_SetVoiceMixMode( voice );
|
||||
|
||||
MV_SetVoiceVolume( voice, vol, left, right );
|
||||
MV_PlayVoice( voice );
|
||||
|
||||
return( voice->handle );
|
||||
}
|
||||
|
||||
|
||||
void MV_ReleaseVorbisVoice( VoiceNode * voice )
|
||||
{
|
||||
vorbis_data * vd = (vorbis_data *) voice->extra;
|
||||
|
||||
if (voice->wavetype != Vorbis) {
|
||||
return;
|
||||
}
|
||||
|
||||
ov_clear(&vd->vf);
|
||||
free(vd);
|
||||
|
||||
voice->extra = 0;
|
||||
}
|
||||
|
13
polymer/eduke32/source/jaudiolib/third-party/README.txt
vendored
Normal file
13
polymer/eduke32/source/jaudiolib/third-party/README.txt
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
OS X frameworks compiled from the sources contained in the Max audio ripper
|
||||
application by Stephen Booth.
|
||||
|
||||
http://svn.sbooth.org/max/trunk/Frameworks/ogg/
|
||||
http://svn.sbooth.org/max/trunk/Frameworks/vorbis/
|
||||
http://sbooth.org/Max/
|
||||
|
||||
|
||||
MinGW binaries compiled from vanilla Xiph.org libogg-1.1.4 and libvorbis-1.2.3
|
||||
on MinGW GCC 3.4.5.
|
||||
|
||||
http://xiph.org/downloads/
|
||||
|
11
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/config_types.h
vendored
Normal file
11
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/config_types.h
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
#ifndef __CONFIG_TYPES_H__
|
||||
#define __CONFIG_TYPES_H__
|
||||
|
||||
/* these are filled in by configure */
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
|
||||
#endif
|
208
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/ogg.h
vendored
Normal file
208
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/ogg.h
vendored
Normal file
|
@ -0,0 +1,208 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: toplevel libogg include
|
||||
last mod: $Id: ogg.h 16051 2009-05-27 05:00:06Z xiphmont $
|
||||
|
||||
********************************************************************/
|
||||
#ifndef _OGG_H
|
||||
#define _OGG_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#include <ogg/os_types.h>
|
||||
|
||||
typedef struct {
|
||||
void *iov_base;
|
||||
size_t iov_len;
|
||||
} ogg_iovec_t;
|
||||
|
||||
typedef struct {
|
||||
long endbyte;
|
||||
int endbit;
|
||||
|
||||
unsigned char *buffer;
|
||||
unsigned char *ptr;
|
||||
long storage;
|
||||
} oggpack_buffer;
|
||||
|
||||
/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *header;
|
||||
long header_len;
|
||||
unsigned char *body;
|
||||
long body_len;
|
||||
} ogg_page;
|
||||
|
||||
/* ogg_stream_state contains the current encode/decode state of a logical
|
||||
Ogg bitstream **********************************************************/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *body_data; /* bytes from packet bodies */
|
||||
long body_storage; /* storage elements allocated */
|
||||
long body_fill; /* elements stored; fill mark */
|
||||
long body_returned; /* elements of fill returned */
|
||||
|
||||
|
||||
int *lacing_vals; /* The values that will go to the segment table */
|
||||
ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
|
||||
this way, but it is simple coupled to the
|
||||
lacing fifo */
|
||||
long lacing_storage;
|
||||
long lacing_fill;
|
||||
long lacing_packet;
|
||||
long lacing_returned;
|
||||
|
||||
unsigned char header[282]; /* working space for header encode */
|
||||
int header_fill;
|
||||
|
||||
int e_o_s; /* set when we have buffered the last packet in the
|
||||
logical bitstream */
|
||||
int b_o_s; /* set after we've written the initial page
|
||||
of a logical bitstream */
|
||||
long serialno;
|
||||
long pageno;
|
||||
ogg_int64_t packetno; /* sequence number for decode; the framing
|
||||
knows where there's a hole in the data,
|
||||
but we need coupling so that the codec
|
||||
(which is in a seperate abstraction
|
||||
layer) also knows about the gap */
|
||||
ogg_int64_t granulepos;
|
||||
|
||||
} ogg_stream_state;
|
||||
|
||||
/* ogg_packet is used to encapsulate the data and metadata belonging
|
||||
to a single raw Ogg/Vorbis packet *************************************/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *packet;
|
||||
long bytes;
|
||||
long b_o_s;
|
||||
long e_o_s;
|
||||
|
||||
ogg_int64_t granulepos;
|
||||
|
||||
ogg_int64_t packetno; /* sequence number for decode; the framing
|
||||
knows where there's a hole in the data,
|
||||
but we need coupling so that the codec
|
||||
(which is in a seperate abstraction
|
||||
layer) also knows about the gap */
|
||||
} ogg_packet;
|
||||
|
||||
typedef struct {
|
||||
unsigned char *data;
|
||||
int storage;
|
||||
int fill;
|
||||
int returned;
|
||||
|
||||
int unsynced;
|
||||
int headerbytes;
|
||||
int bodybytes;
|
||||
} ogg_sync_state;
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
|
||||
|
||||
extern void oggpack_writeinit(oggpack_buffer *b);
|
||||
extern int oggpack_writecheck(oggpack_buffer *b);
|
||||
extern void oggpack_writetrunc(oggpack_buffer *b,long bits);
|
||||
extern void oggpack_writealign(oggpack_buffer *b);
|
||||
extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits);
|
||||
extern void oggpack_reset(oggpack_buffer *b);
|
||||
extern void oggpack_writeclear(oggpack_buffer *b);
|
||||
extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
|
||||
extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
|
||||
extern long oggpack_look(oggpack_buffer *b,int bits);
|
||||
extern long oggpack_look1(oggpack_buffer *b);
|
||||
extern void oggpack_adv(oggpack_buffer *b,int bits);
|
||||
extern void oggpack_adv1(oggpack_buffer *b);
|
||||
extern long oggpack_read(oggpack_buffer *b,int bits);
|
||||
extern long oggpack_read1(oggpack_buffer *b);
|
||||
extern long oggpack_bytes(oggpack_buffer *b);
|
||||
extern long oggpack_bits(oggpack_buffer *b);
|
||||
extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
|
||||
|
||||
extern void oggpackB_writeinit(oggpack_buffer *b);
|
||||
extern int oggpackB_writecheck(oggpack_buffer *b);
|
||||
extern void oggpackB_writetrunc(oggpack_buffer *b,long bits);
|
||||
extern void oggpackB_writealign(oggpack_buffer *b);
|
||||
extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits);
|
||||
extern void oggpackB_reset(oggpack_buffer *b);
|
||||
extern void oggpackB_writeclear(oggpack_buffer *b);
|
||||
extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
|
||||
extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits);
|
||||
extern long oggpackB_look(oggpack_buffer *b,int bits);
|
||||
extern long oggpackB_look1(oggpack_buffer *b);
|
||||
extern void oggpackB_adv(oggpack_buffer *b,int bits);
|
||||
extern void oggpackB_adv1(oggpack_buffer *b);
|
||||
extern long oggpackB_read(oggpack_buffer *b,int bits);
|
||||
extern long oggpackB_read1(oggpack_buffer *b);
|
||||
extern long oggpackB_bytes(oggpack_buffer *b);
|
||||
extern long oggpackB_bits(oggpack_buffer *b);
|
||||
extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: encoding **************************/
|
||||
|
||||
extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
|
||||
extern int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov,
|
||||
int count, long e_o_s, ogg_int64_t granulepos);
|
||||
extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
|
||||
extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
|
||||
|
||||
extern int ogg_sync_init(ogg_sync_state *oy);
|
||||
extern int ogg_sync_clear(ogg_sync_state *oy);
|
||||
extern int ogg_sync_reset(ogg_sync_state *oy);
|
||||
extern int ogg_sync_destroy(ogg_sync_state *oy);
|
||||
extern int ogg_sync_check(ogg_sync_state *oy);
|
||||
|
||||
extern char *ogg_sync_buffer(ogg_sync_state *oy, long size);
|
||||
extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
|
||||
extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
|
||||
extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
|
||||
extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
|
||||
extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
|
||||
extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: general ***************************/
|
||||
|
||||
extern int ogg_stream_init(ogg_stream_state *os,int serialno);
|
||||
extern int ogg_stream_clear(ogg_stream_state *os);
|
||||
extern int ogg_stream_reset(ogg_stream_state *os);
|
||||
extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
|
||||
extern int ogg_stream_destroy(ogg_stream_state *os);
|
||||
extern int ogg_stream_check(ogg_stream_state *os);
|
||||
extern int ogg_stream_eos(ogg_stream_state *os);
|
||||
|
||||
extern void ogg_page_checksum_set(ogg_page *og);
|
||||
|
||||
extern int ogg_page_version(const ogg_page *og);
|
||||
extern int ogg_page_continued(const ogg_page *og);
|
||||
extern int ogg_page_bos(const ogg_page *og);
|
||||
extern int ogg_page_eos(const ogg_page *og);
|
||||
extern ogg_int64_t ogg_page_granulepos(const ogg_page *og);
|
||||
extern int ogg_page_serialno(const ogg_page *og);
|
||||
extern long ogg_page_pageno(const ogg_page *og);
|
||||
extern int ogg_page_packets(const ogg_page *og);
|
||||
|
||||
extern void ogg_packet_clear(ogg_packet *op);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _OGG_H */
|
139
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/os_types.h
vendored
Normal file
139
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/os_types.h
vendored
Normal file
|
@ -0,0 +1,139 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: #ifdef jail to whip a few platforms into the UNIX ideal.
|
||||
last mod: $Id: os_types.h 14997 2008-06-04 03:27:18Z ivo $
|
||||
|
||||
********************************************************************/
|
||||
#ifndef _OS_TYPES_H
|
||||
#define _OS_TYPES_H
|
||||
|
||||
/* make it easy on the folks that want to compile the libs with a
|
||||
different malloc than stdlib */
|
||||
#define _ogg_malloc malloc
|
||||
#define _ogg_calloc calloc
|
||||
#define _ogg_realloc realloc
|
||||
#define _ogg_free free
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
||||
# if defined(__CYGWIN__)
|
||||
# include <stdint.h>
|
||||
typedef int16_t ogg_int16_t;
|
||||
typedef uint16_t ogg_uint16_t;
|
||||
typedef int32_t ogg_int32_t;
|
||||
typedef uint32_t ogg_uint32_t;
|
||||
typedef int64_t ogg_int64_t;
|
||||
typedef uint64_t ogg_uint64_t;
|
||||
# elif defined(__MINGW32__)
|
||||
# include <sys/types.h>
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
typedef unsigned long long ogg_uint64_t;
|
||||
# elif defined(__MWERKS__)
|
||||
typedef long long ogg_int64_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
# else
|
||||
/* MSVC/Borland */
|
||||
typedef __int64 ogg_int64_t;
|
||||
typedef __int32 ogg_int32_t;
|
||||
typedef unsigned __int32 ogg_uint32_t;
|
||||
typedef __int16 ogg_int16_t;
|
||||
typedef unsigned __int16 ogg_uint16_t;
|
||||
# endif
|
||||
|
||||
#elif defined(__MACOS__)
|
||||
|
||||
# include <sys/types.h>
|
||||
typedef SInt16 ogg_int16_t;
|
||||
typedef UInt16 ogg_uint16_t;
|
||||
typedef SInt32 ogg_int32_t;
|
||||
typedef UInt32 ogg_uint32_t;
|
||||
typedef SInt64 ogg_int64_t;
|
||||
|
||||
#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */
|
||||
|
||||
# include <sys/types.h>
|
||||
typedef int16_t ogg_int16_t;
|
||||
typedef u_int16_t ogg_uint16_t;
|
||||
typedef int32_t ogg_int32_t;
|
||||
typedef u_int32_t ogg_uint32_t;
|
||||
typedef int64_t ogg_int64_t;
|
||||
|
||||
#elif defined(__HAIKU__)
|
||||
|
||||
/* Haiku */
|
||||
# include <sys/types.h>
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
|
||||
#elif defined(__BEOS__)
|
||||
|
||||
/* Be */
|
||||
# include <inttypes.h>
|
||||
typedef int16_t ogg_int16_t;
|
||||
typedef u_int16_t ogg_uint16_t;
|
||||
typedef int32_t ogg_int32_t;
|
||||
typedef u_int32_t ogg_uint32_t;
|
||||
typedef int64_t ogg_int64_t;
|
||||
|
||||
#elif defined (__EMX__)
|
||||
|
||||
/* OS/2 GCC */
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
|
||||
#elif defined (DJGPP)
|
||||
|
||||
/* DJGPP */
|
||||
typedef short ogg_int16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
|
||||
#elif defined(R5900)
|
||||
|
||||
/* PS2 EE */
|
||||
typedef long ogg_int64_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned ogg_uint32_t;
|
||||
typedef short ogg_int16_t;
|
||||
|
||||
#elif defined(__SYMBIAN32__)
|
||||
|
||||
/* Symbian GCC */
|
||||
typedef signed short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef signed int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long int ogg_int64_t;
|
||||
|
||||
#else
|
||||
|
||||
# include <sys/types.h>
|
||||
# include <ogg/config_types.h>
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _OS_TYPES_H */
|
243
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/codec.h
vendored
Normal file
243
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/codec.h
vendored
Normal file
|
@ -0,0 +1,243 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
|
||||
********************************************************************
|
||||
|
||||
function: libvorbis codec headers
|
||||
last mod: $Id: codec.h 16037 2009-05-26 21:10:58Z xiphmont $
|
||||
|
||||
********************************************************************/
|
||||
|
||||
#ifndef _vorbis_codec_h_
|
||||
#define _vorbis_codec_h_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <ogg/ogg.h>
|
||||
|
||||
typedef struct vorbis_info{
|
||||
int version;
|
||||
int channels;
|
||||
long rate;
|
||||
|
||||
/* The below bitrate declarations are *hints*.
|
||||
Combinations of the three values carry the following implications:
|
||||
|
||||
all three set to the same value:
|
||||
implies a fixed rate bitstream
|
||||
only nominal set:
|
||||
implies a VBR stream that averages the nominal bitrate. No hard
|
||||
upper/lower limit
|
||||
upper and or lower set:
|
||||
implies a VBR bitstream that obeys the bitrate limits. nominal
|
||||
may also be set to give a nominal rate.
|
||||
none set:
|
||||
the coder does not care to speculate.
|
||||
*/
|
||||
|
||||
long bitrate_upper;
|
||||
long bitrate_nominal;
|
||||
long bitrate_lower;
|
||||
long bitrate_window;
|
||||
|
||||
void *codec_setup;
|
||||
} vorbis_info;
|
||||
|
||||
/* vorbis_dsp_state buffers the current vorbis audio
|
||||
analysis/synthesis state. The DSP state belongs to a specific
|
||||
logical bitstream ****************************************************/
|
||||
typedef struct vorbis_dsp_state{
|
||||
int analysisp;
|
||||
vorbis_info *vi;
|
||||
|
||||
float **pcm;
|
||||
float **pcmret;
|
||||
int pcm_storage;
|
||||
int pcm_current;
|
||||
int pcm_returned;
|
||||
|
||||
int preextrapolate;
|
||||
int eofflag;
|
||||
|
||||
long lW;
|
||||
long W;
|
||||
long nW;
|
||||
long centerW;
|
||||
|
||||
ogg_int64_t granulepos;
|
||||
ogg_int64_t sequence;
|
||||
|
||||
ogg_int64_t glue_bits;
|
||||
ogg_int64_t time_bits;
|
||||
ogg_int64_t floor_bits;
|
||||
ogg_int64_t res_bits;
|
||||
|
||||
void *backend_state;
|
||||
} vorbis_dsp_state;
|
||||
|
||||
typedef struct vorbis_block{
|
||||
/* necessary stream state for linking to the framing abstraction */
|
||||
float **pcm; /* this is a pointer into local storage */
|
||||
oggpack_buffer opb;
|
||||
|
||||
long lW;
|
||||
long W;
|
||||
long nW;
|
||||
int pcmend;
|
||||
int mode;
|
||||
|
||||
int eofflag;
|
||||
ogg_int64_t granulepos;
|
||||
ogg_int64_t sequence;
|
||||
vorbis_dsp_state *vd; /* For read-only access of configuration */
|
||||
|
||||
/* local storage to avoid remallocing; it's up to the mapping to
|
||||
structure it */
|
||||
void *localstore;
|
||||
long localtop;
|
||||
long localalloc;
|
||||
long totaluse;
|
||||
struct alloc_chain *reap;
|
||||
|
||||
/* bitmetrics for the frame */
|
||||
long glue_bits;
|
||||
long time_bits;
|
||||
long floor_bits;
|
||||
long res_bits;
|
||||
|
||||
void *internal;
|
||||
|
||||
} vorbis_block;
|
||||
|
||||
/* vorbis_block is a single block of data to be processed as part of
|
||||
the analysis/synthesis stream; it belongs to a specific logical
|
||||
bitstream, but is independant from other vorbis_blocks belonging to
|
||||
that logical bitstream. *************************************************/
|
||||
|
||||
struct alloc_chain{
|
||||
void *ptr;
|
||||
struct alloc_chain *next;
|
||||
};
|
||||
|
||||
/* vorbis_info contains all the setup information specific to the
|
||||
specific compression/decompression mode in progress (eg,
|
||||
psychoacoustic settings, channel setup, options, codebook
|
||||
etc). vorbis_info and substructures are in backends.h.
|
||||
*********************************************************************/
|
||||
|
||||
/* the comments are not part of vorbis_info so that vorbis_info can be
|
||||
static storage */
|
||||
typedef struct vorbis_comment{
|
||||
/* unlimited user comment fields. libvorbis writes 'libvorbis'
|
||||
whatever vendor is set to in encode */
|
||||
char **user_comments;
|
||||
int *comment_lengths;
|
||||
int comments;
|
||||
char *vendor;
|
||||
|
||||
} vorbis_comment;
|
||||
|
||||
|
||||
/* libvorbis encodes in two abstraction layers; first we perform DSP
|
||||
and produce a packet (see docs/analysis.txt). The packet is then
|
||||
coded into a framed OggSquish bitstream by the second layer (see
|
||||
docs/framing.txt). Decode is the reverse process; we sync/frame
|
||||
the bitstream and extract individual packets, then decode the
|
||||
packet back into PCM audio.
|
||||
|
||||
The extra framing/packetizing is used in streaming formats, such as
|
||||
files. Over the net (such as with UDP), the framing and
|
||||
packetization aren't necessary as they're provided by the transport
|
||||
and the streaming layer is not used */
|
||||
|
||||
/* Vorbis PRIMITIVES: general ***************************************/
|
||||
|
||||
extern void vorbis_info_init(vorbis_info *vi);
|
||||
extern void vorbis_info_clear(vorbis_info *vi);
|
||||
extern int vorbis_info_blocksize(vorbis_info *vi,int zo);
|
||||
extern void vorbis_comment_init(vorbis_comment *vc);
|
||||
extern void vorbis_comment_add(vorbis_comment *vc, const char *comment);
|
||||
extern void vorbis_comment_add_tag(vorbis_comment *vc,
|
||||
const char *tag, const char *contents);
|
||||
extern char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
|
||||
extern int vorbis_comment_query_count(vorbis_comment *vc, const char *tag);
|
||||
extern void vorbis_comment_clear(vorbis_comment *vc);
|
||||
|
||||
extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
|
||||
extern int vorbis_block_clear(vorbis_block *vb);
|
||||
extern void vorbis_dsp_clear(vorbis_dsp_state *v);
|
||||
extern double vorbis_granule_time(vorbis_dsp_state *v,
|
||||
ogg_int64_t granulepos);
|
||||
|
||||
extern const char *vorbis_version_string(void);
|
||||
|
||||
/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
|
||||
|
||||
extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
|
||||
extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
|
||||
extern int vorbis_analysis_headerout(vorbis_dsp_state *v,
|
||||
vorbis_comment *vc,
|
||||
ogg_packet *op,
|
||||
ogg_packet *op_comm,
|
||||
ogg_packet *op_code);
|
||||
extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
|
||||
extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
|
||||
extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
|
||||
extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op);
|
||||
|
||||
extern int vorbis_bitrate_addblock(vorbis_block *vb);
|
||||
extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
|
||||
ogg_packet *op);
|
||||
|
||||
/* Vorbis PRIMITIVES: synthesis layer *******************************/
|
||||
extern int vorbis_synthesis_idheader(ogg_packet *op);
|
||||
extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
|
||||
ogg_packet *op);
|
||||
|
||||
extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
|
||||
extern int vorbis_synthesis_restart(vorbis_dsp_state *v);
|
||||
extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
|
||||
extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
|
||||
extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
|
||||
extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
|
||||
extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
|
||||
extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
|
||||
extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
|
||||
|
||||
extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag);
|
||||
extern int vorbis_synthesis_halfrate_p(vorbis_info *v);
|
||||
|
||||
/* Vorbis ERRORS and return codes ***********************************/
|
||||
|
||||
#define OV_FALSE -1
|
||||
#define OV_EOF -2
|
||||
#define OV_HOLE -3
|
||||
|
||||
#define OV_EREAD -128
|
||||
#define OV_EFAULT -129
|
||||
#define OV_EIMPL -130
|
||||
#define OV_EINVAL -131
|
||||
#define OV_ENOTVORBIS -132
|
||||
#define OV_EBADHEADER -133
|
||||
#define OV_EVERSION -134
|
||||
#define OV_ENOTAUDIO -135
|
||||
#define OV_EBADPACKET -136
|
||||
#define OV_EBADLINK -137
|
||||
#define OV_ENOSEEK -138
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
206
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/vorbisfile.h
vendored
Normal file
206
polymer/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/vorbisfile.h
vendored
Normal file
|
@ -0,0 +1,206 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: stdio-based convenience library for opening/seeking/decoding
|
||||
last mod: $Id: vorbisfile.h 16243 2009-07-10 02:49:31Z xiphmont $
|
||||
|
||||
********************************************************************/
|
||||
|
||||
#ifndef _OV_FILE_H_
|
||||
#define _OV_FILE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "codec.h"
|
||||
|
||||
/* The function prototypes for the callbacks are basically the same as for
|
||||
* the stdio functions fread, fseek, fclose, ftell.
|
||||
* The one difference is that the FILE * arguments have been replaced with
|
||||
* a void * - this is to be used as a pointer to whatever internal data these
|
||||
* functions might need. In the stdio case, it's just a FILE * cast to a void *
|
||||
*
|
||||
* If you use other functions, check the docs for these functions and return
|
||||
* the right values. For seek_func(), you *MUST* return -1 if the stream is
|
||||
* unseekable
|
||||
*/
|
||||
typedef struct {
|
||||
size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource);
|
||||
int (*seek_func) (void *datasource, ogg_int64_t offset, int whence);
|
||||
int (*close_func) (void *datasource);
|
||||
long (*tell_func) (void *datasource);
|
||||
} ov_callbacks;
|
||||
|
||||
#ifndef OV_EXCLUDE_STATIC_CALLBACKS
|
||||
|
||||
/* a few sets of convenient callbacks, especially for use under
|
||||
* Windows where ov_open_callbacks() should always be used instead of
|
||||
* ov_open() to avoid problems with incompatable crt.o version linking
|
||||
* issues. */
|
||||
|
||||
static int _ov_header_fseek_wrap(FILE *f,ogg_int64_t off,int whence){
|
||||
if(f==NULL)return(-1);
|
||||
|
||||
#ifdef __MINGW32__
|
||||
return fseeko64(f,off,whence);
|
||||
#elif defined (_WIN32)
|
||||
return _fseeki64(f,off,whence);
|
||||
#else
|
||||
return fseek(f,off,whence);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* These structs below (OV_CALLBACKS_DEFAULT etc) are defined here as
|
||||
* static data. That means that every file which includes this header
|
||||
* will get its own copy of these structs whether it uses them or
|
||||
* not unless it #defines OV_EXCLUDE_STATIC_CALLBACKS.
|
||||
* These static symbols are essential on platforms such as Windows on
|
||||
* which several different versions of stdio support may be linked to
|
||||
* by different DLLs, and we need to be certain we know which one
|
||||
* we're using (the same one as the main application).
|
||||
*/
|
||||
|
||||
static ov_callbacks OV_CALLBACKS_DEFAULT = {
|
||||
(size_t (*)(void *, size_t, size_t, void *)) fread,
|
||||
(int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap,
|
||||
(int (*)(void *)) fclose,
|
||||
(long (*)(void *)) ftell
|
||||
};
|
||||
|
||||
static ov_callbacks OV_CALLBACKS_NOCLOSE = {
|
||||
(size_t (*)(void *, size_t, size_t, void *)) fread,
|
||||
(int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap,
|
||||
(int (*)(void *)) NULL,
|
||||
(long (*)(void *)) ftell
|
||||
};
|
||||
|
||||
static ov_callbacks OV_CALLBACKS_STREAMONLY = {
|
||||
(size_t (*)(void *, size_t, size_t, void *)) fread,
|
||||
(int (*)(void *, ogg_int64_t, int)) NULL,
|
||||
(int (*)(void *)) fclose,
|
||||
(long (*)(void *)) NULL
|
||||
};
|
||||
|
||||
static ov_callbacks OV_CALLBACKS_STREAMONLY_NOCLOSE = {
|
||||
(size_t (*)(void *, size_t, size_t, void *)) fread,
|
||||
(int (*)(void *, ogg_int64_t, int)) NULL,
|
||||
(int (*)(void *)) NULL,
|
||||
(long (*)(void *)) NULL
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#define NOTOPEN 0
|
||||
#define PARTOPEN 1
|
||||
#define OPENED 2
|
||||
#define STREAMSET 3
|
||||
#define INITSET 4
|
||||
|
||||
typedef struct OggVorbis_File {
|
||||
void *datasource; /* Pointer to a FILE *, etc. */
|
||||
int seekable;
|
||||
ogg_int64_t offset;
|
||||
ogg_int64_t end;
|
||||
ogg_sync_state oy;
|
||||
|
||||
/* If the FILE handle isn't seekable (eg, a pipe), only the current
|
||||
stream appears */
|
||||
int links;
|
||||
ogg_int64_t *offsets;
|
||||
ogg_int64_t *dataoffsets;
|
||||
long *serialnos;
|
||||
ogg_int64_t *pcmlengths; /* overloaded to maintain binary
|
||||
compatability; x2 size, stores both
|
||||
beginning and end values */
|
||||
vorbis_info *vi;
|
||||
vorbis_comment *vc;
|
||||
|
||||
/* Decoding working state local storage */
|
||||
ogg_int64_t pcm_offset;
|
||||
int ready_state;
|
||||
long current_serialno;
|
||||
int current_link;
|
||||
|
||||
double bittrack;
|
||||
double samptrack;
|
||||
|
||||
ogg_stream_state os; /* take physical pages, weld into a logical
|
||||
stream of packets */
|
||||
vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
|
||||
vorbis_block vb; /* local working space for packet->PCM decode */
|
||||
|
||||
ov_callbacks callbacks;
|
||||
|
||||
} OggVorbis_File;
|
||||
|
||||
|
||||
extern int ov_clear(OggVorbis_File *vf);
|
||||
extern int ov_fopen(char *path,OggVorbis_File *vf);
|
||||
extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
|
||||
extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
|
||||
char *initial, long ibytes, ov_callbacks callbacks);
|
||||
|
||||
extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
|
||||
extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
|
||||
char *initial, long ibytes, ov_callbacks callbacks);
|
||||
extern int ov_test_open(OggVorbis_File *vf);
|
||||
|
||||
extern long ov_bitrate(OggVorbis_File *vf,int i);
|
||||
extern long ov_bitrate_instant(OggVorbis_File *vf);
|
||||
extern long ov_streams(OggVorbis_File *vf);
|
||||
extern long ov_seekable(OggVorbis_File *vf);
|
||||
extern long ov_serialnumber(OggVorbis_File *vf,int i);
|
||||
|
||||
extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
|
||||
extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
|
||||
extern double ov_time_total(OggVorbis_File *vf,int i);
|
||||
|
||||
extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_time_seek(OggVorbis_File *vf,double pos);
|
||||
extern int ov_time_seek_page(OggVorbis_File *vf,double pos);
|
||||
|
||||
extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_time_seek_lap(OggVorbis_File *vf,double pos);
|
||||
extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos);
|
||||
|
||||
extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
|
||||
extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
|
||||
extern double ov_time_tell(OggVorbis_File *vf);
|
||||
|
||||
extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
|
||||
extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
|
||||
|
||||
extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples,
|
||||
int *bitstream);
|
||||
extern long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
|
||||
int bigendianp,int word,int sgned,int *bitstream,
|
||||
void (*filter)(float **pcm,long channels,long samples,void *filter_param),void *filter_param);
|
||||
extern long ov_read(OggVorbis_File *vf,char *buffer,int length,
|
||||
int bigendianp,int word,int sgned,int *bitstream);
|
||||
extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2);
|
||||
|
||||
extern int ov_halfrate(OggVorbis_File *vf,int flag);
|
||||
extern int ov_halfrate_p(OggVorbis_File *vf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Headers
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Headers
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
Versions/Current/Headers
|
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Resources
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Resources
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
Versions/Current/Resources
|
202
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/ogg.h
vendored
Normal file
202
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/ogg.h
vendored
Normal file
|
@ -0,0 +1,202 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: toplevel libogg include
|
||||
last mod: $Id: ogg.h 7188 2004-07-20 07:26:04Z xiphmont $
|
||||
|
||||
********************************************************************/
|
||||
#ifndef _OGG_H
|
||||
#define _OGG_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <ogg/os_types.h>
|
||||
|
||||
typedef struct {
|
||||
long endbyte;
|
||||
int endbit;
|
||||
|
||||
unsigned char *buffer;
|
||||
unsigned char *ptr;
|
||||
long storage;
|
||||
} oggpack_buffer;
|
||||
|
||||
/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *header;
|
||||
long header_len;
|
||||
unsigned char *body;
|
||||
long body_len;
|
||||
} ogg_page;
|
||||
|
||||
/* ogg_stream_state contains the current encode/decode state of a logical
|
||||
Ogg bitstream **********************************************************/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *body_data; /* bytes from packet bodies */
|
||||
long body_storage; /* storage elements allocated */
|
||||
long body_fill; /* elements stored; fill mark */
|
||||
long body_returned; /* elements of fill returned */
|
||||
|
||||
|
||||
int *lacing_vals; /* The values that will go to the segment table */
|
||||
ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
|
||||
this way, but it is simple coupled to the
|
||||
lacing fifo */
|
||||
long lacing_storage;
|
||||
long lacing_fill;
|
||||
long lacing_packet;
|
||||
long lacing_returned;
|
||||
|
||||
unsigned char header[282]; /* working space for header encode */
|
||||
int header_fill;
|
||||
|
||||
int e_o_s; /* set when we have buffered the last packet in the
|
||||
logical bitstream */
|
||||
int b_o_s; /* set after we've written the initial page
|
||||
of a logical bitstream */
|
||||
long serialno;
|
||||
long pageno;
|
||||
ogg_int64_t packetno; /* sequence number for decode; the framing
|
||||
knows where there's a hole in the data,
|
||||
but we need coupling so that the codec
|
||||
(which is in a seperate abstraction
|
||||
layer) also knows about the gap */
|
||||
ogg_int64_t granulepos;
|
||||
|
||||
} ogg_stream_state;
|
||||
|
||||
/* ogg_packet is used to encapsulate the data and metadata belonging
|
||||
to a single raw Ogg/Vorbis packet *************************************/
|
||||
|
||||
typedef struct {
|
||||
unsigned char *packet;
|
||||
long bytes;
|
||||
long b_o_s;
|
||||
long e_o_s;
|
||||
|
||||
ogg_int64_t granulepos;
|
||||
|
||||
ogg_int64_t packetno; /* sequence number for decode; the framing
|
||||
knows where there's a hole in the data,
|
||||
but we need coupling so that the codec
|
||||
(which is in a seperate abstraction
|
||||
layer) also knows about the gap */
|
||||
} ogg_packet;
|
||||
|
||||
typedef struct {
|
||||
unsigned char *data;
|
||||
int storage;
|
||||
int fill;
|
||||
int returned;
|
||||
|
||||
int unsynced;
|
||||
int headerbytes;
|
||||
int bodybytes;
|
||||
} ogg_sync_state;
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
|
||||
|
||||
extern void oggpack_writeinit(oggpack_buffer *b);
|
||||
extern void oggpack_writetrunc(oggpack_buffer *b,long bits);
|
||||
extern void oggpack_writealign(oggpack_buffer *b);
|
||||
extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits);
|
||||
extern void oggpack_reset(oggpack_buffer *b);
|
||||
extern void oggpack_writeclear(oggpack_buffer *b);
|
||||
extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
|
||||
extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
|
||||
extern long oggpack_look(oggpack_buffer *b,int bits);
|
||||
extern long oggpack_look1(oggpack_buffer *b);
|
||||
extern void oggpack_adv(oggpack_buffer *b,int bits);
|
||||
extern void oggpack_adv1(oggpack_buffer *b);
|
||||
extern long oggpack_read(oggpack_buffer *b,int bits);
|
||||
extern long oggpack_read1(oggpack_buffer *b);
|
||||
extern long oggpack_bytes(oggpack_buffer *b);
|
||||
extern long oggpack_bits(oggpack_buffer *b);
|
||||
extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
|
||||
|
||||
extern void oggpackB_writeinit(oggpack_buffer *b);
|
||||
extern void oggpackB_writetrunc(oggpack_buffer *b,long bits);
|
||||
extern void oggpackB_writealign(oggpack_buffer *b);
|
||||
extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits);
|
||||
extern void oggpackB_reset(oggpack_buffer *b);
|
||||
extern void oggpackB_writeclear(oggpack_buffer *b);
|
||||
extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
|
||||
extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits);
|
||||
extern long oggpackB_look(oggpack_buffer *b,int bits);
|
||||
extern long oggpackB_look1(oggpack_buffer *b);
|
||||
extern void oggpackB_adv(oggpack_buffer *b,int bits);
|
||||
extern void oggpackB_adv1(oggpack_buffer *b);
|
||||
extern long oggpackB_read(oggpack_buffer *b,int bits);
|
||||
extern long oggpackB_read1(oggpack_buffer *b);
|
||||
extern long oggpackB_bytes(oggpack_buffer *b);
|
||||
extern long oggpackB_bits(oggpack_buffer *b);
|
||||
extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: encoding **************************/
|
||||
|
||||
extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
|
||||
extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
|
||||
extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
|
||||
|
||||
extern int ogg_sync_init(ogg_sync_state *oy);
|
||||
extern int ogg_sync_clear(ogg_sync_state *oy);
|
||||
extern int ogg_sync_reset(ogg_sync_state *oy);
|
||||
extern int ogg_sync_destroy(ogg_sync_state *oy);
|
||||
|
||||
extern char *ogg_sync_buffer(ogg_sync_state *oy, long size);
|
||||
extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
|
||||
extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
|
||||
extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
|
||||
extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
|
||||
extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
|
||||
extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
|
||||
|
||||
/* Ogg BITSTREAM PRIMITIVES: general ***************************/
|
||||
|
||||
extern int ogg_stream_init(ogg_stream_state *os,int serialno);
|
||||
extern int ogg_stream_clear(ogg_stream_state *os);
|
||||
extern int ogg_stream_reset(ogg_stream_state *os);
|
||||
extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
|
||||
extern int ogg_stream_destroy(ogg_stream_state *os);
|
||||
extern int ogg_stream_eos(ogg_stream_state *os);
|
||||
|
||||
extern void ogg_page_checksum_set(ogg_page *og);
|
||||
|
||||
extern int ogg_page_version(ogg_page *og);
|
||||
extern int ogg_page_continued(ogg_page *og);
|
||||
extern int ogg_page_bos(ogg_page *og);
|
||||
extern int ogg_page_eos(ogg_page *og);
|
||||
extern ogg_int64_t ogg_page_granulepos(ogg_page *og);
|
||||
extern int ogg_page_serialno(ogg_page *og);
|
||||
extern long ogg_page_pageno(ogg_page *og);
|
||||
extern int ogg_page_packets(ogg_page *og);
|
||||
|
||||
extern void ogg_packet_clear(ogg_packet *op);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _OGG_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
127
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/os_types.h
vendored
Normal file
127
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/os_types.h
vendored
Normal file
|
@ -0,0 +1,127 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
|
||||
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: #ifdef jail to whip a few platforms into the UNIX ideal.
|
||||
last mod: $Id: os_types.h 7524 2004-08-11 04:20:36Z conrad $
|
||||
|
||||
********************************************************************/
|
||||
#ifndef _OS_TYPES_H
|
||||
#define _OS_TYPES_H
|
||||
|
||||
/* make it easy on the folks that want to compile the libs with a
|
||||
different malloc than stdlib */
|
||||
#define _ogg_malloc malloc
|
||||
#define _ogg_calloc calloc
|
||||
#define _ogg_realloc realloc
|
||||
#define _ogg_free free
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
||||
# if defined(__CYGWIN__)
|
||||
# include <_G_config.h>
|
||||
typedef _G_int64_t ogg_int64_t;
|
||||
typedef _G_int32_t ogg_int32_t;
|
||||
typedef _G_uint32_t ogg_uint32_t;
|
||||
typedef _G_int16_t ogg_int16_t;
|
||||
typedef _G_uint16_t ogg_uint16_t;
|
||||
# elif defined(__MINGW32__)
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
typedef unsigned long long ogg_uint64_t;
|
||||
# elif defined(__MWERKS__)
|
||||
typedef long long ogg_int64_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
# else
|
||||
/* MSVC/Borland */
|
||||
typedef __int64 ogg_int64_t;
|
||||
typedef __int32 ogg_int32_t;
|
||||
typedef unsigned __int32 ogg_uint32_t;
|
||||
typedef __int16 ogg_int16_t;
|
||||
typedef unsigned __int16 ogg_uint16_t;
|
||||
# endif
|
||||
|
||||
#elif defined(__MACOS__)
|
||||
|
||||
# include <sys/types.h>
|
||||
typedef SInt16 ogg_int16_t;
|
||||
typedef UInt16 ogg_uint16_t;
|
||||
typedef SInt32 ogg_int32_t;
|
||||
typedef UInt32 ogg_uint32_t;
|
||||
typedef SInt64 ogg_int64_t;
|
||||
|
||||
#elif defined(__MACOSX__) /* MacOS X Framework build */
|
||||
|
||||
# include <sys/types.h>
|
||||
typedef int16_t ogg_int16_t;
|
||||
typedef u_int16_t ogg_uint16_t;
|
||||
typedef int32_t ogg_int32_t;
|
||||
typedef u_int32_t ogg_uint32_t;
|
||||
typedef int64_t ogg_int64_t;
|
||||
|
||||
#elif defined(__BEOS__)
|
||||
|
||||
/* Be */
|
||||
# include <inttypes.h>
|
||||
typedef int16_t ogg_int16_t;
|
||||
typedef u_int16_t ogg_uint16_t;
|
||||
typedef int32_t ogg_int32_t;
|
||||
typedef u_int32_t ogg_uint32_t;
|
||||
typedef int64_t ogg_int64_t;
|
||||
|
||||
#elif defined (__EMX__)
|
||||
|
||||
/* OS/2 GCC */
|
||||
typedef short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
|
||||
#elif defined (DJGPP)
|
||||
|
||||
/* DJGPP */
|
||||
typedef short ogg_int16_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long ogg_int64_t;
|
||||
|
||||
#elif defined(R5900)
|
||||
|
||||
/* PS2 EE */
|
||||
typedef long ogg_int64_t;
|
||||
typedef int ogg_int32_t;
|
||||
typedef unsigned ogg_uint32_t;
|
||||
typedef short ogg_int16_t;
|
||||
|
||||
#elif defined(__SYMBIAN32__)
|
||||
|
||||
/* Symbian GCC */
|
||||
typedef signed short ogg_int16_t;
|
||||
typedef unsigned short ogg_uint16_t;
|
||||
typedef signed int ogg_int32_t;
|
||||
typedef unsigned int ogg_uint32_t;
|
||||
typedef long long int ogg_int64_t;
|
||||
|
||||
#else
|
||||
|
||||
# include <sys/types.h>
|
||||
# include <ogg/config_types.h>
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _OS_TYPES_H */
|
Binary file not shown.
22
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/Info.plist
vendored
Normal file
22
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/Info.plist
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>ogg</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.yourcompany.yourcocoaframework</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>ogg</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
</dict>
|
||||
</plist>
|
BIN
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/ogg
vendored
Executable file
BIN
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/ogg
vendored
Executable file
Binary file not shown.
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/Current
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/Current
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
A
|
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/ogg
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/ogg.framework/ogg
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
Versions/Current/ogg
|
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Headers
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Headers
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
Versions/Current/Headers
|
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Resources
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Resources
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
Versions/Current/Resources
|
240
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/codec.h
vendored
Normal file
240
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/codec.h
vendored
Normal file
|
@ -0,0 +1,240 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
|
||||
* by the XIPHOPHORUS Company http://www.xiph.org/ *
|
||||
|
||||
********************************************************************
|
||||
|
||||
function: libvorbis codec headers
|
||||
last mod: $Id: codec.h 7485 2004-08-05 14:54:23Z thomasvs $
|
||||
|
||||
********************************************************************/
|
||||
|
||||
#ifndef _vorbis_codec_h_
|
||||
#define _vorbis_codec_h_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <ogg/ogg.h>
|
||||
|
||||
typedef struct vorbis_info{
|
||||
int version;
|
||||
int channels;
|
||||
long rate;
|
||||
|
||||
/* The below bitrate declarations are *hints*.
|
||||
Combinations of the three values carry the following implications:
|
||||
|
||||
all three set to the same value:
|
||||
implies a fixed rate bitstream
|
||||
only nominal set:
|
||||
implies a VBR stream that averages the nominal bitrate. No hard
|
||||
upper/lower limit
|
||||
upper and or lower set:
|
||||
implies a VBR bitstream that obeys the bitrate limits. nominal
|
||||
may also be set to give a nominal rate.
|
||||
none set:
|
||||
the coder does not care to speculate.
|
||||
*/
|
||||
|
||||
long bitrate_upper;
|
||||
long bitrate_nominal;
|
||||
long bitrate_lower;
|
||||
long bitrate_window;
|
||||
|
||||
void *codec_setup;
|
||||
} vorbis_info;
|
||||
|
||||
/* vorbis_dsp_state buffers the current vorbis audio
|
||||
analysis/synthesis state. The DSP state belongs to a specific
|
||||
logical bitstream ****************************************************/
|
||||
typedef struct vorbis_dsp_state{
|
||||
int analysisp;
|
||||
vorbis_info *vi;
|
||||
|
||||
float **pcm;
|
||||
float **pcmret;
|
||||
int pcm_storage;
|
||||
int pcm_current;
|
||||
int pcm_returned;
|
||||
|
||||
int preextrapolate;
|
||||
int eofflag;
|
||||
|
||||
long lW;
|
||||
long W;
|
||||
long nW;
|
||||
long centerW;
|
||||
|
||||
ogg_int64_t granulepos;
|
||||
ogg_int64_t sequence;
|
||||
|
||||
ogg_int64_t glue_bits;
|
||||
ogg_int64_t time_bits;
|
||||
ogg_int64_t floor_bits;
|
||||
ogg_int64_t res_bits;
|
||||
|
||||
void *backend_state;
|
||||
} vorbis_dsp_state;
|
||||
|
||||
typedef struct vorbis_block{
|
||||
/* necessary stream state for linking to the framing abstraction */
|
||||
float **pcm; /* this is a pointer into local storage */
|
||||
oggpack_buffer opb;
|
||||
|
||||
long lW;
|
||||
long W;
|
||||
long nW;
|
||||
int pcmend;
|
||||
int mode;
|
||||
|
||||
int eofflag;
|
||||
ogg_int64_t granulepos;
|
||||
ogg_int64_t sequence;
|
||||
vorbis_dsp_state *vd; /* For read-only access of configuration */
|
||||
|
||||
/* local storage to avoid remallocing; it's up to the mapping to
|
||||
structure it */
|
||||
void *localstore;
|
||||
long localtop;
|
||||
long localalloc;
|
||||
long totaluse;
|
||||
struct alloc_chain *reap;
|
||||
|
||||
/* bitmetrics for the frame */
|
||||
long glue_bits;
|
||||
long time_bits;
|
||||
long floor_bits;
|
||||
long res_bits;
|
||||
|
||||
void *internal;
|
||||
|
||||
} vorbis_block;
|
||||
|
||||
/* vorbis_block is a single block of data to be processed as part of
|
||||
the analysis/synthesis stream; it belongs to a specific logical
|
||||
bitstream, but is independant from other vorbis_blocks belonging to
|
||||
that logical bitstream. *************************************************/
|
||||
|
||||
struct alloc_chain{
|
||||
void *ptr;
|
||||
struct alloc_chain *next;
|
||||
};
|
||||
|
||||
/* vorbis_info contains all the setup information specific to the
|
||||
specific compression/decompression mode in progress (eg,
|
||||
psychoacoustic settings, channel setup, options, codebook
|
||||
etc). vorbis_info and substructures are in backends.h.
|
||||
*********************************************************************/
|
||||
|
||||
/* the comments are not part of vorbis_info so that vorbis_info can be
|
||||
static storage */
|
||||
typedef struct vorbis_comment{
|
||||
/* unlimited user comment fields. libvorbis writes 'libvorbis'
|
||||
whatever vendor is set to in encode */
|
||||
char **user_comments;
|
||||
int *comment_lengths;
|
||||
int comments;
|
||||
char *vendor;
|
||||
|
||||
} vorbis_comment;
|
||||
|
||||
|
||||
/* libvorbis encodes in two abstraction layers; first we perform DSP
|
||||
and produce a packet (see docs/analysis.txt). The packet is then
|
||||
coded into a framed OggSquish bitstream by the second layer (see
|
||||
docs/framing.txt). Decode is the reverse process; we sync/frame
|
||||
the bitstream and extract individual packets, then decode the
|
||||
packet back into PCM audio.
|
||||
|
||||
The extra framing/packetizing is used in streaming formats, such as
|
||||
files. Over the net (such as with UDP), the framing and
|
||||
packetization aren't necessary as they're provided by the transport
|
||||
and the streaming layer is not used */
|
||||
|
||||
/* Vorbis PRIMITIVES: general ***************************************/
|
||||
|
||||
extern void vorbis_info_init(vorbis_info *vi);
|
||||
extern void vorbis_info_clear(vorbis_info *vi);
|
||||
extern int vorbis_info_blocksize(vorbis_info *vi,int zo);
|
||||
extern void vorbis_comment_init(vorbis_comment *vc);
|
||||
extern void vorbis_comment_add(vorbis_comment *vc, char *comment);
|
||||
extern void vorbis_comment_add_tag(vorbis_comment *vc,
|
||||
char *tag, char *contents);
|
||||
extern char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count);
|
||||
extern int vorbis_comment_query_count(vorbis_comment *vc, char *tag);
|
||||
extern void vorbis_comment_clear(vorbis_comment *vc);
|
||||
|
||||
extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
|
||||
extern int vorbis_block_clear(vorbis_block *vb);
|
||||
extern void vorbis_dsp_clear(vorbis_dsp_state *v);
|
||||
extern double vorbis_granule_time(vorbis_dsp_state *v,
|
||||
ogg_int64_t granulepos);
|
||||
|
||||
/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
|
||||
|
||||
extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
|
||||
extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
|
||||
extern int vorbis_analysis_headerout(vorbis_dsp_state *v,
|
||||
vorbis_comment *vc,
|
||||
ogg_packet *op,
|
||||
ogg_packet *op_comm,
|
||||
ogg_packet *op_code);
|
||||
extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
|
||||
extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
|
||||
extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
|
||||
extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op);
|
||||
|
||||
extern int vorbis_bitrate_addblock(vorbis_block *vb);
|
||||
extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
|
||||
ogg_packet *op);
|
||||
|
||||
/* Vorbis PRIMITIVES: synthesis layer *******************************/
|
||||
extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
|
||||
ogg_packet *op);
|
||||
|
||||
extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
|
||||
extern int vorbis_synthesis_restart(vorbis_dsp_state *v);
|
||||
extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
|
||||
extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
|
||||
extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
|
||||
extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
|
||||
extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
|
||||
extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
|
||||
extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
|
||||
|
||||
extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag);
|
||||
extern int vorbis_synthesis_halfrate_p(vorbis_info *v);
|
||||
|
||||
/* Vorbis ERRORS and return codes ***********************************/
|
||||
|
||||
#define OV_FALSE -1
|
||||
#define OV_EOF -2
|
||||
#define OV_HOLE -3
|
||||
|
||||
#define OV_EREAD -128
|
||||
#define OV_EFAULT -129
|
||||
#define OV_EIMPL -130
|
||||
#define OV_EINVAL -131
|
||||
#define OV_ENOTVORBIS -132
|
||||
#define OV_EBADHEADER -133
|
||||
#define OV_EVERSION -134
|
||||
#define OV_ENOTAUDIO -135
|
||||
#define OV_EBADPACKET -136
|
||||
#define OV_EBADLINK -137
|
||||
#define OV_ENOSEEK -138
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
112
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisenc.h
vendored
Normal file
112
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisenc.h
vendored
Normal file
|
@ -0,0 +1,112 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
|
||||
* by the XIPHOPHORUS Company http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: vorbis encode-engine setup
|
||||
last mod: $Id: vorbisenc.h 7485 2004-08-05 14:54:23Z thomasvs $
|
||||
|
||||
********************************************************************/
|
||||
|
||||
#ifndef _OV_ENC_H_
|
||||
#define _OV_ENC_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include "codec.h"
|
||||
|
||||
extern int vorbis_encode_init(vorbis_info *vi,
|
||||
long channels,
|
||||
long rate,
|
||||
|
||||
long max_bitrate,
|
||||
long nominal_bitrate,
|
||||
long min_bitrate);
|
||||
|
||||
extern int vorbis_encode_setup_managed(vorbis_info *vi,
|
||||
long channels,
|
||||
long rate,
|
||||
|
||||
long max_bitrate,
|
||||
long nominal_bitrate,
|
||||
long min_bitrate);
|
||||
|
||||
extern int vorbis_encode_setup_vbr(vorbis_info *vi,
|
||||
long channels,
|
||||
long rate,
|
||||
|
||||
float quality /* quality level from 0. (lo) to 1. (hi) */
|
||||
);
|
||||
|
||||
extern int vorbis_encode_init_vbr(vorbis_info *vi,
|
||||
long channels,
|
||||
long rate,
|
||||
|
||||
float base_quality /* quality level from 0. (lo) to 1. (hi) */
|
||||
);
|
||||
|
||||
extern int vorbis_encode_setup_init(vorbis_info *vi);
|
||||
|
||||
extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg);
|
||||
|
||||
/* deprecated rate management supported only for compatability */
|
||||
#define OV_ECTL_RATEMANAGE_GET 0x10
|
||||
#define OV_ECTL_RATEMANAGE_SET 0x11
|
||||
#define OV_ECTL_RATEMANAGE_AVG 0x12
|
||||
#define OV_ECTL_RATEMANAGE_HARD 0x13
|
||||
|
||||
struct ovectl_ratemanage_arg {
|
||||
int management_active;
|
||||
|
||||
long bitrate_hard_min;
|
||||
long bitrate_hard_max;
|
||||
double bitrate_hard_window;
|
||||
|
||||
long bitrate_av_lo;
|
||||
long bitrate_av_hi;
|
||||
double bitrate_av_window;
|
||||
double bitrate_av_window_center;
|
||||
};
|
||||
|
||||
|
||||
/* new rate setup */
|
||||
#define OV_ECTL_RATEMANAGE2_GET 0x14
|
||||
#define OV_ECTL_RATEMANAGE2_SET 0x15
|
||||
|
||||
struct ovectl_ratemanage2_arg {
|
||||
int management_active;
|
||||
|
||||
long bitrate_limit_min_kbps;
|
||||
long bitrate_limit_max_kbps;
|
||||
long bitrate_limit_reservoir_bits;
|
||||
double bitrate_limit_reservoir_bias;
|
||||
|
||||
long bitrate_average_kbps;
|
||||
double bitrate_average_damping;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define OV_ECTL_LOWPASS_GET 0x20
|
||||
#define OV_ECTL_LOWPASS_SET 0x21
|
||||
|
||||
#define OV_ECTL_IBLOCK_GET 0x30
|
||||
#define OV_ECTL_IBLOCK_SET 0x31
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
|
143
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisfile.h
vendored
Normal file
143
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisfile.h
vendored
Normal file
|
@ -0,0 +1,143 @@
|
|||
/********************************************************************
|
||||
* *
|
||||
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
||||
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
||||
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
||||
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
||||
* *
|
||||
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
|
||||
* by the XIPHOPHORUS Company http://www.xiph.org/ *
|
||||
* *
|
||||
********************************************************************
|
||||
|
||||
function: stdio-based convenience library for opening/seeking/decoding
|
||||
last mod: $Id: vorbisfile.h 7485 2004-08-05 14:54:23Z thomasvs $
|
||||
|
||||
********************************************************************/
|
||||
|
||||
#ifndef _OV_FILE_H_
|
||||
#define _OV_FILE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "codec.h"
|
||||
|
||||
/* The function prototypes for the callbacks are basically the same as for
|
||||
* the stdio functions fread, fseek, fclose, ftell.
|
||||
* The one difference is that the FILE * arguments have been replaced with
|
||||
* a void * - this is to be used as a pointer to whatever internal data these
|
||||
* functions might need. In the stdio case, it's just a FILE * cast to a void *
|
||||
*
|
||||
* If you use other functions, check the docs for these functions and return
|
||||
* the right values. For seek_func(), you *MUST* return -1 if the stream is
|
||||
* unseekable
|
||||
*/
|
||||
typedef struct {
|
||||
size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource);
|
||||
int (*seek_func) (void *datasource, ogg_int64_t offset, int whence);
|
||||
int (*close_func) (void *datasource);
|
||||
long (*tell_func) (void *datasource);
|
||||
} ov_callbacks;
|
||||
|
||||
#define NOTOPEN 0
|
||||
#define PARTOPEN 1
|
||||
#define OPENED 2
|
||||
#define STREAMSET 3
|
||||
#define INITSET 4
|
||||
|
||||
typedef struct OggVorbis_File {
|
||||
void *datasource; /* Pointer to a FILE *, etc. */
|
||||
int seekable;
|
||||
ogg_int64_t offset;
|
||||
ogg_int64_t end;
|
||||
ogg_sync_state oy;
|
||||
|
||||
/* If the FILE handle isn't seekable (eg, a pipe), only the current
|
||||
stream appears */
|
||||
int links;
|
||||
ogg_int64_t *offsets;
|
||||
ogg_int64_t *dataoffsets;
|
||||
long *serialnos;
|
||||
ogg_int64_t *pcmlengths; /* overloaded to maintain binary
|
||||
compatability; x2 size, stores both
|
||||
beginning and end values */
|
||||
vorbis_info *vi;
|
||||
vorbis_comment *vc;
|
||||
|
||||
/* Decoding working state local storage */
|
||||
ogg_int64_t pcm_offset;
|
||||
int ready_state;
|
||||
long current_serialno;
|
||||
int current_link;
|
||||
|
||||
double bittrack;
|
||||
double samptrack;
|
||||
|
||||
ogg_stream_state os; /* take physical pages, weld into a logical
|
||||
stream of packets */
|
||||
vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
|
||||
vorbis_block vb; /* local working space for packet->PCM decode */
|
||||
|
||||
ov_callbacks callbacks;
|
||||
|
||||
} OggVorbis_File;
|
||||
|
||||
extern int ov_clear(OggVorbis_File *vf);
|
||||
extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
|
||||
extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
|
||||
char *initial, long ibytes, ov_callbacks callbacks);
|
||||
|
||||
extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
|
||||
extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
|
||||
char *initial, long ibytes, ov_callbacks callbacks);
|
||||
extern int ov_test_open(OggVorbis_File *vf);
|
||||
|
||||
extern long ov_bitrate(OggVorbis_File *vf,int i);
|
||||
extern long ov_bitrate_instant(OggVorbis_File *vf);
|
||||
extern long ov_streams(OggVorbis_File *vf);
|
||||
extern long ov_seekable(OggVorbis_File *vf);
|
||||
extern long ov_serialnumber(OggVorbis_File *vf,int i);
|
||||
|
||||
extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
|
||||
extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
|
||||
extern double ov_time_total(OggVorbis_File *vf,int i);
|
||||
|
||||
extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_time_seek(OggVorbis_File *vf,double pos);
|
||||
extern int ov_time_seek_page(OggVorbis_File *vf,double pos);
|
||||
|
||||
extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos);
|
||||
extern int ov_time_seek_lap(OggVorbis_File *vf,double pos);
|
||||
extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos);
|
||||
|
||||
extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
|
||||
extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
|
||||
extern double ov_time_tell(OggVorbis_File *vf);
|
||||
|
||||
extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
|
||||
extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
|
||||
|
||||
extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples,
|
||||
int *bitstream);
|
||||
extern long ov_read(OggVorbis_File *vf,char *buffer,int length,
|
||||
int bigendianp,int word,int sgned,int *bitstream);
|
||||
extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2);
|
||||
|
||||
extern int ov_halfrate(OggVorbis_File *vf,int flag);
|
||||
extern int ov_halfrate_p(OggVorbis_File *vf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
|
Binary file not shown.
22
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/Info.plist
vendored
Normal file
22
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/Info.plist
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>vorbis</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.yourcompany.yourcocoaframework</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>vorbis</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
</dict>
|
||||
</plist>
|
BIN
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/vorbis
vendored
Executable file
BIN
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/vorbis
vendored
Executable file
Binary file not shown.
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/Current
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/Current
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
A
|
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/vorbis
vendored
Symbolic link
1
polymer/eduke32/source/jaudiolib/third-party/vorbis.framework/vorbis
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
Versions/Current/vorbis
|
Loading…
Reference in a new issue