Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }