Exemple #1
0
 public Engine()
 {
     this.heroes      = new List <BaseHero>();
     this.heroFactory = new HeroFactory();
     this.reader      = new Reader();
     this.writer      = new Writer();
 }
Exemple #2
0
 public Engine()
 {
     this.reader        = new ConsoleReader();
     this.writer        = new ConsoleWriter();
     this.playerFactory = new PlayerFactory();
     this.teams         = new List <Team>();
 }
        public PresetHeaderChunk(string id, int size, IReadable input)
            : base(id, size)
        {
            if (size % 38 != 0)
                throw new Exception("Invalid SoundFont. The preset chunk was invalid.");

            _rawPresets = new RawPreset[((int)(size / 38.0))];
            RawPreset lastPreset = null;
            for (int x = 0; x < _rawPresets.Length; x++)
            {
                var p = new RawPreset();
                p.Name = input.Read8BitStringLength(20);
                p.PatchNumber = input.ReadUInt16LE();
                p.BankNumber = input.ReadUInt16LE();
                p.StartPresetZoneIndex = input.ReadUInt16LE();
                p.Library = input.ReadInt32LE();
                p.Genre = input.ReadInt32LE();
                p.Morphology = input.ReadInt32LE();
                if (lastPreset != null)
                {
                    lastPreset.EndPresetZoneIndex = TypeUtils.ToUInt16((p.StartPresetZoneIndex - 1));
                }
                _rawPresets[x] = p;
                lastPreset = p;
            }
        }
Exemple #4
0
        /// <summary>
        /// 计算 md5.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <param name="size">输入的长度(字节数).</param>
        /// <param name="buffer">缓冲区,必须是 64 字节或以上.</param>
        /// <param name="pResult">以此输出结果,结果一定是 16 个字节的,请传入一个 16 字节或以上的指针.</param>
        public unsafe void ComputeMD5(IReadable input, ulong size, byte[] buffer, byte *pResult)
        {
            MD5KEY *p = (MD5KEY *)pResult;

            *p = this.key;
            EncryptUtil.__MD5(input, size, buffer, (uint *)p);
        }
Exemple #5
0
        private static float[] LoadSamples(RiffChunk chunk, IReadable reader)
        {
            var samplesLeft = (int)(chunk.Size / 2);
            var samples     = new float[samplesLeft];
            var samplesPos  = 0;

            var sampleBuffer = new byte[2048];
            var testBuffer   = new short[sampleBuffer.Length / 2];

            while (samplesLeft > 0)
            {
                var samplesToRead = (int)Math.Min(samplesLeft, sampleBuffer.Length / 2);
                reader.Read(sampleBuffer, 0, samplesToRead * 2);
                for (var i = 0; i < samplesToRead; i++)
                {
                    testBuffer[i]           = Platform.ToInt16((sampleBuffer[(i * 2) + 1] << 8) | sampleBuffer[(i * 2)]);
                    samples[samplesPos + i] = testBuffer[i] / 32767f;
                }

                samplesLeft -= samplesToRead;
                samplesPos  += samplesToRead;
            }

            return(samples);
        }
Exemple #6
0
 private static string ToString(IReadable readable)
 {
     using (var sr = new StreamReader(readable.Open()))
     {
         return(sr.ReadToEnd());
     }
 }
Exemple #7
0
        public static short ReadInt16LE(this IReadable input)
        {
            var ch1 = input.ReadByte();
            var ch2 = input.ReadByte();

            return(Platform.ToInt16((ch2 << 8) | ch1));
        }
Exemple #8
0
        public static M <double> Read(
            [InputPin(Name = "Readable", Description = "readable", PropertyMode = PropertyMode.Allow)]
            IReadable readable,
            [InputPin(Name = "Delimiter", Description = "Delimiter", PropertyMode = PropertyMode.Default, Editor = WellKnownEditors.SingleLineText)]
            string delimiter = ",",
            [InputPin(Name = "SkipEmptyLines", Description = "Should empty lines be skipped?", PropertyMode = PropertyMode.Default)]
            bool skipEmptyLines = true,
            [InputPin(Name = "SkipFirstLine", Description = "Should the first line be skipped?", PropertyMode = PropertyMode.Default)]
            bool skipFirstLine = false,
            [InputPin(Name = "MaxTokenLength", Description = "Maximal length of a token.", PropertyMode = PropertyMode.Default)]
            int?maxTokenLength = 1024 * 1024,
            [InputPin(Name = "StartOfComment", Description = "Start of a comment line", PropertyMode = PropertyMode.Default, Editor = WellKnownEditors.SingleLineText)]
            string startOfComment = "#"
            )
        {
            var settings = new CsvReaderSettings
            {
                Delimiters     = delimiter.ToCharArray(),
                SkipEmptyLines = skipEmptyLines,
                SkipFirstLine  = skipFirstLine,
                MaxTokenLength = maxTokenLength,
                StartOfComment = startOfComment,
            };

            return(Transform(readable, settings));
        }
        /// <summary>
        /// Reads an integer as size, skips a byte and reads the string itself
        /// </summary>
        /// <returns></returns>
        public static string GpReadStringIntByte(this IReadable data)
        {
            var length = data.ReadInt32LE() - 1;

            data.ReadByte();
            return(data.GpReadString(length));
        }
Exemple #10
0
        public static byte[] ReadByteArray(this IReadable input, int length)
        {
            var v = new byte[length];

            input.Read(v, 0, length);
            return(v);
        }
Exemple #11
0
        public static bool InputFieldTwoWay <T>(CompositeDisposable cd, IEngine engine,
                                                InputField mid,
                                                IWriteable <T> dst, Func <string, T> dstConverter,
                                                IReadable <T> src, Func <T, string> srcConverter)
        {
            if (!mid)
            {
                return(NotBinded());
            }

            engine.Reader(cd, new object[] { src }, () =>
            {
                if (Equals(dstConverter(mid.text), src.Read()))
                {
                    return;
                }
                mid.text = srcConverter(src.Read());
            });

            UnityAction <string> action = text =>
            {
                if (srcConverter(src.Read()) == text)
                {
                    return;
                }
                dst.Write(dstConverter(text));
            };

            mid.onValueChanged.AddListener(action);
            cd.Add(new DisposableAction(() => mid.onValueChanged.RemoveListener(action)));

            return(true);
        }
        public static double GpReadDouble(this IReadable data)
        {
            var bytes = new byte[8];

            data.Read(bytes, 0, bytes.Length);
            return(Platform.Platform.ToDouble(bytes));
        }
Exemple #13
0
 internal Embedding(IContextImpl context, string name, IReadable readable)
 {
     Name       = name;
     Context    = context;
     Readable   = readable;
     Properties = new Dictionary <string, string>();
 }
Exemple #14
0
 public static bool Tabs <T>(CompositeDisposable cd, IEngine engine,
                             Map map, string[] tabs, string[] toggles,
                             IWriteable <T> dst, Func <string, T> dstConverter,
                             IReadable <T> src, Func <T, string> srcConverter)
 {
     engine.Reader(cd, Dep.On(src), () =>
     {
         string selected = srcConverter(src.Read());
         for (int i = 0, n = tabs.Length; i < n; ++i)
         {
             // TODO Fade animation
             map.Get(tabs[i]).SetActive(tabs[i] == selected);
         }
     });
     for (int i = 0, n = toggles.Length; i < n; ++i)
     {
         string tab    = tabs[i];
         string toggle = toggles[i];
         ToggleIsOn(cd, engine,
                    map.GetComponent <Toggle>(toggles[i]), src,
                    t => srcConverter(t) == tab
                    );
         ToggleChange(cd, engine,
                      map.GetComponent <Toggle>(toggles[i]),
                      b => { if (b)
                             {
                                 dst.Write(dstConverter(tab));
                             }
                      }
                      );
     }
     return(true);
 }
 public void SaveReadableItem(IReadable readable)
 {
     if (!this.isAlreadyInTheLibrary(readable))
     {
         this.dataManager.SerializeReadables(readable);
     }
 }
        private static LowRegister ProposeRegisterForValue(IReadable valueResult, LowRegister baseReg, LowRegister offsetReg)
        {
            var f        = FuncBuilder.Instance;
            var scratch0 = f.Scratch0;

            if (baseReg.Index != scratch0.Index)
            {
                return(scratch0);
            }

            var scratch1 = f.Scratch1;

            if (offsetReg.Index != scratch1.Index)
            {
                return(scratch1);
            }
            var reference = valueResult as IReference;

            if (reference != null)
            {
                var lowRegister = reference.GetRepresentation() as LowRegister;
                if (lowRegister != null)
                {
                    return(lowRegister);
                }
            }
            return(null);
        }
Exemple #17
0
        public static short ReadInt16BE(this IReadable input)
        {
            var ch1 = input.ReadByte();
            var ch2 = input.ReadByte();

            return(TypeUtils.ToInt16((ch1 << 8) | (ch2 << 0)));
        }
