Exemplo n.º 1
0
        public ISound Decode(BeatmaniaPcAudioEntry entry)
        {
            using (var wavDataMem = new ReadOnlyMemoryStream(entry.Data))
            {
                var result = _wavDecoder.Decode(wavDataMem);

                var panning = entry.Panning;
                if (panning > 0x7F || panning < 0x01)
                {
                    panning = 0x40;
                }

                var volume = entry.Volume;
                if (volume < 0x01)
                {
                    volume = 0x01;
                }
                else if (volume > 0xFF)
                {
                    volume = 0xFF;
                }

                result[NumericData.Panning]       = (panning - 1.0d) / 126.0d;
                result[NumericData.Volume]        = BeatmaniaPcConstants.VolumeTable[volume];
                result[NumericData.Channel]       = entry.Channel;
                result[NumericData.SourceVolume]  = entry.Volume;
                result[NumericData.SourcePanning] = entry.Panning;

                return(result);
            }
        }
        public void Write(Stream target, BeatmaniaPcAudioEntry entry)
        {
            var writer = new BinaryWriter(target);

            writer.Write(0x39584432); // 2DX9
            writer.Write(0x14 + entry.ExtraInfo.Length);
            writer.Write(entry.Data.Length);
            writer.Write((short)0);
            writer.Write((short)entry.Channel);
            writer.Write((short)entry.Panning);
            writer.Write((short)entry.Volume);
            writer.Write(entry.ExtraInfo);
            writer.Write(entry.Data);
        }
        private static Stream CreateData(BeatmaniaPcAudioEntry entry)
        {
            var mem    = new MemoryStream();
            var writer = new BinaryWriter(mem);

            writer.Write(0x39584432);                    // 2DX9
            writer.Write(0x14 + entry.ExtraInfo.Length); // header length
            writer.Write(entry.Data.Length);
            writer.Write((short)entry.Reserved);
            writer.Write((short)entry.Channel);
            writer.Write((short)entry.Panning);
            writer.Write((short)entry.Volume);
            writer.Write(entry.ExtraInfo);
            writer.Write(entry.Data);

            mem.Position = 0;
            return(mem);
        }