void WaveSynth::LoadWaveFromFile(const char* filename) { uint8_t* buffer; size_t size=0; io::ReadWholeFileBinary(filename,&buffer,size); if (size != 0) { LoadWave(buffer,size); io::DestroyFileBuffer(&buffer); } }
bool Dsoundinit( HWND hwnd ) { // SBArrの初期化 initSBArr(); // DirectSound8 の作成 if (FAILED(DirectSoundCreate8(NULL,&lpDS,NULL))) { MessageBox(NULL,"DirectSound オブジェクトの作成に失敗しました。","DirectSoundエラー",MB_OK | MB_ICONSTOP); return false; } // DirectSound の協調レベルを設定 if (FAILED(lpDS->SetCooperativeLevel(hwnd,DSSCL_PRIORITY))) { MessageBox(NULL,"DirectSound の協調レベルの設定に失敗しました。","DirectSoundエラー",MB_OK | MB_ICONSTOP); // 閉じる SendMessage(hwnd,WM_CLOSE,0,0); return false; } // プライマリ サウンドバッファ作成 DSBUFFERDESC desc; ZeroMemory(&desc,sizeof(DSBUFFERDESC)); desc.dwSize = sizeof(DSBUFFERDESC); desc.dwFlags = DSBCAPS_PRIMARYBUFFER; if (FAILED(lpDS->CreateSoundBuffer(&desc,&lpDSP,NULL))) { MessageBox(NULL,"プライマリサウンドバッファの作成に失敗しました。","DirectSoundエラー",MB_OK | MB_ICONSTOP); // 閉じる SendMessage(hwnd,WM_CLOSE,0,0); return false; } //ここまでは一回行えばOKの処理 //SEの数だけセカンダリバッファにデータ読み込み //読み込みファイル名をリストから読み込む initSBFileList(); int nCount; for(nCount = 0;nCount <= SE_MAX - 1;nCount++){ // WAVE ファイルの読み込み // MessageBox(NULL,SBArr[nCount].cSeFileName,"",MB_OK); SBArr[nCount].SB_lpDSB = LoadWave(SBArr[nCount].cSeFileName); //効果音 if (SBArr[nCount].SB_lpDSB == NULL) { MessageBox(NULL,"ファイルの読み込みに失敗しました。","DirectSoundエラー",MB_OK | MB_ICONSTOP); // 閉じる SendMessage(hwnd,WM_CLOSE,0,0); return false; } } return true; }
SPWavFile::SPWavFile( SPString path ) { isLoaded = false; songLength = 0; ZeroMemory(&overlapped, sizeof(overlapped)); overlapped.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); this->path = path; Open(path); LoadWave(); }
int SDLMixerSoundSystem::PlaySound ( const char *_soundName, short _distX, short _distY ) { CrbReleaseAssert ( _soundName != NULL ); // Let's see if it's cached. Mix_Chunk *wave = m_chunks.find ( _soundName, NULL ); if ( !wave ) { // Ouch. Performance hit as we load the sound. g_console->SetColour ( IO::Console::FG_YELLOW | IO::Console::FG_INTENSITY ); g_console->WriteLine ( "WARNING: %s was not found in the sound cache!", _soundName ); g_console->SetColour (); LoadWave ( _soundName ); wave = m_chunks.find ( _soundName, NULL ); } if ( !wave ) { // The sound is completely unloadable. g_console->SetColour ( IO::Console::FG_RED | IO::Console::FG_INTENSITY ); g_console->WriteLine ( "ERROR: %s could not be loaded!", _soundName ); g_console->SetColour (); return -1; } // Use the pythagorean theorem to calculate a precise distance, in pixels. int distX2 = _distX * _distX; int distY2 = _distY * _distY; int dist = (int)sqrt((double)distX2 + (double)distY2); // We use a box range for the maximum distance. Just off screen (left or right) sounds would play at 30% volume. float maxDist = (float)max(g_graphics->GetScreenHeight(),g_graphics->GetScreenWidth()) * 0.75f; float volumePercentage = (float)(maxDist - dist) / (float)maxDist; // The volume is the percentage just calculated * maximum volume int newVolume = (int)(( (float)MIX_MAX_VOLUME * 0.75f ) * volumePercentage); if ( newVolume <= 0 ) return 1; int channel = Mix_PlayChannel ( -1, wave, 0 ); int left = ( _distX * -1 ) + 128; if ( left < 0 ) left = 0; if ( left > 255 ) left = 255; Mix_SetPanning ( channel, left, 255 - left ); Mix_Volume ( channel, newVolume ); if ( m_channelPlaying.valid ( channel ) ) { free ( m_channelPlaying.get ( channel ) ); m_channelPlaying.remove ( channel ); } if ( channel != -1 ) { /*g_console->WriteLine ( "Playing %s at %.1lf%% volume (distance: %d, channel: %d)", _soundName, volumePercentage * 100.0f, dist, channel );*/ m_channelPlaying.insert ( cc_strdup ( _soundName ), channel ); } return 0; }
// Secondary SoundBuffer erstellen und Wave-Daten aus der Datei fileName in den Buffer laden int MakeSoundBuffer(const char *fileName, LPDIRECTSOUNDBUFFER *lpDSB) { DSBUFFERDESC dsbd; // SB Description BYTE *pDSBuffData; // SB Daten Adresse WAVEFORMATEX waveFormat; // Wave Format DWORD dwDataLength; // Länge der Wave Daten PBYTE pbyWaveDaten; // Eigentliche Wave Daten HRESULT dsrval; // Rückgabewert pbyWaveDaten = NULL; if(LoadWave(fileName, &waveFormat, &dwDataLength, &pbyWaveDaten)) { MessageBox(NULL, "Error", "LoadWave()", NULL); return 1; } ZeroMemory(&dsbd,sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC; dsbd.dwBufferBytes = dwDataLength; //Länge der Wave-Daten dsbd.lpwfxFormat = &waveFormat; //Format der Wave-Daten dsrval = lpDS->CreateSoundBuffer(&dsbd, lpDSB, NULL); if (FAILED(dsrval)) { MessageBox(NULL, "Error", "CreateSoundBuffer()", NULL); return 1; } // Sound Buffer verriegeln um Daten zu speichern dsrval = (*lpDSB)->Lock(0,dwDataLength,(LPVOID *)&pDSBuffData, &dwDataLength,NULL,0,0); if (FAILED(dsrval)) { MessageBox(NULL, "Error", "Lock()", NULL); return 1; } // Kopieren der Sounddaten in den Sound Buffer memcpy(pDSBuffData,pbyWaveDaten,dwDataLength); // Freigeben der Sounddaten (Werden jetzt nicht mehr gebraucht) free(pbyWaveDaten); // Sound Buffer entriegeln dsrval = (*lpDSB)->Unlock(pDSBuffData,dwDataLength,NULL,0); if (FAILED(dsrval)) { MessageBox(NULL, "Error", "Unlock()", NULL); return 1; } return 0; }
SoundBuffer* SoundBuffer::FromFile(string filename) { unsigned int al_name = 0; ifstream file(filename.c_str(), ios::in | ios::binary); int channels, bits_per_sample, sample_rate; vector<char> sound_data; unsigned int error = LoadWave(file, channels, bits_per_sample, sample_rate, &sound_data); if(error == 0) { ALenum format = GetSoundFormat(channels, bits_per_sample); if(format != 0) { alGenBuffers(1, &al_name); unsigned int size = sound_data.size(); alBufferData(al_name, format, &sound_data[0], size, sample_rate); } else { stringstream message; message << "format unsupported: channels=" << channels << ", bits per sample=" << bits_per_sample << ", in file \"" << filename << "\"" << endl; Debug(message.str()); return NULL; } } else { stringstream message; message << "error " << error << " loading sound from file: \"" << filename << "\"" << endl; Debug(message.str()); return NULL; } if(SoundSystem::CheckForALErrors()) { alDeleteBuffers(1, &al_name); al_name = 0; } if(al_name == 0) { stringstream message; message << "failure to load file: \"" << filename << "\"" << endl; Debug(message.str()); return NULL; } else return new SoundBuffer(al_name); }
RDWavePainter::RDWavePainter(QPaintDevice *pd,RDCut *cut, RDStation *station,RDUser *user,RDConfig *config) : QPainter(pd) { wave_cut=cut; wave_station=station; wave_user=user; wave_config=config; wave_peaks=NULL; LoadWave(); }
void LoadAssets(game_state *GameState) { // NOTE currently sound is forced at... // Mono, 16 bit, 48000. // anything else won't work. need to implement stereo sound at some point. GameState->TestNote = LoadWave("../assets/testNote.wav"); GameState->TestNoteSampleIndex = 0; GameState->BackgroundImage = GLLoadBMP("../assets/Background.bmp"); GameState->PlayerImage = GLLoadBMP("../assets/Player.bmp"); GameState->GrappleRadiusImage = GLLoadBMP("../assets/LatchRadius.bmp"); GameState->GrappleLineImage = GLLoadBMP("../assets/GrappleLine.bmp"); GameState->GrappleArrowImage = GLLoadBMP("../assets/GrappleArrow.bmp"); GameState->EnemyImage = GLLoadBMP("../assets/Enemy.bmp"); GameState->EnemyHealthBar = GLLoadBMP("../assets/HealthBarBackground.bmp"); // NOTE this line is necessary to initialize the DebugOuput var of GameState. It must be initialized to something. DebugLine("Loaded", GameState); }
int OpenALSoundSystem::PlaySound ( const char *_soundName, short _distX, short _distY ) { ALuint buf = m_buffers.find ( _soundName ); if (!buf) { LoadWave(_soundName); buf = m_buffers.find(_soundName); ARCReleaseAssert ( buf != NULL ); } ALuint src = AcquireSource (); ARCReleaseAssert ( src != 0 ); float loc[3] = { (float)_distX, (float)_distY, 0.0f }; alSourceStop ( src ); alSourceRewind ( src ); alSourcei ( src, AL_BUFFER, buf ); alSourcefv ( src, AL_POSITION, loc ); alSourcePlay ( src ); return 0; }
void CSoundRender_Source::load(LPCSTR name) { string_path fn,N; strcpy (N,name); strlwr (N); if (strext(N)) *strext(N) = 0; fname = N; strconcat (sizeof(fn),fn,N,".ogg"); if (!FS.exist("$level$",fn)) FS.update_path (fn,"$game_sounds$",fn); #ifdef _EDITOR if (!FS.exist(fn)){ FS.update_path (fn,"$game_sounds$","$no_sound.ogg"); } #endif LoadWave (fn); //.R_ASSERT(wave); SoundRender->cache.cat_create (CAT, dwBytesTotal); // if (dwTimeTotal<100) { // Msg ("! WARNING: Invalid wave length (must be at least 100ms), file: %s",fn); // } }
RudeSound::RudeSound() { m_soundon = true; m_musicOn = true; m_curBGM = kBGMNone; m_bgmVolFadeEnabled = false; m_bgmVol = 1.0; m_bgmVolFade = 0.0; #if defined(RUDE_IPHONE) || defined(RUDE_MACOS) SoundEngine_Initialize(44100); SoundEngine_SetListenerPosition(0.0, 0.0, kListenerDistance); #endif for(int i = 0; i < kNumSounds; i++) { m_soundids[i] = -1; LoadWave(kSoundFilenames[i], (eSoundEffect) i); } RudeRegistry *reg = RudeRegistry::GetSingleton(); int loadsize = sizeof(m_musicOn); if(reg->QueryByte("GOLF", "RS_MUSIC", &m_musicOn, &loadsize) == 0) { } else { m_musicOn = true; } }
status_t MainView::_ReloadWave() { return LoadWave(fCurrentEntryRef); }
bool RDWavePainter::begin(QPaintDevice *pd,RDCut *cut) { wave_cut=cut; LoadWave(); return QPainter::begin(pd); }
void RDWavePainter::nameWave(RDCut *cut) { wave_cut=cut; LoadWave(); }