Exemple #18
0
        public override void Parse(IReadable buffer)
        {
            // First, the protocol version
            buffer.Reader.ReadVarInt();

            // Then, the hostname
            buffer.Reader.ReadVarChar();

            // Then, the port
            buffer.Reader.ReadUInt16();

            // Lastly, the type of request (status or login)
            int nextState = buffer.Reader.ReadVarInt();

            switch (nextState)
            {
            case 1:
                _Client.ClientState = ClientState.Status;
                break;

            case 2:
                _Client.ClientState = ClientState.Login;
                break;
            }
        }
        public SoundFontSampleData(IReadable input)
        {
            var id = input.Read8BitChars(4);
            var size = input.ReadInt32LE();
            if (id.ToLower() != "list")
                throw new Exception("Invalid soundfont. Could not find sdta LIST chunk.");
            var readTo = input.Position + size;
            id = input.Read8BitChars(4);
            if (id.ToLower() != "sdta")
                throw new Exception("Invalid soundfont. The LIST chunk is not of type sdta.");

            BitsPerSample = 0;
            byte[] rawSampleData = null;
            while (input.Position < readTo)
            {
                var subID = input.Read8BitChars(4);
                size = input.ReadInt32LE();
                switch (subID.ToLower())
                {
                    case "smpl":
                        BitsPerSample = 16;
                        rawSampleData = input.ReadByteArray(size);
                        break;
                    case "sm24":
                        if (rawSampleData == null || size != Math.Ceiling(SampleData.Length / 2.0))
                        {//ignore this chunk if wrong size or if it comes first
                            input.Skip(size);
                        }
                        else
                        {
                            BitsPerSample = 24;
                            for (var x = 0; x < SampleData.Length; x++)
                            {
                                var b = new byte[3];
                                b[0] = (byte)input.ReadByte();
                                b[1] = rawSampleData[2 * x];
                                b[2] = rawSampleData[2 * x + 1];
                            }
                        }
                        if (size % 2 == 1)
                        {
                            if (input.ReadByte() != 0)
                            {
                                input.Position--;
                            }
                        }
                        break;
                    default:
                        throw new Exception("Invalid soundfont. Unknown chunk id: " + subID + ".");
                }
            }

            if (BitsPerSample == 16)
            {
                SampleData = rawSampleData;
            }
            else if (BitsPerSample != 24)
                throw new Exception("Only 16 and 24 bit samples are supported.");

        }
Exemple #20
0
        public override void Parse(IReadable buffer)
        {
            // The payload for verification
            long payload = buffer.Reader.ReadInt64();

            _Client.Queue(new PongPacket(_Client, payload));
        }
Exemple #21
0
        private static M <double> Transform(IReadable readable, CsvReaderSettings csvReaderSettings)
        {
            using (var sr = new StreamReader(readable.Open()))
            {
                var csvReader = new CsvReader(csvReaderSettings);
                var splitted  = csvReader.Read(sr).ToArray();
                var rows      = splitted.Length;

                int maxCols = 0;
                if (rows > 0)
                {
                    maxCols = splitted[0].Length;
                    for (var i = 1; i < rows; i++)
                    {
                        if (splitted[i].Length > maxCols)
                        {
                            maxCols = splitted[i].Length;
                        }
                    }
                }

                return(M.Generate <double>(rows, maxCols, (row, col) =>
                {
                    double value;
                    if (row < rows && col < splitted[row].Length && double.TryParse(splitted[row][col], NumberStyles.Any, CultureInfo.InvariantCulture, out value))
                    {
                        return value;
                    }
                    return 0;
                }));
            }
        }
 public Engine()
 {
     this.animals     = new List <IAnimal>();
     this.foodFactory = new FoodFactory();
     this.reader      = new Reader();
     this.writer      = new Writer();
 }
Exemple #23
0
        public static string Read8BitStringLength(this IReadable input, int length)
        {
            var s = new StringBuilder();
            var z = -1;

            for (var i = 0; i < length; i++)
            {
                var c = input.ReadByte();
                if (c == 0 && z == -1)
                {
                    z = i;
                }

                s.AppendChar(c);
            }

            var t = s.ToString();

            if (z >= 0)
            {
                return(t.Substring(0, z));
            }

            return(t);
        }
Exemple #24
0
        public static ushort ReadUInt16BE(this IReadable input)
        {
            var ch1 = input.ReadByte();
            var ch2 = input.ReadByte();

            return(Platform.Platform.ToUInt16((ch1 << 8) | (ch2 << 0)));
        }
Exemple #25
0
 public OrderController(ICreatable <Order> _creatable, IDeletable _deletable, IUpdatable <Order> _updatable, IReadable <Order> _readable)
 {
     creatable = _creatable;
     deletable = _deletable;
     updatable = _updatable;
     readable  = _readable;
 }
