static inline VOID M_PauseMusic(VOID) { if (mod && !FMUSIC_GetPaused(mod)) FMUSIC_SetPaused(mod, TRUE); if (fsoundchannel != -1 && FSOUND_IsPlaying(fsoundchannel)) FSOUND_SetPaused(fsoundchannel, TRUE); }
static inline VOID M_StopMusic(VOID) { if (mod) FMUSIC_StopSong(mod); if (fsoundchannel != -1 && fmus && FSOUND_IsPlaying(fsoundchannel)) FSOUND_Stream_Stop(fmus); }
void wsay(char *dafilename, long dafreq, long volume1, long volume2) { unsigned char ch1, ch2; long i, j, bad, free=-1, oldest=0; unsigned int oldestpos=0; int chan; if (fmod_inited == 0) return; i = numwaves-1; do { bad = 0; j = 0; while ((dafilename[j] > 0) && (j < 16)) { ch1 = dafilename[j]; if ((ch1 >= 97) && (ch1 <= 123)) ch1 -= 32; ch2 = instname[i][j]; if ((ch2 >= 97) && (ch2 <= 123)) ch2 -= 32; if (ch1 != ch2) {bad = 1; break;} j++; } if (bad == 0) { #if 0 for (j=0; j<NUMCHANNELS; j++) { if (!FSOUND_IsPlaying(channels[j])) { free = j; break; } if (j==0) continue; if (FSOUND_GetCurrentPosition(channels[j]) > oldestpos) { oldest = j; oldestpos = FSOUND_GetCurrentPosition(channels[j]); } } if (free < 0) { FSOUND_StopSound(channels[oldest]); free = oldest; } chan = FSOUND_PlaySoundEx(FSOUND_FREE, samples[i], NULL, 1); if (chan == -1) return; FSOUND_SetFrequency(chan, dafreq*11025/4096); FSOUND_SetVolume(chan, (volume1*volume2)>>1); // set pan FSOUND_SetPaused(chan, 0); #endif channels[free] = chan; return; } i--; } while (i >= 0); }
bool LLAudioChannelFMOD::isPlaying() { if (!mChannelID) { return false; } return FSOUND_IsPlaying(mChannelID) && (!FSOUND_GetPaused(mChannelID)); }
MUSIKEngine::PlayState FMODStreamOut::GetPlayState() { if( FSOUND_GetPaused(FMODChannel) != 0) return MUSIKEngine::Paused; else if(FSOUND_IsPlaying(FMODChannel)) return MUSIKEngine::Playing; else return MUSIKEngine::Stopped; }
void CAudioManager::PauseAll(){ if(m_bValidAudio == false) return; for(int i = 0; i < m_AudioClip.size(); i++){ if(FSOUND_IsPlaying(m_AudioClip[i].channelPlaying) == true) FSOUND_SetPaused(m_AudioClip[i].channelPlaying, true); } }
EXPORT INT32 HWRAPI (IsPlaying) (INT32 chan) { if (chan < 0) return false; if (!FSOUND_GetCurrentSample(chan)) return false; return FSOUND_IsPlaying(relcheckup(chan)); }
VOID CSoundSourceFMod::UpdateStatus(VOID) { if(_FModChannel!=-1 && IsPlaying()) { //播放完毕 if(!FSOUND_IsPlaying(_FModChannel)) { _State= source_silencing; } } }
int CSound::Loopsound(int soundnum) { for(int i =1;i< int(FSOUND_GetMaxChannels);i++) { if(!FSOUND_IsPlaying(i)) { FSOUND_PlaySound(i,FSOUND_Sample_Get(soundnum)); FSOUND_SetLoopMode(i,FSOUND_LOOP_NORMAL); return i; } } return 0; }
////////////////////////////////////////////////////////////////////////////////// //playsound plays a sound from the sound index. The sounds can only be played after // they have been loaded into the sound index. returns the channel its played on ////////////////////////////////////////////////////////////////////////////////// int CSound::Playsound(int soundnum) { printf("Playing Sound\n"); for(int i =1;i< int(FSOUND_GetMaxChannels);i++) { if(!FSOUND_IsPlaying(i)) { FSOUND_PlaySound(i,FSOUND_Sample_Get(soundnum)); return i; } } return 1; }
void CAudioManager::KillAll(){ if(m_bValidAudio == false) return; for(int i = 0; i < m_AudioClip.size(); i++){ //if(IsPlaying(i) == true){ if(FSOUND_IsPlaying(i)==true){ g_Log.Write("Playing", i); StopSoundClip(i); } else{ g_Log.Write("Stopped", i); } } //FSOUND_StopSound(FSOUND_ALL); //::Sleep(2000); }
bool CAudioManager::IsPlaying(int id){ if(m_bValidAudio == false) return false; FSOUND_SAMPLE *handle; for(int i = 0; i < m_AudioClip.size(); i++){ if(m_AudioClip[i].AudioID == id && m_AudioClip[i].channelPlaying > -1){ if(FSOUND_IsPlaying(m_AudioClip[i].channelPlaying)==true){ return true; } else{ m_AudioClip[i].channelPlaying = -1; return false; } }//if }//for return false; }
void CAudioManager::KillAll(){ if(m_bValidAudio == false) return; for(int i = 0; i < m_AudioClip.size(); i++){ if(FSOUND_IsPlaying(i)==true){ StopSoundClip(i); } else{ } } for(int i = 0; i < m_AudioClip.size(); i++){ StopStream(i); } //FSOUND_StopSound(FSOUND_ALL); //::Sleep(2000); }
void CAudioManager::StopSoundClip(int id){ if(FSOUND_IsPlaying(id)==true) FSOUND_StopSound(id); return; if(m_bValidAudio == false) return; FSOUND_SAMPLE *handle; for(int i = 0; i < m_AudioClip.size(); i++){ if(m_AudioClip[i].AudioID == id){ for(int j=0; j < GetMaxChannels(); j++){ handle = FSOUND_Sample_Get(j); if(handle == m_AudioClip[i].handle){ if(j > -1) FSOUND_StopSound(j - 1); } }//for }//if } }
void CSoundManager::Update(void) { // Sounds durchgehen und updaten // for (int i=0; i<MAX_SOUNDS; i++) if (its_Sounds[i] != NULL) its_Sounds[i]->Update(); // Songs durchgehen und bei Bedarf faden // for (int i=0; i<MAX_SONGS; i++) if (its_Songs[i] != NULL) its_Songs[i]->Update(); // Anzahl benutzter Channels zählen // ChannelsUsed = 0; for (int i=0; i < MaxChannels; i++) if (FSOUND_IsPlaying(i)) ChannelsUsed++; } // Update
int main(int argc, char *argv[]) { FSOUND_SAMPLE *samp1; signed char key; int driver, i, channel, originalfreq; if (FSOUND_GetVersion() < FMOD_VERSION) { printf("Error : You are using the wrong DLL version! You should be using FMOD %.02f\n", FMOD_VERSION); return 0; } /* SELECT OUTPUT METHOD */ printf("---------------------------------------------------------\n"); printf("Output Type\n"); printf("---------------------------------------------------------\n"); #if defined(WIN32) || defined(__CYGWIN32__) || defined(__WATCOMC__) printf("1 - Direct Sound\n"); printf("2 - Windows Multimedia Waveout\n"); printf("3 - NoSound\n"); #elif defined(__linux__) printf("1 - OSS - Open Sound System\n"); printf("2 - ESD - Elightment Sound Daemon\n"); printf("3 - ALSA 0.9 - Advanced Linux Sound Architecture\n"); #endif printf("---------------------------------------------------------\n"); /* print driver names */ printf("Press a corresponding number or ESC to quit\n"); do { key = getch(); } while (key != 27 && key < '1' && key > '4'); switch (key) { #if defined(WIN32) || defined(__CYGWIN32__) || defined(__WATCOMC__) case '1' : FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); break; case '2' : FSOUND_SetOutput(FSOUND_OUTPUT_WINMM); break; case '3' : FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND); break; #elif defined(__linux__) case '1' : FSOUND_SetOutput(FSOUND_OUTPUT_OSS); break; case '2' : FSOUND_SetOutput(FSOUND_OUTPUT_ESD); break; case '3' : FSOUND_SetOutput(FSOUND_OUTPUT_ALSA); break; #endif default : return 0; } /* SELECT OUTPUT DRIVER */ /* The following list are the drivers for the output method selected above. */ printf("---------------------------------------------------------\n"); switch (FSOUND_GetOutput()) { case FSOUND_OUTPUT_NOSOUND: printf("NoSound"); break; case FSOUND_OUTPUT_WINMM: printf("Windows Multimedia Waveout"); break; case FSOUND_OUTPUT_DSOUND: printf("Direct Sound"); break; case FSOUND_OUTPUT_OSS: printf("Open Sound System"); break; case FSOUND_OUTPUT_ESD: printf("Enlightment Sound Daemon"); break; case FSOUND_OUTPUT_ALSA: printf("ALSA"); break; }; printf(" Driver list\n"); printf("---------------------------------------------------------\n"); for (i=0; i < FSOUND_GetNumDrivers(); i++) { printf("%d - %s\n", i+1, FSOUND_GetDriverName(i)); /* print driver names */ } printf("---------------------------------------------------------\n"); /* print driver names */ printf("Press a corresponding number or ESC to quit\n"); do { key = getch(); if (key == 27) { FSOUND_Close(); return 0; } driver = key - '1'; } while (driver < 0 || driver >= FSOUND_GetNumDrivers()); FSOUND_SetDriver(driver); /* Select sound card (0 = default) */ /* SELECT MIXER */ FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT); /* INITIALIZE */ if (!FSOUND_Init(44100, 64, FSOUND_INIT_ACCURATEVULEVELS)) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 0; } /* SELECT INPUT DRIVER (can be done before or after init) */ /* The following list are the drivers for the output method selected above. */ printf("---------------------------------------------------------\n"); switch (FSOUND_GetOutput()) { case FSOUND_OUTPUT_NOSOUND: printf("NoSound"); break; case FSOUND_OUTPUT_WINMM: printf("Windows Multimedia Waveout"); break; case FSOUND_OUTPUT_DSOUND: printf("Direct Sound"); break; case FSOUND_OUTPUT_OSS: printf("Open Sound System"); break; case FSOUND_OUTPUT_ESD: printf("Enlightment Sound Daemon"); break; case FSOUND_OUTPUT_ALSA: printf("ALSA"); break; }; printf(" Recording device driver list\n"); printf("---------------------------------------------------------\n"); for (i=0; i < FSOUND_Record_GetNumDrivers(); i++) { printf("%d - %s\n", i+1, FSOUND_Record_GetDriverName(i)); /* print driver names */ } printf("---------------------------------------------------------\n"); /* print driver names */ printf("Press a corresponding number or ESC to quit\n"); do { key = getch(); if (key == 27) return 0; driver = key - '1'; } while (driver < 0 || driver >= FSOUND_Record_GetNumDrivers()); if (!FSOUND_Record_SetDriver(driver)) /* Select input sound card (0 = default) */ { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 0; } /* DISPLAY HELP */ printf("FSOUND Output Method : "); switch (FSOUND_GetOutput()) { case FSOUND_OUTPUT_NOSOUND: printf("FSOUND_OUTPUT_NOSOUND\n"); break; case FSOUND_OUTPUT_WINMM: printf("FSOUND_OUTPUT_WINMM\n"); break; case FSOUND_OUTPUT_DSOUND: printf("FSOUND_OUTPUT_DSOUND\n"); break; case FSOUND_OUTPUT_OSS: printf("FSOUND_OUTPUT_OSS\n"); break; case FSOUND_OUTPUT_ESD: printf("FSOUND_OUTPUT_ESD\n"); break; case FSOUND_OUTPUT_ALSA: printf("FSOUND_OUTPUT_ALSA\n"); break; }; printf("FSOUND Mixer : "); switch (FSOUND_GetMixer()) { case FSOUND_MIXER_BLENDMODE: printf("FSOUND_MIXER_BLENDMODE\n"); break; case FSOUND_MIXER_MMXP5: printf("FSOUND_MIXER_MMXP5\n"); break; case FSOUND_MIXER_MMXP6: printf("FSOUND_MIXER_MMXP6\n"); break; case FSOUND_MIXER_QUALITY_FPU: printf("FSOUND_MIXER_QUALITY_FPU\n"); break; case FSOUND_MIXER_QUALITY_MMXP5:printf("FSOUND_MIXER_QUALITY_MMXP5\n"); break; case FSOUND_MIXER_QUALITY_MMXP6:printf("FSOUND_MIXER_QUALITY_MMXP6\n"); break; }; printf("FSOUND Driver : %s\n", FSOUND_GetDriverName(FSOUND_GetDriver())); printf("FSOUND Record Driver : %s\n", FSOUND_Record_GetDriverName(FSOUND_Record_GetDriver())); /* RECORD INTO A STATIC SAMPLE */ /* Create a sample to record into */ samp1 = FSOUND_Sample_Alloc(FSOUND_UNMANAGED, RECORDLEN, FSOUND_STEREO | FSOUND_16BITS , RECORDRATE, 255, 128, 255); if (!samp1) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 0; } printf("\n"); printf("=========================================================================\n"); printf("Press a key to start recording 5 seconds worth of data\n"); printf("=========================================================================\n"); getch(); if (!FSOUND_Record_StartSample(samp1, FALSE)) /* it will record into this sample for 5 seconds then stop */ { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 0; } do { printf("Recording position = %d\r", FSOUND_Record_GetPosition()); Sleep(50); } while (FSOUND_Record_GetPosition() < RECORDLEN && !kbhit()); FSOUND_Record_Stop(); /* it already stopped anyway */ printf("\n=========================================================================\n"); printf("Press a key to play back recorded data\n"); printf("=========================================================================\n"); getch(); channel = FSOUND_PlaySound(FSOUND_FREE, samp1); printf("Playing back sound...\n"); do { printf("Playback position = %d\r", FSOUND_GetCurrentPosition(channel)); Sleep(50); } while (FSOUND_IsPlaying(channel) && !kbhit()); if (FSOUND_GetOutput() == FSOUND_OUTPUT_OSS) { FSOUND_Sample_Free(samp1); FSOUND_Close(); return 0; } /* REALTIME FULL DUPLEX RECORD / PLAYBACK! */ printf("\n=========================================================================\n"); printf("Press a key to do some full duplex realtime recording!\n"); printf("(with reverb for mmx users)\n"); printf("=========================================================================\n"); getch(); FSOUND_Sample_SetMode(samp1, FSOUND_LOOP_NORMAL); /* make it a looping sample */ if (!FSOUND_Record_StartSample(samp1, TRUE)) /* start recording and make it loop also */ { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 0; } /* Increase this value if the sound sounds corrupted or the time between recording and hearing the result is longer than it should be.. */ #define RECORD_DELAY_MS 25 #define RECORD_DELAY_SAMPLES (RECORDRATE * RECORD_DELAY_MS / 1000) /* Let the record cursor move forward a little bit first before we try to play it (the position jumps in blocks, so any non 0 value will mean 1 block has been recorded) */ while (!FSOUND_Record_GetPosition()) { Sleep(1); } #ifdef ENABLEREVERB SetupReverb(); #endif channel = FSOUND_PlaySound(FSOUND_FREE, samp1); /* play the sound */ originalfreq = FSOUND_GetFrequency(channel); /* printf("initial delay = %d\n", FSOUND_GetCurrentPosition(channel) - FSOUND_Record_GetPosition()); */ do { int playpos, recordpos, diff; static int oldrecordpos = 0, oldplaypos = 0; playpos = FSOUND_GetCurrentPosition(channel); recordpos = FSOUND_Record_GetPosition(); /* NOTE : As the recording and playback frequencies arent guarranteed to be exactly in sync, we have to adjust the playback frequency to keep the 2 cursors just enough apart not to overlap. (and sound corrupted) This code tries to keep it inside a reasonable size window just behind the record cursor. ie [........|play window|<-delay->|<-Record cursor.............] */ /* Dont do this code if either of the cursors just wrapped */ if (playpos > oldplaypos && recordpos > oldrecordpos) { diff = playpos - recordpos; if (diff > -RECORD_DELAY_SAMPLES) { FSOUND_SetFrequency(channel, originalfreq - 1000); /* slow it down */ } else if (diff < -(RECORD_DELAY_SAMPLES * 2)) { FSOUND_SetFrequency(channel, originalfreq + 1000); /* speed it up */ } else { FSOUND_SetFrequency(channel, originalfreq); } } oldplaypos = playpos; oldrecordpos = recordpos; /* Print some info and a VU meter (vu is smoothed) */ { char vu[19]; float vuval, l, r; static float smoothedvu = 0; FSOUND_GetCurrentLevels(channel, &l, &r); vuval = (l+r) * 0.5f; vuval *= 18.0f; #define VUSPEED 0.2f if (vuval > smoothedvu) { smoothedvu = vuval; } smoothedvu -= VUSPEED; if (smoothedvu < 0) { smoothedvu = 0; } memset(vu, 0, 19); memset(vu, '=', (int)(smoothedvu)); printf("Play=%6d Rec=%6d (gap=%6d, freqchange=%6d hz) VU:%-15s\r", playpos, recordpos, diff, FSOUND_GetFrequency(channel) - originalfreq, vu); } Sleep(10); } while (!kbhit()); getch(); FSOUND_StopSound(channel); FSOUND_Record_Stop(); #ifdef ENABLEREVERB CloseReverb(); #endif /* CLEANUP AND SHUTDOWN */ FSOUND_Sample_Free(samp1); FSOUND_Close(); return 0; }
void CBuilding3::Update(void) { if(m_CurBuilding3State == FALLING) { static bool moveright = false; MoveUp(m_FallingSpeed * g_FrameTime, 0); if(moveright) { MoveRight(10.0f * g_FrameTime, 0); moveright = false; } else { MoveRight(-(10.0f * g_FrameTime), 0); moveright = true; } if((m_TimeEndCollapse - g_time) <= 2.0f) { if(!(FSOUND_IsPlaying(m_pBuildingFallingSFX->m_Channel))) { // Make main weapon sound m_pBuildingFallingSFX->Play3DAudio(60, 10000.0f, 300); CVector3f position; GetPosition(&position, 0); CVector3f velocity(0.0f, 0.0f, 0.0f); m_pBuildingFallingSFX->UpdateSound(position, velocity); } } if((m_TimeEndCollapse - g_time) <= 1.0f) { if(m_Building3Falling) m_Building3Falling->m_UpdateFlag = ONLY_UPDATE; m_CurBuilding3State = EXPLODE; const Sphere* pObjectSphere = GetSphere(); float Building3Radius = pObjectSphere->Radius; m_Building3Explode = g_ParticleManager.ObtainSystem(); CObjFrame TempFrame; TempFrame = *GetFrame(0); TempFrame.MoveUp(Building3Radius * 0.5f); CVector3f Building3Top = *TempFrame.GetPosition(); if(m_Building3Explode) g_ParticleManager.CreateSystem(m_Building3Explode, Building3Top, NULL, g_ParticleManager.BUILDING_EXPLODE, LOD_BOTH); } } else if(m_CurBuilding3State == EXPLODE) { MoveUp(m_FallingSpeed * g_FrameTime, 0); if(moveright) { MoveRight(10.0f * g_FrameTime, 0); moveright = false; } else { MoveRight(-(10.0f * g_FrameTime), 0); moveright = true; } m_RenderObj.m_Material.m_Diffuse.a -= 1.0f * g_FrameTime; m_RenderObj.m_Material.m_Ambient.a -= 1.0f * g_FrameTime; if(g_time >= m_TimeEndCollapse) Die(); } CGameObject::Update(); }
int main() { FSOUND_SAMPLE *samp1; int channel, originalfreq; if (FSOUND_GetVersion() < FMOD_VERSION) { printf("Error : You are using the wrong DLL version! You should be using FMOD %.02f\n", FMOD_VERSION); return 0; } /* INITIALIZE */ if (!FSOUND_Init(44100, 16, FSOUND_INIT_ACCURATEVULEVELS)) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 0; } /* RECORD INTO A STATIC SAMPLE */ /* Create a sample to record into */ samp1 = FSOUND_Sample_Alloc(FSOUND_UNMANAGED, RECORDLEN, FSOUND_STEREO | FSOUND_16BITS , 44100, 255, 128, 255); printf("\n=========================================================================\n"); printf("Press a key to start recording 5 seconds worth of 44khz 16bit data\n"); printf("=========================================================================\n"); getch(); if (!FSOUND_Record_StartSample(samp1, FALSE)) /* it will record into this sample for 5 seconds then stop */ { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 0; } do { printf("\rRecording position = %d", FSOUND_Record_GetPosition()); fflush(stdout); Sleep(50); } while (FSOUND_Record_GetPosition() < RECORDLEN && !kbhit()); FSOUND_Record_Stop(); /* it already stopped anyway */ printf("\n=========================================================================\n"); printf("Press a key to play back recorded data\n"); printf("=========================================================================\n"); getch(); channel = FSOUND_PlaySound(FSOUND_FREE, samp1); printf("Playing back sound...\n"); do { printf("\rPlayback position = %d", FSOUND_GetCurrentPosition(channel)); fflush(stdout); Sleep(50); } while (FSOUND_IsPlaying(channel) && !kbhit()); /* REALTIME FULL DUPLEX RECORD / PLAYBACK! */ printf("\n=========================================================================\n"); printf("Press a key to do some full duplex realtime recording!\n"); printf("=========================================================================\n"); getch(); FSOUND_Sample_SetMode(samp1, FSOUND_LOOP_NORMAL); /* make it a looping sample */ if (!FSOUND_Record_StartSample(samp1, TRUE)) /* start recording and make it loop also */ { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 0; } /* Increase this value if the sound sounds corrupted or the time between recording and hearing the result is longer than it should be.. */ #define RECORD_DELAY_MS 25 #define RECORD_DELAY_SAMPLES (44100 * RECORD_DELAY_MS / 1000) /* Let the record cursor move forward a little bit first before we try to play it (the position jumps in blocks, so any non 0 value will mean 1 block has been recorded) */ while (!FSOUND_Record_GetPosition()) { Sleep(1); } #ifdef ENABLEREVERB SetupReverb(); #endif channel = FSOUND_PlaySound(FSOUND_FREE, samp1); /* play the sound */ originalfreq = FSOUND_GetFrequency(channel); /* printf("initial delay = %d\n", FSOUND_GetCurrentPosition(channel) - FSOUND_Record_GetPosition()); */ do { int playpos, recordpos, diff; static int oldrecordpos = 0, oldplaypos = 0; playpos = FSOUND_GetCurrentPosition(channel); recordpos = FSOUND_Record_GetPosition(); /* NOTE : As the recording and playback frequencies arent guarranteed to be exactly in sync, we have to adjust the playback frequency to keep the 2 cursors just enough apart not to overlap. (and sound corrupted) This code tries to keep it inside a reasonable size window just behind the record cursor. ie [........|play window|<-delay->|<-Record cursor.............] */ /* Dont do this code if either of the cursors just wrapped */ if (playpos > oldplaypos && recordpos > oldrecordpos) { diff = playpos - recordpos; if (diff > -RECORD_DELAY_SAMPLES) { FSOUND_SetFrequency(channel, originalfreq - 1000); /* slow it down */ } else if (diff < -(RECORD_DELAY_SAMPLES * 2)) { FSOUND_SetFrequency(channel, originalfreq + 1000); /* speed it up */ } else { FSOUND_SetFrequency(channel, originalfreq); } } oldplaypos = playpos; oldrecordpos = recordpos; /* Print some info and a VU meter (vu is smoothed) */ { char vu[19]; float vuval, l, r; static float smoothedvu = 0; FSOUND_GetCurrentLevels(channel, &l, &r); vuval = (l+r) * 0.5f; vuval *= 18.0f; #define VUSPEED 0.2f if (vuval > smoothedvu) { smoothedvu = vuval; } smoothedvu -= VUSPEED; if (smoothedvu < 0) { smoothedvu = 0; } memset(vu, 0, 19); memset(vu, '=', (int)(smoothedvu)); printf("\rPlay=%6d Rec=%6d (gap=%6d, freqchange=%6d hz) VU:%-15s", playpos, recordpos, diff, FSOUND_GetFrequency(channel) - originalfreq, vu); fflush(stdout); } Sleep(10); } while (!kbhit()); FSOUND_StopSound(channel); FSOUND_Record_Stop(); #ifdef ENABLEREVERB CloseReverb(); #endif /* CLEANUP AND SHUTDOWN */ FSOUND_Close(); return 0; }
bool CWave::Update() { if (FSOUND_IsPlaying(Channel) == false) { isPlaying = false; FadeMode = FADEMODE_NON; } float vol = (float)FSOUND_GetVolume(Channel); // fading? // switch (FadeMode) { // momentan nicht faden // case FADEMODE_NON: break; // einfaden // case FADEMODE_IN: { // Volume erhöhen // vol += 30.0f SYNC; // maximum? Dann fading anhalten // if (vol > pSoundManager->its_GlobalSoundVolume * 2.55f) { vol = pSoundManager->its_GlobalSoundVolume * 2.55f; FadeMode = FADEMODE_FULL; } // Lautstärke setzen // FSOUND_SetVolume(Channel, (int)vol); } break; // ausfaden // case FADEMODE_OUT: { // Volume verringern // vol -= 30.0f SYNC; // < 0 ? Dann anhalten // if (vol < 0.0f) { FSOUND_StopSound(Channel); isPlaying = false; Channel = -1; FadeMode = FADEMODE_NON; } else FSOUND_SetVolume(Channel, (int)vol); } break; default: break; } return true; } // Update
void wsayfollow(char *dafilename, long dafreq, long davol, long *daxplc, long *dayplc, char followstat) { /* dafilename: filename dafreq: 4096 = Middle C 8192 = +1 8ve davol: 0-256 = volume daxplc: dayplc: followstat: 0 = sound emination origin (fixed) followstat: 1 = pointer to sprite coordinates (dynamic) followstat: 0 = position is fixed in space 1 = position follows an object */ unsigned char ch1, ch2; long i, wavnum, bad, oldest=0, free=-1, ox, oy, x, y, vo; unsigned int oldestpos=0; int chan; if (fmod_inited == 0) return; for (wavnum=numwaves-1;wavnum>=0;wavnum--) { bad = 0; i = 0; while ((dafilename[i] > 0) && (i < 16)) { ch1 = dafilename[i]; if ((ch1 >= 97) && (ch1 <= 123)) ch1 -= 32; ch2 = instname[wavnum][i]; if ((ch2 >= 97) && (ch2 <= 123)) ch2 -= 32; if (ch1 != ch2) {bad = 1; break;} i++; } if (bad != 0) continue; #if 0 for (i=0; i<NUMCHANNELS; i++) { if (!FSOUND_IsPlaying(channels[i])) { free = i; break; } if (i==0) continue; if (FSOUND_GetCurrentPosition(channels[i]) > oldestpos) { oldest = i; oldestpos = FSOUND_GetCurrentPosition(channels[i]); } } if (free < 0) { FSOUND_StopSound(channels[oldest]); free = oldest; } chan = FSOUND_PlaySoundEx(FSOUND_FREE, samples[wavnum], NULL, 1); if (chan == -1) return; FSOUND_SetFrequency(chan, dafreq*11025/4096); FSOUND_SetVolume(chan, davol); FSOUND_SetPaused(chan, 0); #endif channels[free] = chan; return; } }