DWORD bmx_bass_streamcreatetstream(void * handle, DWORD system, DWORD flags) { BASS_FILEPROCS fileprocs = {bmx_bass_fileCloseProc, bmx_bass_fileLenProc, bmx_bass_fileReadProc, bmx_bass_fileSeekProc}; return BASS_StreamCreateFileUser(system, flags, &fileprocs, handle); }
HRESULT CBSoundBuffer::LoadFromFile(const char* Filename, bool ForceReload) { if (m_Stream) { BASS_StreamFree(m_Stream); m_Stream = NULL; } if (m_File) Game->m_FileManager->CloseFile(m_File); m_File = Game->m_FileManager->OpenFile(Filename); if (!m_File) { Game->LOG(0, "Error opening sound file '%s'", Filename); return E_FAIL; } BASS_FILEPROCS fileProc; fileProc.close = CBSoundBuffer::FileCloseProc; fileProc.read = CBSoundBuffer::FileReadProc; fileProc.seek = CBSoundBuffer::FileSeekProc; fileProc.length = CBSoundBuffer::FileLenProc; m_Stream = BASS_StreamCreateFileUser(STREAMFILE_NOBUFFER, BASS_STREAM_DECODE, &fileProc, (void*)m_File); if (!m_Stream) { Game->LOG(0, "BASS error: %d while loading '%s'", BASS_ErrorGetCode(), Filename); return E_FAIL; } m_Stream = BASS_FX_TempoCreate(m_Stream,BASS_SAMPLE_LOOP|BASS_FX_FREESOURCE); CBUtils::SetString(&m_Filename, Filename); /* HRESULT res; bool NewlyCreated = false; if(!m_SoundBuffer || ForceReload || m_Streamed){ if(!m_File) m_File = Game->m_FileManager->OpenFile(Filename); if(!m_File){ Game->LOG(0, "Error opening sound file '%s'", Filename); return E_FAIL; } // switch to streamed for big files if(!m_Streamed && (m_File->GetSize() > MAX_NONSTREAMED_FILE_SIZE && !Game->m_ForceNonStreamedSounds)) SetStreaming(true); } // create buffer if(!m_SoundBuffer){ NewlyCreated = true; res = InitializeBuffer(m_File); if(FAILED(res)){ Game->LOG(res, "Error creating sound buffer for file '%s'", Filename); return res; } } // store filename if(!m_Filename){ m_Filename = new char[strlen(Filename)+1]; strcpy(m_Filename, Filename); } // close file (if not streaming) if(!m_Streamed && m_File){ Game->m_FileManager->CloseFile(m_File); m_File = NULL; } */ return S_OK; }
HRESULT CBSoundBuffer::LoadFromFile(const char* Filename, bool ForceReload) { if (m_Stream) { BASS_StreamFree(m_Stream); m_Stream = NULL; } if (m_File) Game->m_FileManager->CloseFile(m_File); m_File = Game->m_FileManager->OpenFile(Filename); if (!m_File) { Game->LOG(0, "Error opening sound file '%s'", Filename); return E_FAIL; } BASS_FILEPROCS fileProc; fileProc.close = CBSoundBuffer::FileCloseProc; fileProc.read = CBSoundBuffer::FileReadProc; fileProc.seek = CBSoundBuffer::FileSeekProc; fileProc.length = CBSoundBuffer::FileLenProc; m_Stream = BASS_StreamCreateFileUser(STREAMFILE_NOBUFFER, 0, &fileProc, (void*)m_File); if (!m_Stream) { Game->LOG(0, "BASS error: %d while loading '%s'", BASS_ErrorGetCode(), Filename); return E_FAIL; } CBUtils::SetString(&m_Filename, Filename); #ifdef USE_BASS_FX if (m_EffectHandle != 0) { BASS_ChannelRemoveFX(m_Stream, m_EffectHandle); m_EffectHandle = 0; } #endif #ifdef USE_LIBEFFECTS_REVERB if (m_BASS_DSP_handle != 0) { if (BASS_ChannelRemoveDSP(m_Stream, m_BASS_DSP_handle) == FALSE) { Game->LOG(0, "BASS error: %d while removing ond DSP effect from '%s'", BASS_ErrorGetCode(), Filename); } m_BASS_DSP_handle = 0; } if (m_context.hInstance != NULL) { free(m_context.InFrames32); free(m_context.OutFrames32); Reverb_free(&m_context); m_context.hInstance = NULL; } #endif /* HRESULT res; bool NewlyCreated = false; if(!m_SoundBuffer || ForceReload || m_Streamed){ if(!m_File) m_File = Game->m_FileManager->OpenFile(Filename); if(!m_File){ Game->LOG(0, "Error opening sound file '%s'", Filename); return E_FAIL; } // switch to streamed for big files if(!m_Streamed && (m_File->GetSize() > MAX_NONSTREAMED_FILE_SIZE && !Game->m_ForceNonStreamedSounds)) SetStreaming(true); } // create buffer if(!m_SoundBuffer){ NewlyCreated = true; res = InitializeBuffer(m_File); if(FAILED(res)){ Game->LOG(res, "Error creating sound buffer for file '%s'", Filename); return res; } } // store filename if(!m_Filename){ m_Filename = new char[strlen(Filename)+1]; strcpy(m_Filename, Filename); } // close file (if not streaming) if(!m_Streamed && m_File){ Game->m_FileManager->CloseFile(m_File); m_File = NULL; } */ return S_OK; }