Exemple #26
0
        public PresetHeaderChunk(string id, int size, IReadable input)
            : base(id, size)
        {
            if (size % 38 != 0)
            {
                throw new Exception("Invalid SoundFont. The preset chunk was invalid.");
            }

            _rawPresets = new RawPreset[((int)(size / 38.0))];
            RawPreset lastPreset = null;

            for (int x = 0; x < _rawPresets.Length; x++)
            {
                var p = new RawPreset();
                p.Name                 = input.Read8BitStringLength(20);
                p.PatchNumber          = input.ReadUInt16LE();
                p.BankNumber           = input.ReadUInt16LE();
                p.StartPresetZoneIndex = input.ReadUInt16LE();
                p.Library              = input.ReadInt32LE();
                p.Genre                = input.ReadInt32LE();
                p.Morphology           = input.ReadInt32LE();
                if (lastPreset != null)
                {
                    lastPreset.EndPresetZoneIndex = Platform.Platform.ToUInt16((p.StartPresetZoneIndex - 1));
                }
                _rawPresets[x] = p;
                lastPreset     = p;
            }
        }
Exemple #27
0
        private bool FindHead(IReadable input, int attempts)
        {
            var match = 0;

            while (attempts > 0)
            {
                switch (input.ReadByte())
                {
                case (int)'M':
                    match = 1;
                    break;

                case (int)'T':
                    match = match == 1 ? 2 : 0;
                    break;

                case (int)'h':
                    match = match == 2 ? 3 : 0;
                    break;

                case (int)'d':
                    if (match == 3)
                    {
                        return(true);
                    }
                    match = 0;
                    break;
                }
                attempts--;
            }
            return(false);
        }
 public TreeReader(ByteArrayBuffer a_bytes, IReadable a_template, bool a_orderOnRead
                   )
 {
     i_template    = a_template;
     i_bytes       = a_bytes;
     i_orderOnRead = a_orderOnRead;
 }
Exemple #29
0
        private static MidiEvent ReadRealTimeMessage(IReadable input, int delta, byte status)
        {
            switch ((RealTimeTypeEnum)status)
            {
            case RealTimeTypeEnum.MidiClock:
                return(new RealTimeEvent(delta, status, 0, 0));

            case RealTimeTypeEnum.MidiTick:
                return(new RealTimeEvent(delta, status, 0, 0));

            case RealTimeTypeEnum.MidiStart:
                return(new RealTimeEvent(delta, status, 0, 0));

            case RealTimeTypeEnum.MidiContinue:
                return(new RealTimeEvent(delta, status, 0, 0));

            case RealTimeTypeEnum.MidiStop:
                return(new RealTimeEvent(delta, status, 0, 0));

            case RealTimeTypeEnum.ActiveSense:
                return(new RealTimeEvent(delta, status, 0, 0));

            case RealTimeTypeEnum.Reset:
                return(ReadMetaMessage(input, delta, status));

            default:
                throw new Exception("The real time message was invalid or unsupported : " + status);
            }
        }
Exemple #30
0
        private static MidiEvent ReadVoiceMessage(IReadable input, int delta, byte status, byte data1)
        {
            switch ((MidiEventTypeEnum)(status & 0xF0))
            {
            case MidiEventTypeEnum.NoteOff:
                return(new MidiEvent(delta, status, data1, (byte)input.ReadByte()));

            case MidiEventTypeEnum.NoteOn:
                var velocity = input.ReadByte();
                if (velocity == 0)
                {
                    status = (byte)((status & 0x0F) | 0x80);
                }
                return(new MidiEvent(delta, status, data1, (byte)velocity));

            case MidiEventTypeEnum.NoteAftertouch:
                return(new MidiEvent(delta, status, data1, (byte)input.ReadByte()));

            case MidiEventTypeEnum.Controller:
                return(new MidiEvent(delta, status, data1, (byte)input.ReadByte()));

            case MidiEventTypeEnum.ProgramChange:
                return(new MidiEvent(delta, status, data1, 0));

            case MidiEventTypeEnum.ChannelAftertouch:
                return(new MidiEvent(delta, status, data1, 0));

            case MidiEventTypeEnum.PitchBend:
                return(new MidiEvent(delta, status, data1, (byte)input.ReadByte()));

            default:
                throw new Exception("The status provided was not that of a voice message.");
            }
        }
		public TreeReader(ByteArrayBuffer a_bytes, IReadable a_template, bool a_orderOnRead
			)
		{
			i_template = a_template;
			i_bytes = a_bytes;
			i_orderOnRead = a_orderOnRead;
		}
Exemple #32
0
 public Engine(IReadable reader, IWritable writer)
 {
     this.reader = reader;
     this.writer = writer;
     heroes      = new List <BaseHero>();
     factory     = new Factory();
 }
