Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
diff --git a/util/allegro/sound.cpp b/util/allegro/sound.cpp
index 7a5604fa..974c0b75 100644
--- a/util/allegro/sound.cpp
+++ b/util/allegro/sound.cpp
@@ -1,134 +1,107 @@
#include <allegro.h>
#include <string>
#include "../memory.h"
#include "../sound.h"
#include "configuration.h"
#include "../load_exception.h"
using namespace std;
Sound::Sound():
my_sound(NULL),
own(NULL){
}
Sound::Sound(const char * data, int length):
my_sound(NULL),
own(NULL){
PACKFILE_VTABLE table = Memory::makeTable();
Memory::memory memory((unsigned char *) data, length);
PACKFILE * pack = pack_fopen_vtable(&table, &memory);
my_sound = load_wav_pf(pack);
pack_fclose(pack);
if (!my_sound){
throw LoadException("Could not load wav data");
}
own = new int;
*own = 1;
}
Sound::Sound(const string & path) throw( LoadException ):
my_sound(NULL ),
own(NULL){
my_sound = load_sample( path.c_str() );
if ( !my_sound ){
string xf( "Could not load " );
xf += path;
throw LoadException(xf);
}
own = new int;
*own = 1;
}
-Sound::Sound( const Sound & copy ):
-my_sound( NULL ),
-own( NULL ){
- own = copy.own;
- if ( own ){
- *own += 1;
- }
- my_sound = copy.my_sound;
-}
-
void Sound::destroy(){
if ( own ){
*own -= 1;
if ( *own == 0 ){
delete own;
destroy_sample( my_sound );
own = NULL;
}
}
}
void Sound::initialize(){
/* default for alsa is 8, so reserve a few more */
reserve_voices(16, -1);
/* is calling this function a good idea? */
set_volume_per_voice(0);
// out<<"Install sound: "<<install_sound( DIGI_AUTODETECT, MIDI_NONE, "" )<<endl;
install_sound(DIGI_AUTODETECT, MIDI_NONE, "");
}
-
-Sound & Sound::operator=( const Sound & rhs ){
- if ( own ){
- destroy();
- }
- own = rhs.own;
- if ( own ){
- *own += 1;
- }
- my_sound = rhs.my_sound;
-
- return *this;
-}
void Sound::stop(){
if (my_sound){
stop_sample(my_sound);
}
}
int scaleVolume(int v){
return (int)(v * (int) Configuration::getSoundVolume() / 100.0);
}
void Sound::play(){
if (my_sound){
play_sample(my_sound, scaleVolume(255), 128, 1000, false);
}
}
void Sound::play(int volume, int pan){
if ( my_sound ){
int p = pan;
if ( p > 255 ){
p = 255;
} else if ( p < 0 ){
p = 0;
}
int v = volume;
if (v < 0){
v = 0;
} else if (v > 255){
v = 255;
}
play_sample( my_sound, scaleVolume(v), p, 1000, false );
}
}
void Sound::playLoop(){
if ( my_sound ){
play_sample( my_sound, 255, 128, 1000, true );
}
}
-
-Sound::~Sound(){
- destroy();
-}
diff --git a/util/sdl/sound.cpp b/util/sdl/sound.cpp
index 3b00bd5a..a0d05e2e 100644
--- a/util/sdl/sound.cpp
+++ b/util/sdl/sound.cpp
@@ -1,57 +1,63 @@
#include "../sound.h"
#include <SDL.h>
#include "mixer/SDL_mixer.h"
-Sound::Sound(){
- /* TODO */
+Sound::Sound():
+my_sound(NULL),
+own(NULL){
}
/* create from wav file (riff header + pcm) */
Sound::Sound(const char * data, int length){
/* TODO */
}
/* load from path */
Sound::Sound(const std::string & path) throw (LoadException){
- /* TODO */
-}
-
-Sound::Sound(const Sound & copy){
- /* TODO */
-}
-
-Sound & Sound::operator=( const Sound & rhs ){
- /* TODO */
- return *this;
+ my_sound = (SAMPLE*) Mix_LoadWAV(path.c_str());
+ if (!my_sound){
+ printf("Can't load sound %s\n", path.c_str());
+ // throw LoadException("Could not load sound " + path);
+ }
+ own = new int;
+ *own = 1;
}
void Sound::initialize(){
int audio_rate = 22050;
- Uint16 audio_format = AUDIO_S16;
+ // Uint16 audio_format = AUDIO_S16;
+ Uint16 audio_format = MIX_DEFAULT_FORMAT;
int audio_channels = 2;
int audio_buffers = 4096;
if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) {
- printf("Unable to open audio!\n");
- exit(1);
+ printf("Unable to open audio: %s!\n", Mix_GetError());
+ // exit(1);
}
}
void Sound::play(){
- /* TODO */
+ Mix_PlayChannel(-1, (Mix_Chunk*) my_sound, 0);
}
void Sound::play( int volume, int pan ){
- /* TODO */
+ Mix_PlayChannel(-1, (Mix_Chunk*) my_sound, 0);
}
void Sound::playLoop(){
/* TODO */
}
-void Sound::stop(){
- /* TODO */
+void Sound::destroy(){
+ if ( own ){
+ *own -= 1;
+ if ( *own == 0 ){
+ delete own;
+ Mix_FreeChunk((Mix_Chunk*) my_sound);
+ own = NULL;
+ }
+ }
}
-Sound::~Sound(){
+void Sound::stop(){
/* TODO */
}
diff --git a/util/sound.cpp b/util/sound.cpp
index 6fc2f406..a19577a5 100644
--- a/util/sound.cpp
+++ b/util/sound.cpp
@@ -1,6 +1,34 @@
#ifdef USE_ALLEGRO
#include "allegro/sound.cpp"
#endif
#ifdef USE_SDL
#include "sdl/sound.cpp"
#endif
+
+Sound::Sound( const Sound & copy ):
+my_sound( NULL ),
+own( NULL ){
+ own = copy.own;
+ if ( own ){
+ *own += 1;
+ }
+ my_sound = copy.my_sound;
+}
+
+Sound & Sound::operator=( const Sound & rhs ){
+ if ( own ){
+ destroy();
+ }
+ own = rhs.own;
+ if ( own ){
+ *own += 1;
+ }
+ my_sound = rhs.my_sound;
+
+ return *this;
+}
+
+
+Sound::~Sound(){
+ destroy();
+}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Jun 11, 12:49 PM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
69110
Default Alt Text
(5 KB)

Event Timeline