public Engine() { this.heroes = new List <BaseHero>(); this.heroFactory = new HeroFactory(); this.reader = new Reader(); this.writer = new Writer(); }
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; } }
/// <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); }
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); }
private static string ToString(IReadable readable) { using (var sr = new StreamReader(readable.Open())) { return(sr.ReadToEnd()); } }
public static short ReadInt16LE(this IReadable input) { var ch1 = input.ReadByte(); var ch2 = input.ReadByte(); return(Platform.ToInt16((ch2 << 8) | ch1)); }
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)); }
public static byte[] ReadByteArray(this IReadable input, int length) { var v = new byte[length]; input.Read(v, 0, length); return(v); }
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)); }
internal Embedding(IContextImpl context, string name, IReadable readable) { Name = name; Context = context; Readable = readable; Properties = new Dictionary <string, string>(); }
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); }
public static short ReadInt16BE(this IReadable input) { var ch1 = input.ReadByte(); var ch2 = input.ReadByte(); return(TypeUtils.ToInt16((ch1 << 8) | (ch2 << 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."); }
public override void Parse(IReadable buffer) { // The payload for verification long payload = buffer.Reader.ReadInt64(); _Client.Queue(new PongPacket(_Client, payload)); }
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(); }
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); }
public static ushort ReadUInt16BE(this IReadable input) { var ch1 = input.ReadByte(); var ch2 = input.ReadByte(); return(Platform.Platform.ToUInt16((ch1 << 8) | (ch2 << 0))); }
public OrderController(ICreatable <Order> _creatable, IDeletable _deletable, IUpdatable <Order> _updatable, IReadable <Order> _readable) { creatable = _creatable; deletable = _deletable; updatable = _updatable; readable = _readable; }
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; } }
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; }
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); } }
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 Engine(IReadable reader, IWritable writer) { this.reader = reader; this.writer = writer; heroes = new List <BaseHero>(); factory = new Factory(); }
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)); } }
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); }
//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); } }
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); } }
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)); }
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 }
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(); }
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); }
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; } }
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."); } } }
public virtual void Read(ByteArrayBuffer buffer, IReadable template) { Clear(); _tree = new TreeReader(buffer, template).Read(); Changed(); }
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) { }
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); } }
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 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); }
public void SetReader(IReadable ReadR) { myIReadable = ReadR; }
public MyReader(IReadable r) { myIReadable = r; }