Exemple #33
0
        public override async void Parse(IReadable buffer)
        {
            string username = buffer.Reader.ReadVarChar();

            // Query Mojang's API to get the player UUID
            HttpResponseMessage response = await Helpers.HttpClient.GetAsync($"https://api.mojang.com/users/profiles/minecraft/{username}");

            string body = await response.Content.ReadAsStringAsync();

            // Parse the response JSON
            Dictionary <string, string> reply = JsonSerializer.Deserialize <Dictionary <string, string> >(body);
            Guid uuid = new Guid(reply["id"]);

            Console.WriteLine($"Player logging in: {username} ({uuid})");
            _Client.Player = new Player(username, uuid);

            if (Settings.Configuration["online"] == "true")
            {
                _Client.Queue(new EncryptionRequestPacket(_Client));
            }
            else
            {
                _Client.Queue(new SetCompressionPacket(_Client));
                _Client.Queue(new LoginSuccessPacket(_Client));
                _Client.Queue(new JoinGamePacket(_Client));
            }
        }
Exemple #34
0
 public Modulator(IReadable input)
 {
     _sourceModulationData = new ModulatorType(input);
     _destinationGenerator = input.ReadUInt16LE();
     _amount = input.ReadInt16LE();
     _sourceModulationAmount = new ModulatorType(input);
     _sourceTransform = input.ReadUInt16LE();
 }
 public void SerializeReadables(IReadable readableItem)
 {
     using (StreamWriter writer = new StreamWriter(@"..\..\Database\Books\Readables.txt", true))
     {
         writer.WriteLine();
         writer.Write(readableItem);
     }
 }
 public IReference ForRhs(IReadable lhsResult)
 {
     var result=ReferenceEquals(lhsResult, storage) ? temp : storage;
       if(result==null) {
     throw new Exception("sad");
       }
       return result;
 }
        public void Add(IReadable readableItem)
        {
            if (readableItem == null)
            {
                throw new ArgumentException("Library item cannot be null");
            }

            this.readableItems.Add(readableItem);
        }
Exemple #38
0
 //protected void setNewThreadVisibility()
 //{
 //    if (groupID == 0)    // Meeting-Group
 //        newItem.Visible = false;
 //    else
 //        newItem.Visible = true;
 //}
 protected string evalPicImgString(IReadable forumObj, Person user)
 {
     if (forumObj.isReader(user))                       // read
         return "";
     else if (forumObj.isNew(user))                     // new & unread
         return "<img src='pic/GelberStern.png' />";
     else                                               // only unread
         return "<img src='pic/GruenerStern.png' />";
 }
 public void AddToWishedReadable(IReadable readableItem)
 {
     if (this.ReadItems.Contains(readableItem))
     {
         throw new LibraryUserException(LibraryUserException.ExistingReadableItemInListMsg);
     }
     else
     {
         this.ReadItems.Add(readableItem);
     }
 }
Exemple #40
0
 public GeneratorChunk(string id, int size, IReadable input) : base(id, size)
 {
     if(size % 4 != 0)
         throw new Exception("Invalid SoundFont. The presetzone chunk was invalid");
     Generators = new Generator[(int) ((size/4.0) - 1)];
     for (int x = 0; x < Generators.Length; x++)
     {
         Generators[x] = new Generator(input);
     }
     new Generator(input); // terminal record
 }
 public void AddReadableItem(IReadable readable)
 {
     if (this.readableItems.Contains(readable))
     {
         throw new ArgumentException(LibraryItemException.ExistingItemException);
     }
     else
     {
         this.readableItems.Add(readable);
     }
 }
Exemple #42
0
        public ModulatorType(IReadable input)
        {
            var raw = input.ReadUInt16LE();

            Polarity = (raw & 0x0200) == 0x0200 ? PolarityEnum.Bipolar : PolarityEnum.Unipolar;
            Direction = (raw & 0x0100) == 0x0100 ? DirectionEnum.MaxToMin : DirectionEnum.MinToMax;

            IsMidiContinuousController = ((raw & 0x0080) == 0x0080);
            SourceType = ((raw & (0xFC00)) >> 10);
            _controllerSource = TypeUtils.ToUInt16((raw & 0x007F));
        }
Exemple #43
0
 public ModulatorChunk(string id, int size, IReadable input)
     : base(id, size)
 {
     if(size % 10 != 0)
         throw new Exception("Invalid SoundFont. The presetzone chunk was invalid.");
     Modulators = new Modulator[(size/10) - 1];
     for (int x = 0; x < Modulators.Length; x++)
     {
         Modulators[x] = new Modulator(input);
     }
     new Modulator(input);
 }
        public SampleHeaderChunk(string id, int size, IReadable input)
            : base(id, size)
        {
            if (size % 46 != 0)
                throw new Exception("Invalid SoundFont. The sample header chunk was invalid.");
            SampleHeaders = new SampleHeader[(int)((size / 46.0) - 1)];

            for (int x = 0; x < SampleHeaders.Length; x++)
            {
                SampleHeaders[x] = new SampleHeader(input);
            }
            new SampleHeader(input); //read terminal record
        }
