static void MUSIC_FadeRoutine ( task *Task ) { int volume; MUSIC_CurrentFadeVolume += MUSIC_FadeRate; if ( MUSIC_FadeLength == 0 ) { MIDI_SetVolume( MUSIC_EndingFadeVolume ); TS_Terminate( Task ); MUSIC_FadeTask = NULL; } else { MUSIC_FadeLength--; // if ( ( MUSIC_SoundDevice == GenMidi ) && // ( ( MUSIC_FadeLength % 12 ) != 0 ) ) // { // return; // } volume = MUSIC_CurrentFadeVolume >> 7; if ( MUSIC_LastFadeVolume != volume ) { MUSIC_LastFadeVolume = volume; MIDI_SetVolume( volume ); } } }
// // MusicEvents // Called in the event loop to keep track of MIDI music // void MIDI_Update (void) { if (midiTrack) { // pOx - adjust volume if changed if (old_volume != bgmvolume.value) MIDI_SetVolume (&bgmvolume); // Let QuickTime get some time MoviesTask (midiTrack, 0); // If this song is looping, restart it if (IsMovieDone (midiTrack)) { if (bLooped) { GoToBeginningOfMovie (midiTrack); StartMovie (midiTrack); } else { DisposeMovie (midiTrack); midiTrack = NULL; } } } }
int32_t MUSIC_FadeVolume ( int32_t tovolume, int32_t milliseconds ) { UNREFERENCED_PARAMETER(milliseconds); MIDI_SetVolume(tovolume); return(MUSIC_Ok); }
int MUSIC_FadeVolume ( int tovolume, int milliseconds ) { int fromvolume; MIDI_SetVolume( tovolume ); return( MUSIC_Ok ); }
void MUSIC_SetVolume ( int32_t volume ) { volume = max(0, volume); volume = min(volume, 255); if (MUSIC_SoundDevice != -1) { MIDI_SetVolume(volume); } }
int MUSIC_FadeVolume ( int tovolume, int milliseconds ) { int fromvolume; if ( ( MUSIC_SoundDevice == ProAudioSpectrum ) || ( MUSIC_SoundDevice == SoundMan16 ) || ( MUSIC_SoundDevice == GenMidi ) || ( MUSIC_SoundDevice == SoundScape ) || ( MUSIC_SoundDevice == SoundCanvas ) ) { MIDI_SetVolume( tovolume ); return( MUSIC_Ok ); } if ( MUSIC_FadeTask != NULL ) { MUSIC_StopFade(); } tovolume = max( 0, tovolume ); tovolume = min( 255, tovolume ); fromvolume = MUSIC_GetVolume(); MUSIC_FadeLength = milliseconds / 25; MUSIC_FadeRate = ( ( tovolume - fromvolume ) << 7 ) / MUSIC_FadeLength; MUSIC_LastFadeVolume = fromvolume; MUSIC_CurrentFadeVolume = fromvolume << 7; MUSIC_EndingFadeVolume = tovolume; MUSIC_FadeTask = TS_ScheduleTask( MUSIC_FadeRoutine, 40, 1, NULL ); if ( MUSIC_FadeTask == NULL ) { MUSIC_SetErrorCode( MUSIC_TaskManError ); return( MUSIC_Warning ); } TS_Dispatch(); return( MUSIC_Ok ); }
void MIDI_Play (const char *Name) { FILE *midiFile; char midiName[MAX_OSPATH], tempName[MAX_QPATH]; OSErr err; FSSpec midiSpec; FSRef midiRef; short midiRefNum; if (!bMidiInited) //don't try to play if there is no midi return; MIDI_Stop(); if (!Name || !*Name) { Sys_Printf("no midi music to play\n"); return; } q_snprintf (tempName, sizeof(tempName), "%s.%s", Name, "mid"); FS_OpenFile (va("%s/%s", "midi", tempName), &midiFile, false); if (!midiFile) { Con_Printf("music file %s not found\n", tempName); return; } else { if (file_from_pak) { int ret; Con_Printf("Extracting %s from pakfile\n", tempName); q_snprintf (midiName, sizeof(midiName), "%s/%s.%s", host_parms->userdir, TEMP_MUSICNAME, "mid"); ret = FS_CopyFromFile (midiFile, midiName, fs_filesize); fclose (midiFile); if (ret != 0) { Con_Printf("Error while extracting from pak\n"); return; } } else /* use the file directly */ { fclose (midiFile); q_snprintf (midiName, sizeof(midiName), "%s/%s/%s", fs_filepath, "midi", tempName); } } // converting path to FSSpec. found in CarbonCocoaIntegration.pdf: // page 27, Obtaining an FSSpec Structure err = FSPathMakeRef ((UInt8*)midiName, &midiRef, NULL); if (err != noErr) { Con_Printf ("MIDI: FSPathMakeRef: error while opening %s\n", midiName); return; } err = FSGetCatalogInfo (&midiRef, kFSCatInfoNone, NULL, NULL, &midiSpec, NULL); if (err != noErr) { Con_Printf ("MIDI: FSGetCatalogInfo: error while opening %s\n", midiName); return; } err = OpenMovieFile (&midiSpec, &midiRefNum, fsRdPerm); if (err != noErr) { Con_Printf ("MIDI: OpenMovieStream: error opening midi file\n"); return; } err = NewMovieFromFile (&midiTrack, midiRefNum, NULL, NULL, newMovieActive, NULL); if (err != noErr || !midiTrack) { Con_Printf ("MIDI: QuickTime error in creating stream.\n"); return; } GoToBeginningOfMovie (midiTrack); PrerollMovie (midiTrack, 0, 0); // pOx - set initial volume MIDI_SetVolume (&bgmvolume); StartMovie (midiTrack); Con_Printf ("Started midi music %s\n", tempName); }