//=========================================================================== // DM_FModInit //=========================================================================== int DM_FModInit(void) { if(inited) return true; if(FSOUND_GetVersion() < FMOD_VERSION) { Con_Message ("DM_FModInit: You are using the wrong version of FMOD.DLL!\n" " You should be using version %.02f.\n", FMOD_VERSION); return false; } if(!FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND)) { Con_Message("DM_FModInit: Can't use DirectSound.\n"); if(!FSOUND_SetOutput(FSOUND_OUTPUT_WINMM)) { Con_Message("DM_FModInit: Can't use WINMM!! Aborting...\n"); return false; } } if(!FSOUND_Init(44100, 16, 0)) { Con_Message("DM_FModInit: Init failed. (%s)\n", FMOD_ErrorString(FSOUND_GetError())); return false; } ext_inited = false; return inited = true; }
VOID CSoundSystemFMod::Initial(LPCTSTR szSndPath, LPCTSTR szDBCFile) { assert(szSndPath); assert(szDBCFile); if (FSOUND_GetVersion() < FMOD_VERSION) { throw("FMOD: You are using the wrong DLL version! Should be %.2f", FMOD_VERSION); } FSOUND_SetOutput(FSOUND_OUTPUT_WINMM); FSOUND_SetDriver(0); FSOUND_SetMixer(FSOUND_MIXER_AUTODETECT); FSOUND_3D_SetRolloffFactor(0); if(!FSOUND_Init(44100, 32, 0)) { throw("Failed to create the FMod driver object"); } m_strSoundPath = szSndPath; m_strSndDBCFile = szDBCFile; //查询资源定义 static DBC::DBCFile fileSnd(0); BOOL fileOpened = fileSnd.OpenFromTXT(m_strSndDBCFile.c_str()); if (!fileOpened) { throw("Failed to open config file!"); } INT nLineNum = (INT)fileSnd.GetRecordsNum(); for(INT i=0; i<nLineNum; i++) { const _DBC_SOUND_INFO* pDefine = (const _DBC_SOUND_INFO*)fileSnd.Search_Posistion(i, 0); if(!pDefine) continue; SOUND_BUFFER newSound; newSound.pDefine = pDefine; newSound.pSoundBuf = NULL; //加入列表 m_listSoundBuffer.push_back(newSound); //加入索引 m_mapSoundID[pDefine->nID] = &(m_listSoundBuffer.back()); m_mapSoundFile[pDefine->pSoundFile] = &(m_listSoundBuffer.back()); } }
static inline BOOL M_InitMusic(VOID) { if (FSOUND_GetVersion() < FMOD_VERSION) { printf("Error : You are using the wrong DLL version!\nYou should be using FMOD %.02f\n", FMOD_VERSION); return FALSE; } #ifdef _DEBUG FSOUND_SetOutput(FSOUND_OUTPUT_WINMM); #endif if (!FSOUND_Init(44100, 1, FSOUND_INIT_GLOBALFOCUS)) { printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return FALSE; } return TRUE; }
int CSound::Initialise(int rate,int channels,int svol,int mvol) { if((channels > 16) || (channels < 0)) { return 1; } FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); FSOUND_Init(rate,channels,FSOUND_INIT_USEDEFAULTMIDISYNTH); songname = "Empty"; SetSoundVolume(svol); SetMusicVolume(mvol); CurrentSong = NULL; CurrentSound = 0; pan = 127; freq = 11250; FSOUND_Sample_Load(0,"sfx/click.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(1,"sfx/dong.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(3,"sfx/computer.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(4,"sfx/scitech.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(5,"sfx/speed.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(6,"sfx/placetrack.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(7,"sfx/removetrack.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(8, "sfx/click3.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(9, "sfx/pickuptrack.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(10, "sfx/cartexplode.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(11, "sfx/cart-good.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(12, "sfx/pickup.wav",FSOUND_LOOP_OFF,0); FSOUND_Sample_Load(13, "sfx/crusher.wav",FSOUND_LOOP_OFF, 0); return 0; }
bool CSoundManager::InitFMOD(SOUNDMANAGER_PARAMETERS smpp) { Protokoll.WriteText ("Initializing FMOD\n", false); FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); // Output-Mode setzen FSOUND_SetDriver(0); // Default-Soundkarte setzen FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT); // Mixer-Quality setzen InitSuccessfull = (TRUE == FSOUND_Init(smpp.Mixrate, smpp.MaxSoftwareChannels, smpp.Flags)); if (false == InitSuccessfull) { Protokoll.WriteText ("\n->", false); Protokoll.WriteText (GetFMODErrorString(FSOUND_GetError()), false); return false; } MaxChannels = FSOUND_GetMaxChannels(); Protokoll.WriteText ("Successfull\n", false); return true; } // InitFMOD
/* [ [DESCRIPTION] [PARAMETERS] [RETURN_VALUE] [REMARKS] [SEE_ALSO] ] */ int main(int argc, char *argv[]) { FSOUND_STREAM *stream; int read_percent = 0, i, driver = 0, channel = -1, status = 0, openstate, bitrate; unsigned int flags; char s[256] = ""; char key; if (FSOUND_GetVersion() < FMOD_VERSION) { printf("Error : You are using the wrong DLL version! You should be using FMOD %.02f\n", FMOD_VERSION); return 1; } if ((argc < 2) || (strnicmp(argv[1], "http:", 5))) { printf("-------------------------------------------------------------\n"); printf("FMOD netstream example.\n"); printf("Copyright (c) Firelight Technologies Pty, Ltd, 1999-2004.\n"); printf("-------------------------------------------------------------\n"); printf("Syntax: netstream <url>\n"); printf("Example: netstream http://www.fmod.org/stream.mp3\n\n"); return 1; } #if defined(WIN32) || defined(_WIN64) || defined(__CYGWIN32__) || defined(__WATCOMC__) FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); #elif defined(__linux__) FSOUND_SetOutput(FSOUND_OUTPUT_OSS); #endif // ========================================================================================== // SELECT DRIVER // ========================================================================================== 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_A3D: printf("A3D"); break; case FSOUND_OUTPUT_OSS: printf("Open Sound System"); break; case FSOUND_OUTPUT_ESD: printf("Enlightenment 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)); } printf("---------------------------------------------------------\n"); printf("Press a corresponding number or ESC to quit\n"); do { key = getch(); if (key == 27) exit(0); driver = key - '1'; } while (driver < 0 || driver >= FSOUND_GetNumDrivers()); FSOUND_SetDriver(driver); // ========================================================================================== // INITIALIZE // ========================================================================================== if (!FSOUND_Init(44100, 32, 0)) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 1; } /* Internet streams can work with a much smaller stream buffer than normal streams because they use another level of buffering on top of the stream buffer. */ FSOUND_Stream_SetBufferSize(100); /* Here's where we set the size of the network buffer and some buffering parameters. In this case we want a network buffer of 64k, we want it to prebuffer 60% of that when we first connect, and we want it to rebuffer 80% of that whenever we encounter a buffer underrun. */ FSOUND_Stream_Net_SetBufferProperties(64000, 60, 80); /* Open the stream using FSOUND_NONBLOCKING because the connect/buffer process might take a long time */ stream = FSOUND_Stream_Open(argv[1], FSOUND_NORMAL | FSOUND_NONBLOCKING, 0, 0); if (!stream) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 1; } printf("\nPress ESC to quit...\n\n"); key = 0; do { if (kbhit()) { key = getch(); } /* Play the stream if it's not already playing */ if (channel < 0) { channel = FSOUND_Stream_PlayEx(FSOUND_FREE, stream, NULL, TRUE); FSOUND_SetPaused(channel, FALSE); if (channel != -1) { FSOUND_Stream_Net_SetMetadataCallback(stream, metacallback, 0); } } openstate = FSOUND_Stream_GetOpenState(stream); if ((openstate == -1) || (openstate == -3)) { printf("\nERROR: failed to open stream!\n"); printf("SERVER: %s\n", FSOUND_Stream_Net_GetLastServerStatus()); break; } FSOUND_Stream_Net_GetStatus(stream, &status, &read_percent, &bitrate, &flags); /* Show how much of the net buffer is used and what the status is */ if (metanum) { printf("%s - %s\n", artist, title); metanum = 0; } s[0] = 0; strncat(s, bar, (read_percent >> 1) + (read_percent & 1)); strncat(s, nobar, (100 - read_percent) >> 1); printf("|%s| %d%% %s\r", s, read_percent, status_str[status]); Sleep(16); } while (key != 27); printf("\n"); FSOUND_Stream_Close(stream); FSOUND_Close(); return 0; }
bool LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata) { LLAudioEngine::init(num_channels, userdata); // Reserve one extra channel for the http stream. if (!FSOUND_SetMinHardwareChannels(num_channels + 1)) { LL_WARNS("AppInit") << "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() initializing FMOD" << LL_ENDL; F32 version = FSOUND_GetVersion(); if (version < FMOD_VERSION) { LL_WARNS("AppInit") << "Error : You are using the wrong FMOD version (" << version << ")! You should be using FMOD " << FMOD_VERSION << LL_ENDL; //return false; } U32 fmod_flags = 0x0; #if LL_WINDOWS // Windows needs to know which window is frontmost. // This must be called before FSOUND_Init() per the FMOD docs. // This could be used to let FMOD handle muting when we lose focus, // but we don't actually want to do that because we want to distinguish // between minimized and not-focused states. if (!FSOUND_SetHWND(userdata)) { LL_WARNS("AppInit") << "Error setting FMOD window: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; return false; } // Play audio when we don't have focus. // (For example, IM client on top of us.) // This means we also try to play audio when minimized, // so we manually handle muting in that case. JC fmod_flags |= FSOUND_INIT_GLOBALFOCUS; fmod_flags |= FSOUND_INIT_DSOUND_HRTF_FULL; #endif #if LL_LINUX // initialize the FMOD engine // This is a hack to use only FMOD's basic FPU mixer // when the LL_VALGRIND environmental variable is set, // otherwise valgrind will fall over on FMOD's MMX detection if (getenv("LL_VALGRIND")) /*Flawfinder: ignore*/ { LL_INFOS("AppInit") << "Pacifying valgrind in FMOD init." << LL_ENDL; FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU); } // If we don't set an output method, Linux FMOD always // decides on OSS and fails otherwise. So we'll manually // try ESD, then OSS, then ALSA. // Why this order? See SL-13250, but in short, OSS emulated // on top of ALSA is ironically more reliable than raw ALSA. // Ack, and ESD has more reliable failure modes - but has worse // latency - than all of them, so wins for now. bool audio_ok = false; if (!audio_ok) { if (NULL == getenv("LL_BAD_FMOD_ESD")) /*Flawfinder: ignore*/ { LL_DEBUGS("AppInit") << "Trying ESD audio output..." << LL_ENDL; if(FSOUND_SetOutput(FSOUND_OUTPUT_ESD) && FSOUND_Init(44100, num_channels, fmod_flags)) { LL_DEBUGS("AppInit") << "ESD audio output initialized OKAY" << LL_ENDL; audio_ok = true; } else { LL_WARNS("AppInit") << "ESD audio output FAILED to initialize: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } } else { LL_DEBUGS("AppInit") << "ESD audio output SKIPPED" << LL_ENDL; } } if (!audio_ok) { if (NULL == getenv("LL_BAD_FMOD_OSS")) /*Flawfinder: ignore*/ { LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL; if(FSOUND_SetOutput(FSOUND_OUTPUT_OSS) && FSOUND_Init(44100, num_channels, fmod_flags)) { LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL; audio_ok = true; } else { LL_WARNS("AppInit") << "OSS audio output FAILED to initialize: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } } else { LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL; } } if (!audio_ok) { if (NULL == getenv("LL_BAD_FMOD_ALSA")) /*Flawfinder: ignore*/ { LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL; if(FSOUND_SetOutput(FSOUND_OUTPUT_ALSA) && FSOUND_Init(44100, num_channels, fmod_flags)) { LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL; audio_ok = true; } else { LL_WARNS("AppInit") << "ALSA audio output FAILED to initialize: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; } } else { LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL; } } if (!audio_ok) { LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL; return false; } // On Linux, FMOD causes a SIGPIPE for some netstream error // conditions (an FMOD bug); ignore SIGPIPE so it doesn't crash us. // NOW FIXED in FMOD 3.x since 2006-10-01. //signal(SIGPIPE, SIG_IGN); // We're interested in logging which output method we // ended up with, for QA purposes. switch (FSOUND_GetOutput()) { case FSOUND_OUTPUT_NOSOUND: LL_DEBUGS("AppInit") << "Audio output: NoSound" << LL_ENDL; break; case FSOUND_OUTPUT_OSS: LL_DEBUGS("AppInit") << "Audio output: OSS" << LL_ENDL; break; case FSOUND_OUTPUT_ESD: LL_DEBUGS("AppInit") << "Audio output: ESD" << LL_ENDL; break; case FSOUND_OUTPUT_ALSA: LL_DEBUGS("AppInit") << "Audio output: ALSA" << LL_ENDL; break; default: LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break; }; #else // LL_LINUX // initialize the FMOD engine if (!FSOUND_Init(44100, num_channels, fmod_flags)) { LL_WARNS("AppInit") << "Error initializing FMOD: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL; return false; } #endif // set up our favourite FMOD-native streaming audio implementation if none has already been added if (!getStreamingAudioImpl()) // no existing implementation added setStreamingAudioImpl(new LLStreamingAudio_FMOD()); LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << LL_ENDL; mInited = true; return true; }
int CMusikPlayer::InitializeFMOD( int nFunction ) { if ( ( nFunction == FMOD_INIT_RESTART ) || ( nFunction == FMOD_INIT_STOP ) ) Shutdown( false ); FSOUND_Close(); //---------------------// //--- setup driver ---// //---------------------// if ( ( nFunction == FMOD_INIT_START ) || ( nFunction == FMOD_INIT_RESTART ) ) { //-----------------// //--- windows ---// //-----------------// #if defined(__WXMSW__) if ( wxGetApp().Prefs.nSndOutput == 0 ) { if( FSOUND_SetOutput( FSOUND_OUTPUT_DSOUND ) == FALSE ) return FMOD_INIT_ERROR_DSOUND; } else if ( wxGetApp().Prefs.nSndOutput == 1 ) { if ( FSOUND_SetOutput( FSOUND_OUTPUT_WINMM ) == FALSE ) return FMOD_INIT_ERROR_WINDOWS_WAVEFORM; } else if ( wxGetApp().Prefs.nSndOutput == 2 ) { if ( FSOUND_SetOutput( FSOUND_OUTPUT_ASIO ) == FALSE ) return FMOD_INIT_ERROR_ASIO; } //-----------------// //--- linux ---// //-----------------// #elif defined (__WXGTK__) if ( wxGetApp().Prefs.nSndOutput == 0 ) { if( FSOUND_SetOutput( FSOUND_OUTPUT_OSS ) == FALSE ) return FMOD_INIT_ERROR_OSS; } else if ( wxGetApp().Prefs.nSndOutput == 1 ) { if ( FSOUND_SetOutput( FSOUND_OUTPUT_ESD ) == FALSE ) return FMOD_INIT_ERROR_ESD; } else if ( wxGetApp().Prefs.nSndOutput == 2 ) { if ( FSOUND_SetOutput( FSOUND_OUTPUT_ALSA ) == FALSE ) return FMOD_INIT_ERROR_ALSA; } #elif defined (__WXMAC__) if( FSOUND_SetOutput( FSOUND_OUTPUT_MAC ) == FALSE ) return FMOD_INIT_ERROR_MAC; #endif if(wxGetApp().Prefs.nSndDevice > 0) { //---------------------// //--- setup device ---// //---------------------// if ( FSOUND_SetDriver( wxGetApp().Prefs.nSndDevice ) == FALSE ) return FMOD_INIT_ERROR_DEVICE_NOT_READY; } // initialize system #ifdef __WXMAC__ FSOUND_SetBufferSize( 1000 ); #else FSOUND_SetBufferSize( 100 ); #endif InitFMOD_NetBuffer(); InitFMOD_ProxyServer(); if ( FSOUND_Init( wxGetApp().Prefs.nSndRate , wxGetApp().Prefs.nSndMaxChan, 0 ) == FALSE ) return FMOD_INIT_ERROR_INIT; // wxGetApp().Prefs.nSndOutput = FSOUND_GetOutput(); } return FMOD_INIT_SUCCESS; }
/* [ [DESCRIPTION] [PARAMETERS] [RETURN_VALUE] [REMARKS] [SEE_ALSO] ] */ int main() { FSOUND_STREAM *stream; FSOUND_DSPUNIT *dsp1,*dsp2; char key; if (FSOUND_GetVersion() < FMOD_VERSION) { printf("Error : You are using the wrong DLL version! You should be using FMOD %.02f\n", FMOD_VERSION); return 1; } printf("-------------------------------------------------------------\n"); printf("FSOUND Streamer example.\n"); printf("Copyright (c) Firelight Technologies Pty, Ltd, 2001-2004.\n"); printf("-------------------------------------------------------------\n"); printf("---------------------------------------------------------\n"); printf("Output Type\n"); printf("---------------------------------------------------------\n"); #if defined(WIN32) || defined(_WIN64) || defined(__CYGWIN32__) || defined(__WATCOMC__) printf("1 - Direct Sound\n"); printf("2 - Windows Multimedia Waveout\n"); printf("3 - ASIO\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("4 - NoSound\n"); 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(_WIN64) || 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_ASIO); 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 case '4' : FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND); break; default : exit(0); } // ========================================================================================== // SELECT DRIVER // ========================================================================================== { int i,driver=0; char key; // 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_ASIO: printf("ASIO"); 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) exit(0); driver = key - '1'; } while (driver < 0 || driver >= FSOUND_GetNumDrivers()); FSOUND_SetDriver(driver); // Select sound card (0 = default) } // ========================================================================================== // INITIALIZE // ========================================================================================== if (!FSOUND_Init(44100, 16, 0)) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 1; } // ========================================================================================== // CREATE USER STREAM // ========================================================================================== stream = FSOUND_Stream_Create(streamcallback, 6*2048, FSOUND_NORMAL | FSOUND_16BITS | FSOUND_STEREO, 44100, (void *)12345); if (!stream) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 1; } FSOUND_Stream_SetEndCallback(stream, endcallback, 0); dsp1 = FSOUND_Stream_CreateDSP(stream, dspcallback, 0, 0); // priority 0 = it comes first in dsp chain. dsp2 = FSOUND_Stream_CreateDSP(stream, dspcallback, 1, 0); // priority 1 = it comes last printf("Press any key to quit\n"); printf("=========================================================================\n"); printf("Playing stream...\n"); // ========================================================================================== // PLAY STREAM // ========================================================================================== if (FSOUND_Stream_Play(FSOUND_FREE, stream) == -1) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 1; } printf("******* Hit a key to active stream DSP unit #1 to halve the stream volume.\n"); getch(); FSOUND_DSP_SetActive(dsp1, 1); printf("******* Now hit a key to active stream DSP unit #2 to quarter the stream volume.\n"); getch(); FSOUND_DSP_SetActive(dsp2, 1); printf("******* How hit a key to finish.\n"); getch(); printf("\n"); FSOUND_DSP_Free(dsp1); FSOUND_DSP_Free(dsp2); FSOUND_Stream_Close(stream); FSOUND_Close(); return 0; }
//Chamada do main int main(void) { //Inicia o som FSOUND_SAMPLE *samp1 = 0; //cria um ponteiro para armazenar o som em memória if (FSOUND_GetVersion() < FMOD_VERSION) // verificação da versão do fmod caso a versão do FSOUND for menor que a do FMOD retorna uma menssagem de erro { printf("Error : You are using the wrong DLL version! You should be using FMOD %.02f\n", FMOD_VERSION); return 1; } // Seleciona a saída de audio FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); // Seleção do driver FSOUND_GetOutput(); // indentifica o tipo de saida FSOUND_GetMixer(); // indentifica o mixer FSOUND_SetDriver(0); // seta o driver de som que vai ser usado // Inicializando o FMOD if (!FSOUND_Init(44100, 32, FSOUND_INIT_GLOBALFOCUS)) // se o valor do FSOUND_Init for 0 execute o tratamento de erro { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 1; } // Carrengando o Sample // PCM,44,100 Hz, 32 Bit, Mono ou uma mp3 ou outros formatos suportados pelo fmod samp1 = FSOUND_Sample_Load(FSOUND_UNMANAGED, "topgear.ogg", FSOUND_NORMAL | FSOUND_HW2D, 0, 0); if (!samp1) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); return 1; } // Aqui fala qual maneira o sample ira tocar caso falhe excute o tratamento de erro if(!FSOUND_Sample_SetMode(samp1, FSOUND_LOOP_NORMAL))// o loop normal toca a musica continuamente ate o programa fechar { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); } // Aqui sera tocado o sample ,caso falhe, execute o tratamento de erro if(!FSOUND_PlaySound(FSOUND_FREE, samp1)) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); } //Fim do codigo do som \\o \o/ o//\o/ //Sleep(10000); // executa o som durante 10 segundos (Essa funcao esta desativada no Street Frog) printf ("Jogo desenvolvido como Projeto Final para a Disciplina de Computacao Grafica"); printf ("\nUFRN - CT - DCA"); printf ("\nPor Claudio Henrique | Paulo Bruno | Thaisa Ramos"); //printf ("\n"); //E por fim a chamada para o OpenGL glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB); //Modo para nao exibir rastros na tela glutInitWindowSize (890, 550); //Tamanho da janela glutInitWindowPosition (50, 50); //Localizacao inicial da janela glutCreateWindow("Ajude o menino a chegar em casa"); //Nome da janela glutKeyboardFunc(Teclado); //Chama as funcoes do teclado glutSpecialFunc(Mover); //Chama as funcoes especias do teclado (setas de movimento) Inicializa(); iniciaText(); glutDisplayFunc(Desenha); //Chama o desenho glutReshapeFunc(AlteraTamanhoJanela); //Correcao de largura e altura para a janela glutTimerFunc(10,movimentar,1); //Chamada de movimento do carro glutTimerFunc(10,movimentacarro,1); //Chamada de movimento do carro glutTimerFunc(10,movimentacarro2,1); //Chamada de movimento do carro glutTimerFunc(10,movermad,1); //Chamada de movimento da madeira glutTimerFunc(10,movermad1,1); //Chamada de movimento da madeira glutTimerFunc(10,movermad2,1); //Chamada de movimento da madeira glutMouseFunc(GerenciaMouse); //Ativa o botao direito glutMainLoop(); //Final das funcoes do OpenGL // limpando a memoria e fechando o fmod (Som) FSOUND_Sample_Free(samp1); // limpa a memoria ultilizada pelo ponteiro do sample FSOUND_Close(); // encerra a API FMOD }
/* [ [DESCRIPTION] main entry point into streamer example. [PARAMETERS] 'argc' Number of command line parameters. 'argv' Parameter list [RETURN_VALUE] void [REMARKS] [SEE_ALSO] ] */ int main(int argc, char *argv[]) { FSOUND_STREAM *stream; FSOUND_SAMPLE *sptr; char key; if (FSOUND_GetVersion() < FMOD_VERSION) { printf("Error : You are using the wrong DLL version! You should be using FMOD %.02f\n", FMOD_VERSION); return 1; } if (argc < 2) { printf("-------------------------------------------------------------\n"); printf("FMOD Streamer example.\n"); printf("Copyright (c) Firelight Technologies Pty, Ltd, 1999-2004.\n"); printf("-------------------------------------------------------------\n"); printf("Syntax: stream infile.[mp2 mp3 wav ogg wma asf]\n\n"); return 1; } #if defined(WIN32) || defined(_WIN64) || defined(__CYGWIN32__) || defined(__WATCOMC__) FSOUND_SetOutput(FSOUND_OUTPUT_WINMM); #elif defined(__linux__) FSOUND_SetOutput(FSOUND_OUTPUT_OSS); #endif // Set custom file callbacks? This doesnt have to be done, its just here as an example. FSOUND_File_SetCallbacks(myopen, myclose, myread, myseek, mytell); // ========================================================================================== // SELECT DRIVER // ========================================================================================== { long i,driver=0; char key; // 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_A3D: printf("A3D"); break; case FSOUND_OUTPUT_OSS: printf("Open Sound System"); break; case FSOUND_OUTPUT_ESD: printf("Enlightenment 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) exit(0); driver = key - '1'; } while (driver < 0 || driver >= FSOUND_GetNumDrivers()); FSOUND_SetDriver(driver); // Select sound card (0 = default) } // ========================================================================================== // INITIALIZE // ========================================================================================== if (!FSOUND_Init(44100, 32, 0)) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 1; } FSOUND_Stream_SetBufferSize(1000); // ========================================================================================== // OPEN STREAM (use #if 1 for streaming from memory) // ========================================================================================== #if 0 { FILE *fp; int length; char *data; fp = fopen(argv[1], "rb"); if (!fp) { printf("Error!\n"); printf("File Not Found\n"); FSOUND_Close(); return 1; } fseek(fp, 0, SEEK_END); length = ftell(fp); fseek(fp, 0, SEEK_SET); data = (char *)malloc(length); fread(data, length, 1, fp); fclose(fp); stream = FSOUND_Stream_Open(data, FSOUND_NORMAL | FSOUND_MPEGACCURATE | FSOUND_LOADMEMORY, 0, length); // The memory pointer MUST remain valid while streaming! } #else if (!strnicmp(argv[1], "http:", 5)) { printf("Connecting to %s, please wait (this may take some time)....\n", argv[1]); } stream = FSOUND_Stream_Open(argv[1], FSOUND_NORMAL | FSOUND_MPEGACCURATE, 0, 0); if (!stream) { printf("Error!\n"); printf("%s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); return 1; } #endif // ========================================================================================== // SET AN END OF STREAM CALLBACK AND RIFF SYNCH POINTS CALLBACK // ========================================================================================== FSOUND_Stream_SetEndCallback(stream, endcallback, 0); FSOUND_Stream_SetSyncCallback(stream, endcallback, 0); printf("=========================================================================\n"); printf("Press SPACE to pause/unpause\n"); printf("Press 'f' to fast forward 2 seconds\n"); printf("Press ESC to quit\n"); printf("=========================================================================\n"); printf("Playing stream...\n\n"); sptr = FSOUND_Stream_GetSample(stream); if (sptr) { int freq; FSOUND_Sample_GetDefaults(sptr, &freq, NULL, NULL, NULL); printf("Name : %s\n", FSOUND_Sample_GetName(sptr)); printf("Frequency : %d\n\n", freq); } key = 0; do { if (channel < 0) { // ========================================================================================== // PLAY STREAM // ========================================================================================== channel = FSOUND_Stream_PlayEx(FSOUND_FREE, stream, NULL, TRUE); FSOUND_SetPaused(channel, FALSE); } if (kbhit()) { key = getch(); if (key == ' ') { FSOUND_SetPaused(channel, !FSOUND_GetPaused(channel)); } if (key == 'f') { FSOUND_Stream_SetTime(stream, FSOUND_Stream_GetTime(stream) + 2000); } } printf("pos %6d/%6d time %02d:%02d/%02d:%02d cpu %5.02f%% \r", FSOUND_Stream_GetPosition(stream), FSOUND_Stream_GetLength(stream), FSOUND_Stream_GetTime(stream) / 1000 / 60, FSOUND_Stream_GetTime(stream) / 1000 % 60, FSOUND_Stream_GetLengthMs(stream) / 1000 / 60, FSOUND_Stream_GetLengthMs(stream) / 1000 % 60, FSOUND_GetCPUUsage()); Sleep(10); } while (key != 27); printf("\n"); FSOUND_Stream_Close(stream); FSOUND_Close(); return 0; }
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; }