Exemple #45
0
 public SampleHeader(IReadable input)
 {
     Name = input.Read8BitStringLength(20);
     Start = input.ReadInt32LE();
     End = input.ReadInt32LE();
     StartLoop = input.ReadInt32LE();
     EndLoop = input.ReadInt32LE();
     SampleRate = input.ReadInt32LE();
     RootKey = (byte) input.ReadByte();
     Tune = TypeUtils.ToInt16(input.ReadByte());
     SampleLink = input.ReadUInt16LE();
     SoundFontSampleLink = (SFSampleLink) input.ReadUInt16LE();
 }
Exemple #46
0
        public void Load(IReadable input)
        {
            var id = input.Read8BitChars(4);
            var size = input.ReadInt32LE();
            if (id.ToLower() != "riff")
                throw new Exception("Invalid soundfont. Could not find RIFF header.");
            id = input.Read8BitChars(4);
            if (id.ToLower() != "sfbk")
                throw new Exception("Invalid soundfont. Riff type is invalid.");

            Logger.Debug("Reading info chunk");
            Info = new SoundFontInfo(input);
            Logger.Debug("Reading sampledata chunk");
            SampleData = new SoundFontSampleData(input);
            Logger.Debug("Reading preset chunk");
            Presets = new SoundFontPresets(input);
        }
Exemple #47
0
 public InstrumentChunk(string id, int size, IReadable input)
     : base(id, size)
 {
     if (size % 22 != 0)
         throw new Exception("Invalid SoundFont. The preset chunk was invalid.");
     _rawInstruments = new RawInstrument[((int)(size / 22.0))];
     RawInstrument lastInstrument = null;
     for (int x = 0; x < _rawInstruments.Length; x++)
     {
         var i = new RawInstrument();
         i.Name = input.Read8BitStringLength(20);
         i.StartInstrumentZoneIndex = input.ReadUInt16LE();
         if (lastInstrument != null)
         {
             lastInstrument.EndInstrumentZoneIndex = TypeUtils.ToUInt16((i.StartInstrumentZoneIndex - 1));
         }
         _rawInstruments[x] = i;
         lastInstrument = i;
     }
 }
Exemple #48
0
        public SoundFontInfo(IReadable input)
        {
            Tools = "";
            Comments = "";
            Copyright = "";
            TargetProduct = "";
            Author = "";
            DataRom = "";
            CreationDate = "";
            BankName = "";
            SoundEngine = "";
            var id = input.Read8BitChars(4);
            var size = input.ReadInt32LE();
            if (id.ToLower() != "list")
                throw new Exception("Invalid soundfont. Could not find INFO LIST chunk.");
            var readTo = input.Position + size;
            id = input.Read8BitChars(4);
            if (id.ToLower() != "info")
                throw new Exception("Invalid soundfont. The LIST chunk is not of type INFO.");

            while (input.Position < readTo)
            {
                id = input.Read8BitChars(4);
                size = input.ReadInt32LE();
                switch (id.ToLower())
                {
                    case "ifil":
                        SfVersionMajor = input.ReadInt16LE();
                        SfVersionMinor = input.ReadInt16LE();
                        break;
                    case "isng":
                        SoundEngine = input.Read8BitStringLength(size);
                        break;
                    case "inam":
                        BankName = input.Read8BitStringLength(size);
                        break;
                    case "irom":
                        DataRom = input.Read8BitStringLength(size);
                        break;
                    case "iver":
                        RomVersionMajor = input.ReadInt16LE();
                        RomVersionMinor = input.ReadInt16LE();
                        break;
                    case "icrd":
                        CreationDate = input.Read8BitStringLength(size);
                        break;
                    case "ieng":
                        Author = input.Read8BitStringLength(size);
                        break;
                    case "iprd":
                        TargetProduct = input.Read8BitStringLength(size);
                        break;
                    case "icop":
                        Copyright = input.Read8BitStringLength(size);
                        break;
                    case "icmt":
                        Comments = input.Read8BitStringLength(size);
                        break;
                    case "isft":
                        Tools = input.Read8BitStringLength(size);
                        break;
                    default:
                        throw new Exception("Invalid soundfont. The Chunk: " + id + " was not expected.");
                }
            }
        }
Exemple #49
0
		public virtual void Read(ByteArrayBuffer buffer, IReadable template)
		{
			Clear();
			_tree = new TreeReader(buffer, template).Read();
			Changed();
		}
