public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { if (!data.HasStream(this, WadName) && !data.HasStream(this, DatName)) { throw new FormatException(); } AudioFormat format = new AudioFormat(); format.Decoder = new MultiDecoder(RawkAudio.Decoder.BufferSize); Stream wad = data.GetStream(this, WadName); Stream dat = data.GetStream(this, DatName); DatWad audio = new DatWad(new EndianReader(dat, Endianness.BigEndian), wad); data.CloseStream(dat); foreach (DatWad.Node node in audio.Nodes) { string name = node.Filename.Substring(node.Filename.LastIndexOf('_') + 1).ToLower().Trim(); Instrument instrument = Instrument.Ambient; if ("preview.wav".StartsWith(name)) { instrument = Instrument.Preview; } else if ("guitar.wav".StartsWith(name)) { instrument = Instrument.Guitar; } else if ("rhythm.wav".StartsWith(name)) { instrument = Instrument.Bass; } else if ("song.wav".StartsWith(name)) { instrument = Instrument.Ambient; } else { continue; } IDecoder decoder = new RawkAudio.Decoder(node.Data, RawkAudio.Decoder.AudioFormat.FmodSoundBank); (format.Decoder as MultiDecoder).AddDecoder(decoder); for (int i = 0; i < decoder.Channels; i++) { format.Mappings.Add(new AudioFormat.Mapping(0, 0, instrument)); } } format.SetDisposeStreams(data, new Stream[] { wad, dat }); format.AutoBalance(); return(format); }
public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { AudioFormat format = DecodeAudioFormat(data); Stream stream = data.GetStream(this, AudioName); format.Decoder = new RawkAudio.Decoder(stream, RawkAudio.Decoder.AudioFormat.Vgs); format.SetDisposeStreams(data, new Stream[] { stream }); return(format); }
public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { IList <Stream> streams = GetAudioStreams(data); AudioFormat format = DecodeAudioFormat(data); format.Decoder = DecodeOggAudio(streams.ToArray()); format.SetDisposeStreams(data, streams); return(format); }
public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { if (!data.HasStream(this, AudioName)) { return(null); } AudioFormat format = DecodeAudioFormat(data); Stream audio = GetDecryptedAudioStream(data); format.Decoder = AudioFormatOgg.Instance.DecodeOggAudio(audio); format.SetDisposeStreams(data, new Stream[] { (audio as CryptedMoggStream).Base }); return(format); }
public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { AudioFormat format = DecodeFormat(data); Stream audio = data.GetStream(this, AudioName); uint magic = new EndianReader(audio, Endianness.BigEndian).ReadUInt32(); if (magic != 0x5241574b && (magic & 0xFFFFFF00) != 0x42494b00) { throw new FormatException(); // Must start with "RAWK" or "BIK", this is to prevent encrypted biks from being decoded } audio.Position = 0; Stream preview = null; format.Decoder = new RawkAudio.Decoder(audio, RawkAudio.Decoder.AudioFormat.BinkAudio); if (data.HasStream(this, PreviewName)) { preview = data.GetStream(this, PreviewName); magic = new EndianReader(preview, Endianness.BigEndian).ReadUInt32(); preview.Position = 0; if (magic != 0x5241574b && (magic & 0xFFFFFF00) != 0x42494b00) { throw new FormatException(); } IDecoder decoder = new RawkAudio.Decoder(preview, RawkAudio.Decoder.AudioFormat.BinkAudio); MultiDecoder multi = new MultiDecoder(RawkAudio.Decoder.BufferSize); multi.AddDecoder(format.Decoder); multi.AddDecoder(decoder); format.Decoder = multi; } format.SetDisposeStreams(data, new Stream[] { audio, preview }); Game game = data.Song.Game; if (NeversoftMetadata.IsGuitarHero4(game) || NeversoftMetadata.IsGuitarHero5(game)) { format.Decoder = new AmplifyDecoder(format.Decoder, 1.30f); } return(format); }
public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { if (!data.HasStream(this, AudioName)) { return(null); } AudioFormat format = DecodeAudioFormat(data); Stream audio = GetDecryptedAudioStream(data); Stream preview = GetDecryptedPreviewStream(data); List <Stream> streams = new List <Stream>(); if (audio is CryptedMoggStream) { streams.Add((audio as CryptedMoggStream).Base); } if (preview is CryptedMoggStream) { streams.Add((preview as CryptedMoggStream).Base); } format.Decoder = AudioFormatOgg.Instance.DecodeOggAudio(audio, preview); MultiDecoder multi = format.Decoder as MultiDecoder; if (multi != null) { IDecoder decoder = multi.Decoders[1]; for (int i = 0; i < decoder.Channels; i++) { format.Mappings.Add(new AudioFormat.Mapping(0, decoder.Channels == 1 ? 0 : (i == 0 ? -1 : 1), Instrument.Preview)); } } format.SetDisposeStreams(data, streams); return(format); }
public override AudioFormat DecodeAudio(FormatData data, ProgressIndicator progress) { IList <Stream> streams = GetAudioStreams(data); AudioFormat format = DecodeAudioFormat(data); format.Decoder = streams.Count == 1 ? null : new MultiDecoder(RawkAudio.Decoder.BufferSize); foreach (Stream stream in streams) { IDecoder sdecoder = new RawkAudio.Decoder(stream, RawkAudio.Decoder.AudioFormat.VorbisOgg); if (format.Decoder == null) { format.Decoder = sdecoder; } else { (format.Decoder as MultiDecoder).AddDecoder(sdecoder); } } format.SetDisposeStreams(data, streams); return(format); }