4
* C Api for soundmodule
6
* $Id: SND_C-api.cpp 14444 2008-04-16 22:40:48Z hos $
8
* ***** BEGIN GPL LICENSE BLOCK *****
10
* This program is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU General Public License
12
* as published by the Free Software Foundation; either version 2
13
* of the License, or (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software Foundation,
22
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
25
* All rights reserved.
27
* The Original Code is: all of this file.
29
* Contributor(s): none yet.
31
* ***** END GPL LICENSE BLOCK *****
38
#include "SND_C-api.h"
39
#include "SND_DeviceManager.h"
40
#include "SND_Scene.h"
43
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
48
void SND_SetDeviceType(int device_type)
50
SND_DeviceManager::SetDeviceType(device_type);
55
SND_AudioDeviceInterfaceHandle SND_GetAudioDevice()
57
SND_IAudioDevice* audiodevice = NULL;
59
SND_DeviceManager::Subscribe();
60
audiodevice = SND_DeviceManager::Instance();
62
if (!audiodevice->IsInitialized())
64
SND_DeviceManager::SetDeviceType(snd_e_dummydevice);
65
audiodevice = SND_DeviceManager::Instance();
68
return (SND_AudioDeviceInterfaceHandle)audiodevice;
73
void SND_ReleaseDevice()
75
SND_DeviceManager::Unsubscribe();
80
int SND_IsPlaybackWanted(SND_SceneHandle scene)
83
bool result = ((SND_Scene*)scene)->IsPlaybackWanted();
91
SND_SceneHandle SND_CreateScene(SND_AudioDeviceInterfaceHandle audiodevice)
93
// initialize sound scene and object
94
SND_Scene* scene = new SND_Scene((SND_IAudioDevice*)audiodevice);
96
return (SND_SceneHandle)scene;
101
void SND_DeleteScene(SND_SceneHandle scene)
104
delete (SND_Scene*)scene;
109
int SND_AddSample(SND_SceneHandle scene,
110
const char* filename,
116
int buffer = ((SND_Scene*)scene)->LoadSample(filename, memlocation, size);
123
void SND_RemoveAllSamples(SND_SceneHandle scene)
126
((SND_Scene*)scene)->RemoveAllSamples();
131
int SND_CheckBuffer(SND_SceneHandle scene, SND_ObjectHandle object)
135
int result = (int)((SND_Scene*)scene)->CheckBuffer((SND_SoundObject*)object);
142
void SND_AddSound(SND_SceneHandle scene, SND_ObjectHandle object)
146
((SND_Scene*)scene)->AddObject((SND_SoundObject *)object);
151
void SND_RemoveSound(SND_SceneHandle scene, SND_ObjectHandle object)
155
((SND_Scene*)scene)->DeleteObject((SND_SoundObject *)object);
160
void SND_RemoveAllSounds(SND_SceneHandle scene)
163
((SND_Scene*)scene)->RemoveAllObjects();
168
void SND_StopAllSounds(SND_SceneHandle scene)
171
((SND_Scene*)scene)->StopAllObjects();
176
void SND_Proceed(SND_AudioDeviceInterfaceHandle audiodevice, SND_SceneHandle scene)
179
((SND_Scene*)scene)->Proceed();
180
((SND_IAudioDevice*)audiodevice)->NextFrame();
185
SND_ListenerHandle SND_GetListener(SND_SceneHandle scene)
188
return (SND_ListenerHandle)((SND_Scene*)scene)->GetListener();
193
void SND_SetListenerGain(SND_SceneHandle scene, double gain)
196
SND_SoundListener* listener = ((SND_Scene*)scene)->GetListener();
197
listener->SetGain((MT_Scalar)gain);
202
void SND_SetDopplerFactor(SND_SceneHandle scene, double dopplerfactor)
205
SND_SoundListener* listener = ((SND_Scene*)scene)->GetListener();
206
listener->SetDopplerFactor(dopplerfactor);
211
void SND_SetDopplerVelocity(SND_SceneHandle scene, double dopplervelocity)
214
SND_SoundListener* listener = ((SND_Scene*)scene)->GetListener();
215
listener->SetDopplerVelocity(dopplervelocity);
220
// Object instantiation
221
SND_ObjectHandle SND_CreateSound()
223
return (SND_ObjectHandle)new SND_SoundObject();
228
void SND_DeleteSound(SND_ObjectHandle object)
231
delete (SND_SoundObject*)object;
237
void SND_StartSound(SND_SceneHandle scene, SND_ObjectHandle object)
241
((SND_Scene*)scene)->AddActiveObject((SND_SoundObject*)object, 0);
246
void SND_StopSound(SND_SceneHandle scene, SND_ObjectHandle object)
250
((SND_Scene*)scene)->RemoveActiveObject((SND_SoundObject*)object);
255
void SND_PauseSound(SND_SceneHandle scene, SND_ObjectHandle object)
259
((SND_Scene*)scene)->RemoveActiveObject((SND_SoundObject*)object);
264
void SND_SetSampleName(SND_ObjectHandle object, char* samplename)
267
STR_String name = samplename;
268
((SND_SoundObject*)object)->SetSampleName(name);
273
void SND_SetGain(SND_ObjectHandle object, double gain)
276
((SND_SoundObject*)object)->SetGain(gain);
281
void SND_SetMinimumGain(SND_ObjectHandle object, double minimumgain)
284
((SND_SoundObject*)object)->SetMinGain(minimumgain);
289
void SND_SetMaximumGain(SND_ObjectHandle object, double maximumgain)
292
((SND_SoundObject*)object)->SetMaxGain(maximumgain);
297
void SND_SetRollOffFactor(SND_ObjectHandle object, double rollofffactor)
300
((SND_SoundObject*)object)->SetRollOffFactor(rollofffactor);
305
void SND_SetReferenceDistance(SND_ObjectHandle object, double referencedistance)
308
((SND_SoundObject*)object)->SetReferenceDistance(referencedistance);
313
void SND_SetPitch(SND_ObjectHandle object, double pitch)
316
((SND_SoundObject*)object)->SetPitch(pitch);
321
void SND_SetPosition(SND_ObjectHandle object, double* position)
324
((SND_SoundObject*)object)->SetPosition(position);
329
void SND_SetVelocity(SND_ObjectHandle object, double* velocity)
332
((SND_SoundObject*)object)->SetVelocity(velocity);
337
void SND_SetOrientation(SND_ObjectHandle object, double* orientation)
340
((SND_SoundObject*)object)->SetOrientation(orientation);
345
void SND_SetLoopMode(SND_ObjectHandle object, int loopmode)
348
((SND_SoundObject*)object)->SetLoopMode(loopmode);
353
void SND_SetLoopPoints(SND_ObjectHandle object, unsigned int loopstart, unsigned int loopend)
356
((SND_SoundObject*)object)->SetLoopStart(loopstart);
357
((SND_SoundObject*)object)->SetLoopEnd(loopend);
362
float SND_GetGain(SND_ObjectHandle object)
365
MT_Scalar gain = ((SND_SoundObject*)object)->GetGain();
371
float SND_GetPitch(SND_ObjectHandle object)
374
MT_Scalar pitch = ((SND_SoundObject*)object)->GetPitch();
375
return (float) pitch;
380
int SND_GetLoopMode(SND_ObjectHandle object)
383
return ((SND_SoundObject*)object)->GetLoopMode();
388
int SND_GetPlaystate(SND_ObjectHandle object)
391
return ((SND_SoundObject*)object)->GetPlaystate();