Exemple #50
0
        public SoundFontPresets(IReadable input)
        {
            var id = input.Read8BitChars(4);
            var size = input.ReadInt32LE();
            if (id.ToLower() != "list")
                throw new Exception("Invalid soundfont. Could not find pdta LIST chunk.");
            var readTo = input.Position + size;
            id = input.Read8BitChars(4);
            if (id.ToLower() != "pdta")
                throw new Exception("Invalid soundfont. The LIST chunk is not of type pdta.");

            Modulator[] presetModulators = null;
            Generator[] presetGenerators = null;
            Modulator[] instrumentModulators = null;
            Generator[] instrumentGenerators = null;

            ZoneChunk pbag = null;
            ZoneChunk ibag = null;
            PresetHeaderChunk phdr = null;
            InstrumentChunk inst = null;

            while (input.Position < readTo)
            {
                id = input.Read8BitChars(4);
                size = input.ReadInt32LE();
                switch (id.ToLower())
                {
                    case "phdr":
                        phdr = new PresetHeaderChunk(id, size, input);
                        break;
                    case "pbag":
                        pbag = new ZoneChunk(id, size, input);
                        break;
                    case "pmod":
                        presetModulators = new ModulatorChunk(id, size, input).Modulators;
                        break;
                    case "pgen":
                        presetGenerators = new GeneratorChunk(id, size, input).Generators;
                        break;
                    case "inst":
                        inst = new InstrumentChunk(id, size, input);
                        break;
                    case "ibag":
                        ibag = new ZoneChunk(id, size, input);
                        break;
                    case "imod":
                        instrumentModulators = new ModulatorChunk(id, size, input).Modulators;
                        break;
                    case "igen":
                        instrumentGenerators = new GeneratorChunk(id, size, input).Generators;
                        break;
                    case "shdr":
                        SampleHeaders = new SampleHeaderChunk(id, size, input).SampleHeaders;
                        break;
                    default:
                        throw new Exception("Invalid soundfont. Unrecognized sub chunk: " + id);
                }
            }
            var pZones = pbag.ToZones(presetModulators, presetGenerators);
            PresetHeaders = phdr.ToPresets(pZones);
            var iZones = ibag.ToZones(instrumentModulators, instrumentGenerators);
            Instruments = inst.ToInstruments(iZones);
        }
		public TreeReader(ByteArrayBuffer a_bytes, IReadable a_template) : this(a_bytes, 
			a_template, false)
		{
		}
