コード例 #1
0
ファイル: cd_win.c プロジェクト: Azarien/SoftQuake
void CDAudio_Play(byte track, qboolean looping)
{
	HANDLE playingThread;
	char filename[MAX_PATH];
	struct ThreadArgList_t *tal;

	if (!enabled)
		return;
	
	if (!cdValid)
	{
		CDAudio_GetAudioDiskInfo();
		if (!cdValid)
			return;
	}

	track = remap[track];

	if (track < 1 || track > maxTrack)
	{
		Con_DPrintf("CDAudio: Bad track number %u.\n", track);
		return;
	}

	if (playing)
	{
		if (playTrack == track)
			return;
		CDAudio_Stop();
	}

	tal = malloc(sizeof(struct ThreadArgList_t));
	tal->playLooping = looping;
	tal->playTrack = track;

	sprintf(filename, "%s\\Track%03d.ogg", com_gamedir, track);
	if (!OpenOGG(filename, tal))
	{
		sprintf(filename, "%s\\sound\\cdtracks\\Track%03d.ogg", com_gamedir, track);
		if (!OpenOGG(filename, tal))
		{
			Con_DPrintf("CDAudio: Cannot open Vorbis file \"%s\"", filename);
			return;
		}
	}

	playLooping = looping;
	playTrack = track;
	playing = true;

	// force volume update
	cdvolume = -1;

	playingThread = (HANDLE)_beginthreadex(NULL, 0, PlayingThreadProc, tal, CREATE_SUSPENDED, NULL);
	SetThreadPriority(playingThread, THREAD_PRIORITY_TIME_CRITICAL);
	ResumeThread(playingThread);
}
コード例 #2
0
//-----------------------------------------------------------------------------
// Name: idWaveFile::Open()
// Desc: Opens a wave file for reading
//-----------------------------------------------------------------------------
int idWaveFile::Open(const char *strFileName, waveformatex_t *pwfx)
{

	mbIsReadingFromMemory = false;

	mpbData     = NULL;
	mpbDataCur  = mpbData;

	if (strFileName == NULL) {
		return -1;
	}

	idStr name = strFileName;

	// note: used to only check for .wav when making a build
	name.SetFileExtension(".ogg");

	if (fileSystem->ReadFile(name, NULL, NULL) != -1) {
		return OpenOGG(name, pwfx);
	}

	memset(&mpwfx, 0, sizeof(waveformatextensible_t));

	mhmmio = fileSystem->OpenFileRead(strFileName);

	if (!mhmmio) {
		mdwSize = 0;
		return -1;
	}

	if (mhmmio->Length() <= 0) {
		mhmmio = NULL;
		return -1;
	}

	if (ReadMMIO() != 0) {
		// ReadMMIO will fail if its an not a wave file
		Close();
		return -1;
	}

	mfileTime = mhmmio->Timestamp();

	if (ResetFile() != 0) {
		Close();
		return -1;
	}

	// After the reset, the size of the wav file is mck.cksize so store it now
	mdwSize = mck.cksize / sizeof(short);
	mMemSize = mck.cksize;

	if (mck.cksize != 0xffffffff) {
		if (pwfx) {
			memcpy(pwfx, (waveformatex_t *)&mpwfx, sizeof(waveformatex_t));
		}

		return 0;
	}

	return -1;
}