Exemplo n.º 1
0
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);
  }
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
	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();
	}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
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;
}
Exemplo n.º 6
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);
	}
Exemplo n.º 7
0
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();
}
Exemplo n.º 8
0
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);
}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
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);
//	}
}
Exemplo n.º 11
0
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;
	}
	
}
Exemplo n.º 12
0
status_t
MainView::_ReloadWave()
{
	return LoadWave(fCurrentEntryRef);
}
Exemplo n.º 13
0
bool RDWavePainter::begin(QPaintDevice *pd,RDCut *cut)
{
  wave_cut=cut;
  LoadWave();
  return QPainter::begin(pd);
}
Exemplo n.º 14
0
void RDWavePainter::nameWave(RDCut *cut)
{
  wave_cut=cut;
  LoadWave();
}