Exemple #52
0
        public void LoadSf2(IReadable input)
        {
            Reset();

            Logger.Debug("Reading SF2");
            var sf = new SoundFont();
            sf.Load(input);

            Logger.Debug("Building patchbank");
            Name = sf.Info.BankName;
            Comments = sf.Info.Comments;

            //load samples
            foreach (var sampleHeader in sf.Presets.SampleHeaders)
            {
                _assets.SampleAssets.Add(new SampleDataAsset(sampleHeader, sf.SampleData));
            }

            //create instrument regions first
            var sfinsts = ReadSf2Instruments(sf.Presets.Instruments);
            //load each patch
            foreach (var p in sf.Presets.PresetHeaders)
            {
                Generator[] globalGens = null;
                int i;
                if (p.Zones[0].Generators.Length == 0 ||
                    p.Zones[0].Generators[p.Zones[0].Generators.Length - 1].GeneratorType != GeneratorEnum.Instrument)
                {
                    globalGens = p.Zones[0].Generators;
                    i = 1;
                }
                else
                {
                    i = 0;
                }

                var regionList = new FastList<Sf2Region>();
                while (i < p.Zones.Length)
                {
                    byte presetLoKey = 0;
                    byte presetHiKey = 127;
                    byte presetLoVel = 0;
                    byte presetHiVel = 127;

                    if (p.Zones[i].Generators[0].GeneratorType == GeneratorEnum.KeyRange)
                    {
                        if (TypeUtils.IsLittleEndian)
                        {
                            presetLoKey = TypeUtils.ToUInt8(p.Zones[i].Generators[0].AmountInt16 & 0xFF);
                            presetHiKey = TypeUtils.ToUInt8((p.Zones[i].Generators[0].AmountInt16 >> 8) & 0xFF);
                        }
                        else
                        {
                            presetHiKey = TypeUtils.ToUInt8(p.Zones[i].Generators[0].AmountInt16 & 0xFF);
                            presetLoKey = TypeUtils.ToUInt8((p.Zones[i].Generators[0].AmountInt16 >> 8) & 0xFF);
                        }
                        if (p.Zones[i].Generators.Length > 1 && p.Zones[i].Generators[1].GeneratorType == GeneratorEnum.VelocityRange)
                        {
                            if (TypeUtils.IsLittleEndian)
                            {
                                presetLoVel = TypeUtils.ToUInt8(p.Zones[i].Generators[1].AmountInt16 & 0xFF);
                                presetHiVel = TypeUtils.ToUInt8((p.Zones[i].Generators[1].AmountInt16 >> 8) & 0xFF);
                            }
                            else
                            {
                                presetHiVel = TypeUtils.ToUInt8(p.Zones[i].Generators[1].AmountInt16 & 0xFF);
                                presetLoVel = TypeUtils.ToUInt8((p.Zones[i].Generators[1].AmountInt16 >> 8) & 0xFF);
                            }
                        }
                    }
                    else if (p.Zones[i].Generators[0].GeneratorType == GeneratorEnum.VelocityRange)
                    {
                        if (TypeUtils.IsLittleEndian)
                        {
                            presetLoVel = TypeUtils.ToUInt8(p.Zones[i].Generators[0].AmountInt16 & 0xFF);
                            presetHiVel = TypeUtils.ToUInt8((p.Zones[i].Generators[0].AmountInt16 >> 8) & 0xFF);
                        }
                        else
                        {
                            presetHiVel = TypeUtils.ToUInt8(p.Zones[i].Generators[0].AmountInt16 & 0xFF);
                            presetLoVel = TypeUtils.ToUInt8((p.Zones[i].Generators[0].AmountInt16 >> 8) & 0xFF);
                        }
                    }
                    if (p.Zones[i].Generators[p.Zones[i].Generators.Length - 1].GeneratorType == GeneratorEnum.Instrument)
                    {
                        var insts = sfinsts[p.Zones[i].Generators[p.Zones[i].Generators.Length - 1].AmountInt16];
                        foreach (var inst in insts)
                        {
                            byte instLoKey;
                            byte instHiKey;
                            byte instLoVel;
                            byte instHiVel;
                            if (TypeUtils.IsLittleEndian)
                            {
                                instLoKey = TypeUtils.ToUInt8(inst.Generators[(int)GeneratorEnum.KeyRange] & 0xFF);
                                instHiKey = TypeUtils.ToUInt8((inst.Generators[(int)GeneratorEnum.KeyRange] >> 8) & 0xFF);
                                instLoVel = TypeUtils.ToUInt8(inst.Generators[(int)GeneratorEnum.VelocityRange] & 0xFF);
                                instHiVel = TypeUtils.ToUInt8((inst.Generators[(int)GeneratorEnum.VelocityRange] >> 8) & 0xFF);
                            }
                            else
                            {
                                instHiKey = TypeUtils.ToUInt8(inst.Generators[(int)GeneratorEnum.KeyRange] & 0xFF);
                                instLoKey = TypeUtils.ToUInt8((inst.Generators[(int)GeneratorEnum.KeyRange] >> 8) & 0xFF);
                                instHiVel = TypeUtils.ToUInt8(inst.Generators[(int)GeneratorEnum.VelocityRange] & 0xFF);
                                instLoVel = TypeUtils.ToUInt8((inst.Generators[(int)GeneratorEnum.VelocityRange] >> 8) & 0xFF);
                            }
                            if ((instLoKey <= presetHiKey && presetLoKey <= instHiKey) && (instLoVel <= presetHiVel && presetLoVel <= instHiVel))
                            {
                                var r = new Sf2Region();
                                Std.ArrayCopy(inst.Generators, 0, r.Generators, 0, r.Generators.Length);
                                ReadSf2Region(r, globalGens, p.Zones[i].Generators, true);
                                regionList.Add(r);
                            }
                        }
                    }
                    i++;
                }
                var mp = new MultiPatch(p.Name);
                mp.LoadSf2(regionList.ToArray(), _assets);
                _assets.PatchAssets.Add(new PatchAsset(mp.Name, mp));
                AssignPatchToBank(mp, p.BankNumber, p.PatchNumber, p.PatchNumber);
            }
        }
Exemple #53
0
 public virtual void Init(IReadable data)
 {
     Data = data;
 }
        public bool isAlreadyInTheLibrary(IReadable readableItem)
        {
            foreach (var readable in this.ReadableItems)
            {
                if (readable.Name == readableItem.Name)
                {
                    return true;
                }
            }

            return false;
        }
        public void RemoveReadableItem(IReadable readable)
        {
            if (!this.readableItems.Contains(readable))
            {
                throw new ArgumentException(LibraryItemException.NotExistingItemException);
            }

            else
            {
                this.readableItems.Remove(readable);
            }
        }
 public void SaveReadableItem(IReadable readable)
 {
     if (!this.isAlreadyInTheLibrary(readable))
     {
         this.dataManager.SerializeReadables(readable);
     }
 }
 public void RemoveCurrentReadable(IReadable readableItem)
 {
     if (this.ReadItems.Contains(readableItem))
     {
         throw new LibraryUserException(LibraryUserException.ExistingReadableItemInListMsg);
     }
     else
     {
         this.ReadItems.Remove(readableItem);
     }
 }
 public void FinishReadable(IReadable readableItem)
 {
     RemoveCurrentReadable(readableItem);
     AddReadItem(readableItem);
 }
Exemple #59
0
 public void SetReader(IReadable ReadR)
 {
     myIReadable = ReadR;
 }
Exemple #60
0
 public MyReader(IReadable r)
 {
     myIReadable = r;
 }