Beispiel #1
0
	ErrorType SoundStreamData::Open(
		StreamReader *streamReader, Int chunkSize)
	{
		Unload();
		if (!streamReader->IsOpen())
			return Error::Throw(kErrorFileNotFound,
				String("(%s(%p, %d): streamReader->mName=\"%s\"]",
				FastFunctionName, streamReader, chunkSize,
				streamReader->GetName().GetCString()));
		mStreamReader = streamReader;
		mProperties.SetSampleCount(chunkSize);
		mStreamReader->SeekTo(0);
		Char check = mStreamReader->ReadByte();
		mStreamReader->SeekTo(0);
		switch(check)
		{
		case '\x4f':
			return OpenOgg();
		case '\x52':
			return OpenWav();
		default:
			Unload();
			return Error::Throw(kErrorSoundFormatInvalid,
				String("(%s(%p, %d): streamReader->mName=\"%s\"]",
				FastFunctionName, streamReader, chunkSize,
				streamReader->GetName().GetCString()));
		}
	}
int DecodeMusic(std::string const& filename, DecodedMusic* Sound){
	
	// Opening file
	FILE* stream = FileFinder::fopenUTF8(filename, "rb");
	if (!stream) {
		Output::Warning("Couldn't open music file %s", filename.c_str());
		return -1;
	}
	
	// Trying to use internal decoder
	audio_decoder = AudioDecoder::Create(stream, filename);
	if (audio_decoder != NULL) return OpenAudioDecoder(stream, Sound, filename);
	
	// Reading and parsing the magic
	u32 magic;
	fread(&magic, 4, 1, stream);
	if (magic == 0x46464952) return OpenWav(stream, Sound);
	else if (magic == 0x5367674F) return OpenOgg(stream, Sound);
	else{
		fclose(stream);
		Output::Warning("Unsupported music format (%s)", filename.c_str());
		return -1;
	}
	
}
Beispiel #3
0
	ErrorType SoundStreamData::Open(
		const String &fileName, Int chunkSize)
	{
		Unload();
		mStreamReader = new FileReader(fileName);
		if (!mStreamReader->IsOpen()) {
			delete (FileReader*)mStreamReader;
			mStreamReader = 0;
			return Error::Throw(kErrorFileNotFound, String("[%s(\"%s\", %d)]",
				FastFunctionName, fileName.GetCString(), chunkSize));
		}
		mProperties.SetSampleCount(chunkSize);
		mAllocatedStreamReader = true;
		Char check = mStreamReader->ReadByte();
		mStreamReader->SeekTo(0);
		switch(check)
		{
		case '\x4f':
			return OpenOgg();
		case '\x52':
			return OpenWav();
		default:
			Unload();
			return Error::Throw(kErrorSoundFormatInvalid,
				String("[%s(\"%s\", %d)]", FastFunctionName,
				fileName.GetCString(), chunkSize));
		}
	}