bool CMusicChannelFMod::playStream() { if (FSOUND_Stream_GetOpenState(_MusicStream) == -3) { nlwarning("NLSOUND FMod Driver: stream failed to open. (file not found, out of memory or other error)"); FSOUND_Stream_Close(_MusicStream); _MusicStream = NULL; return false; } // Start playing if ((_MusicChannel = FSOUND_Stream_PlayEx(FSOUND_FREE, _MusicStream, NULL, true)) == -1) return false; // stereo pan (as reccomended) FSOUND_SetPan(_MusicChannel, FSOUND_STEREOPAN); // update volume int vol255 = (int)(_Gain * 255.0f); FSOUND_SetVolumeAbsolute(_MusicChannel, vol255); // Set a callback to know if stream has ended _CallBackEnded = false; FSOUND_Stream_SetEndCallback(_MusicStream, streamEndCallBack, static_cast<void *>(this)); // unpause FSOUND_SetPaused(_MusicChannel, false); return true; }
void World::playMusic() { if (!mp3file) return; makeGemTrack(); FSOUND_Stream_PlayEx( FSOUND_FREE, mp3file, NULL, false ); }
bool FMODStreamOut::Start() { FMODChannel = FSOUND_Stream_PlayEx(FSOUND_FREE, StreamPointer, NULL, 1); SetVolume(m_Volume); FSOUND_SetPaused(FMODChannel, 0); return FMODChannel != -1; }
int LLAudioStreamFMOD::startStream() { // We need a live and opened stream before we try and play it. if (!mInternetStream || getOpenState()) { llwarns << "No internet stream to start playing!" << llendl; return -1; } // Make sure the stream is set to 2D mode. FSOUND_Stream_SetMode(mInternetStream, FSOUND_2D); return FSOUND_Stream_PlayEx(FSOUND_FREE, mInternetStream, NULL, true); }
/* [ [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; }
static inline VOID M_StartFMODSong(LPVOID data, int len, int looping, HWND hDlg) { const int loops = FSOUND_LOOP_NORMAL|FSOUND_LOADMEMORY; const int nloop = FSOUND_LOADMEMORY; M_FreeMusic(); if (looping) mod = FMUSIC_LoadSongEx(data, 0, len, loops, NULL, 0); else mod = FMUSIC_LoadSongEx(data, 0, len, nloop, NULL, 0); if (mod) { FMUSIC_SetLooping(mod, (signed char)looping); FMUSIC_SetPanSeperation(mod, 0.0f); } else { if (looping) fmus = FSOUND_Stream_Open(data, loops, 0, len); else fmus = FSOUND_Stream_Open(data, nloop, 0, len); } if (!fmus && !mod) { MessageBoxA(hDlg, FMOD_ErrorString(FSOUND_GetError()), "Error", MB_OK|MB_APPLMODAL); return; } // Scan the OGG for the COMMENT= field for a custom loop point if (looping && fmus) { const BYTE *origpos, *dataum = data; size_t scan, size = len; CHAR buffer[512]; BOOL titlefound = FALSE, artistfound = FALSE; unsigned int loopstart = 0; origpos = dataum; for(scan = 0; scan < size; scan++) { if (!titlefound) { if (*dataum++ == 'T') if (*dataum++ == 'I') if (*dataum++ == 'T') if (*dataum++ == 'L') if (*dataum++ == 'E') if (*dataum++ == '=') { size_t titlecount = 0; CHAR title[256]; BYTE length = *(dataum-10) - 6; while(titlecount < length) title[titlecount++] = *dataum++; title[titlecount] = '\0'; sprintf(buffer, "Title: %s", title); SendMessage(GetDlgItem(hDlg, IDC_TITLE), WM_SETTEXT, 0, (LPARAM)(LPCSTR)buffer); titlefound = TRUE; } } } dataum = origpos; for(scan = 0; scan < size; scan++) { if (!artistfound) { if (*dataum++ == 'A') if (*dataum++ == 'R') if (*dataum++ == 'T') if (*dataum++ == 'I') if (*dataum++ == 'S') if (*dataum++ == 'T') if (*dataum++ == '=') { size_t artistcount = 0; CHAR artist[256]; BYTE length = *(dataum-11) - 7; while(artistcount < length) artist[artistcount++] = *dataum++; artist[artistcount] = '\0'; sprintf(buffer, "By: %s", artist); SendMessage(GetDlgItem(hDlg, IDC_ARTIST), WM_SETTEXT, 0, (LPARAM)(LPCSTR)buffer); artistfound = TRUE; } } } dataum = origpos; for(scan = 0; scan < size; scan++) { if (*dataum++ == 'C'){ if (*dataum++ == 'O'){ if (*dataum++ == 'M'){ if (*dataum++ == 'M'){ if (*dataum++ == 'E'){ if (*dataum++ == 'N'){ if (*dataum++ == 'T'){ if (*dataum++ == '='){ if (*dataum++ == 'L'){ if (*dataum++ == 'O'){ if (*dataum++ == 'O'){ if (*dataum++ == 'P'){ if (*dataum++ == 'P'){ if (*dataum++ == 'O'){ if (*dataum++ == 'I'){ if (*dataum++ == 'N'){ if (*dataum++ == 'T'){ if (*dataum++ == '=') { size_t newcount = 0; CHAR looplength[64]; while (*dataum != 1 && newcount < 63) { looplength[newcount++] = *dataum++; } looplength[newcount] = '\n'; loopstart = atoi(looplength); } else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} else dataum--;} } if (loopstart > 0) { const int length = FSOUND_Stream_GetLengthMs(fmus); const int freq = 44100; const unsigned int loopend = (unsigned int)((freq/1000.0f)*length-(freq/1000.0f)); if (!FSOUND_Stream_SetLoopPoints(fmus, loopstart, loopend)) { printf("FMOD(Start,FSOUND_Stream_SetLoopPoints): %s\n", FMOD_ErrorString(FSOUND_GetError())); } } } if (mod) FMUSIC_PlaySong(mod); if (fmus) fsoundchannel = FSOUND_Stream_PlayEx(FSOUND_FREE, fmus, NULL, FALSE); M_SetVolume(128); }
/* [ [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; }