static qboolean S_MODPLUG_CodecOpenStream (snd_stream_t *stream) { /* need to load the whole file into memory and pass it to libmodplug */ byte *moddata; long len; int mark; len = FS_filelength (&stream->fh); mark = Hunk_LowMark(); moddata = (byte *) Hunk_Alloc(len); FS_fread(moddata, 1, len, &stream->fh); S_MODPLUG_SetSettings(stream); stream->priv = ModPlug_Load(moddata, len); Hunk_FreeToLowMark(mark); /* free original file data */ if (!stream->priv) { Con_DPrintf("Could not load module %s\n", stream->name); return false; } ModPlug_Seek((ModPlugFile*)stream->priv, 0); #if 0 /* default volume (128) sounds rather low? */ ModPlug_SetMasterVolume((ModPlugFile*)stream->priv, 384); /* 0-512 */ #endif return true; }
ModPlugFile* load_mod_plug(struct sppb_byte_input *input) { ModPlugFile *self_; if (!input->get_length || !input->seek) return NULL; ssize_t len = input->get_length(input); if (len < 0) return NULL; void *data = malloc(len); if (!data) return NULL; if (input->read(input, data, len) != len) { MPSP_EPRINTF("failed to read from input\n"); free(data); return NULL; } self_ = ModPlug_Load(data, len); if (self_) { // The default volume of 127 is lower than the GMES // volume, so set to maximum. ModPlug_SetMasterVolume(self_, 512); } else { MPSP_EPRINTF("failed to load file\n"); } free(data); return self_; }
void sfMod::Mod::SetMasterVolume(unsigned int volume) { ModPlug_SetMasterVolume(file_, volume); }
int modplug_init(SDL_AudioSpec *spec) { ModPlug_GetSettings(&settings); settings.mFlags=MODPLUG_ENABLE_OVERSAMPLING; current_output_channels=spec->channels; settings.mChannels=spec->channels>1?2:1; settings.mBits=spec->format&0xFF; music_swap8 = 0; music_swap16 = 0; switch(spec->format) { case AUDIO_U8: case AUDIO_S8: { if ( spec->format == AUDIO_S8 ) { music_swap8 = 1; } settings.mBits=8; } break; case AUDIO_S16LSB: case AUDIO_S16MSB: { /* See if we need to correct MikMod mixing */ #if SDL_BYTEORDER == SDL_LIL_ENDIAN if ( spec->format == AUDIO_S16MSB ) { #else if ( spec->format == AUDIO_S16LSB ) { #endif music_swap16 = 1; } settings.mBits=16; } break; default: { Mix_SetError("Unknown hardware audio format"); return -1; } } settings.mFrequency=spec->freq; /*TODO: limit to 11025, 22050, or 44100 ? */ settings.mResamplingMode=MODPLUG_RESAMPLE_FIR; settings.mReverbDepth=0; settings.mReverbDelay=100; settings.mBassAmount=0; settings.mBassRange=50; settings.mSurroundDepth=0; settings.mSurroundDelay=10; settings.mLoopCount=0; ModPlug_SetSettings(&settings); return 0; } /* Uninitialize the music players */ void modplug_exit() { } /* Set the volume for a modplug stream */ void modplug_setvolume(modplug_data *music, int volume) { ModPlug_SetMasterVolume(music->file, volume*4); }