From 2e61263f87d49d3f1ad3628a49399cb0b26564bc Mon Sep 17 00:00:00 2001 From: skyjake Date: Thu, 1 Dec 2011 22:00:38 +0200 Subject: [PATCH] FMOD: Setting up the Music and CD interfaces --- doomsday/engine/api/sys_audiod_mus.h | 2 +- doomsday/plugins/fmod/include/fmod_cd.h | 13 +++++- doomsday/plugins/fmod/include/fmod_music.h | 10 +++++ doomsday/plugins/fmod/src/fmod_cd.cpp | 46 +++++++++++++++++++--- doomsday/plugins/fmod/src/fmod_music.cpp | 23 ++++++----- doomsday/plugins/winmm/include/dswinmm.h | 2 +- doomsday/plugins/winmm/src/dswinmm.cpp | 2 +- 7 files changed, 78 insertions(+), 20 deletions(-) diff --git a/doomsday/engine/api/sys_audiod_mus.h b/doomsday/engine/api/sys_audiod_mus.h index 70fcd5ca6b..7349db1148 100644 --- a/doomsday/engine/api/sys_audiod_mus.h +++ b/doomsday/engine/api/sys_audiod_mus.h @@ -50,7 +50,7 @@ typedef struct audiointerface_music_generic_s { // Driver interface for playing music. typedef struct audiointerface_music_s { audiointerface_music_generic_t gen; - void* (*SongBuffer) (size_t length); + void* (*SongBuffer) (unsigned int length); int (*Play) (int looped); int (*PlayFile) (const char *filename, int looped); } audiointerface_music_t; diff --git a/doomsday/plugins/fmod/include/fmod_cd.h b/doomsday/plugins/fmod/include/fmod_cd.h index f0d54c3b8e..f6390b9f11 100644 --- a/doomsday/plugins/fmod/include/fmod_cd.h +++ b/doomsday/plugins/fmod/include/fmod_cd.h @@ -24,10 +24,21 @@ #ifndef __FMOD_CD_H__ #define __FMOD_CD_H__ +#include "sys_audiod_mus.h" + #ifdef __cplusplus extern "C" { #endif - + +int DM_CDAudio_Init(void); +void DM_CDAudio_Shutdown(void); +void DM_CDAudio_Update(void); +void DM_CDAudio_Set(int prop, float value); +int DM_CDAudio_Get(int prop, void* value); +int DM_CDAudio_Play(int track, int looped); +void DM_CDAudio_Pause(int pause); +void DM_CDAudio_Stop(void); + #ifdef __cplusplus } #endif diff --git a/doomsday/plugins/fmod/include/fmod_music.h b/doomsday/plugins/fmod/include/fmod_music.h index 76b3697d7b..0a4b41e7ed 100644 --- a/doomsday/plugins/fmod/include/fmod_music.h +++ b/doomsday/plugins/fmod/include/fmod_music.h @@ -24,12 +24,22 @@ #ifndef __DSFMOD_MUS_H__ #define __DSFMOD_MUS_H__ +#include "sys_audiod_mus.h" + #ifdef __cplusplus extern "C" { #endif int DM_Music_Init(void); void DM_Music_Shutdown(void); +void DM_Music_Set(int prop, float value); +int DM_Music_Get(int prop, void* ptr); +void DM_Music_Update(void); +void* DM_Music_SongBuffer(unsigned int length); // buffered play supported +void DM_Music_Stop(void); +int DM_Music_Play(int looped); +void DM_Music_Pause(int setPause); +int DM_Music_PlayFile(const char *filename, int looped); #ifdef __cplusplus } diff --git a/doomsday/plugins/fmod/src/fmod_cd.cpp b/doomsday/plugins/fmod/src/fmod_cd.cpp index ea36c7f902..dfb94e26e7 100644 --- a/doomsday/plugins/fmod/src/fmod_cd.cpp +++ b/doomsday/plugins/fmod/src/fmod_cd.cpp @@ -23,10 +23,44 @@ #include "driver_fmod.h" -// DM_CDAudio_Init -// DM_CDAudio_Update -// DM_CDAudio_Set // DM_CDAudio_Get -// DM_CDAudio_Pause -// DM_CDAudio_Stop -// DM_CDAudio_Play \ No newline at end of file + +int DM_CDAudio_Init(void) +{ + return fmodSystem != 0; +} + +void DM_CDAudio_Shutdown(void) +{ + +} + +void DM_CDAudio_Update(void) +{ + +} + +void DM_CDAudio_Set(int prop, float value) +{ + +} + +int DM_CDAudio_Get(int prop, void* value) +{ + +} + +int DM_CDAudio_Play(int track, int looped) +{ + +} + +void DM_CDAudio_Pause(int pause) +{ + +} + +void DM_CDAudio_Stop(void) +{ + +} diff --git a/doomsday/plugins/fmod/src/fmod_music.cpp b/doomsday/plugins/fmod/src/fmod_music.cpp index 9381d6e92d..d0a64c9ca6 100644 --- a/doomsday/plugins/fmod/src/fmod_music.cpp +++ b/doomsday/plugins/fmod/src/fmod_music.cpp @@ -23,8 +23,6 @@ #include "driver_fmod.h" -// DM_Music_Play - int DM_Music_Init(void) { return fmodSystem != 0; @@ -44,12 +42,14 @@ void DM_Music_Set(int prop, float value) { case MUSIP_VOLUME: { + /* int val = MINMAX_OF(0, (byte) (value * 255 + .5f), 255); // Straighten the volume curve. val <<= 8; // Make it a word. val = (int) (255.9980469 * sqrt(value)); mixer4i(MIX_MIDI, MIX_SET, MIX_VOLUME, val); + */ break; } @@ -65,14 +65,15 @@ int DM_Music_Get(int prop, void* ptr) case MUSIP_ID: if(ptr) { - strcpy((char*) ptr, "Win/Mus"); + strcpy((char*) ptr, "FMOD/Mus"); return true; } break; case MUSIP_PLAYING: + /* if(midiAvail && MIDIStreamer) - return (MIDIStreamer->IsPlaying()? true : false); + return (MIDIStreamer->IsPlaying()? true : false);*/ return false; default: @@ -91,7 +92,7 @@ void DM_Music_Stop(void) { if(midiAvail) { - MIDIStreamer->Stop(); + //MIDIStreamer->Stop(); } } @@ -99,10 +100,8 @@ int DM_Music_Play(int looped) { if(midiAvail) { - MIDIStreamer->Play(looped); return true; } - return false; } @@ -110,16 +109,20 @@ void DM_Music_Pause(int setPause) { if(midiAvail) { - MIDIStreamer->Pause(setPause); } } -void* DM_Music_SongBuffer(size_t length) +void* DM_Music_SongBuffer(unsigned int length) { if(midiAvail) { - return MIDIStreamer->SongBuffer(length); +// return MIDIStreamer->SongBuffer(length); } return NULL; } + +int DM_Music_PlayFile(const char *filename, int looped) +{ + +} diff --git a/doomsday/plugins/winmm/include/dswinmm.h b/doomsday/plugins/winmm/include/dswinmm.h index d5f1c1f707..50689b51bf 100644 --- a/doomsday/plugins/winmm/include/dswinmm.h +++ b/doomsday/plugins/winmm/include/dswinmm.h @@ -71,7 +71,7 @@ void DM_Music_Set(int prop, float value); int DM_Music_Get(int prop, void* ptr); void DM_Music_Pause(int pause); void DM_Music_Stop(void); -void* DM_Music_SongBuffer(size_t length); +void* DM_Music_SongBuffer(unsigned int length); int DM_Music_Play(int looped); // CD Audio interface: diff --git a/doomsday/plugins/winmm/src/dswinmm.cpp b/doomsday/plugins/winmm/src/dswinmm.cpp index 0f5544a504..8371f9f449 100644 --- a/doomsday/plugins/winmm/src/dswinmm.cpp +++ b/doomsday/plugins/winmm/src/dswinmm.cpp @@ -429,7 +429,7 @@ void DM_Music_Pause(int setPause) } } -void* DM_Music_SongBuffer(size_t length) +void* DM_Music_SongBuffer(unsigned int length) { if(midiAvail) {