示例#1
0
        public PresetHeaderChunk(string id, int size, BinaryReader reader)
            : base(id, size)
        {
            if (size % 38 != 0)
            {
                throw new InvalidDataException("Invalid SoundFont. The preset chunk was invalid.");
            }
            rawPresets = new RawPreset[size / 38];
            RawPreset lastPreset = null;

            for (int x = 0; x < rawPresets.Length; x++)
            {
                RawPreset p = new RawPreset();
                p.name                 = IOHelper.Read8BitString(reader, 20);
                p.patchNumber          = reader.ReadUInt16();
                p.bankNumber           = reader.ReadUInt16();
                p.startPresetZoneIndex = reader.ReadUInt16();
                p.library              = reader.ReadUInt32();
                p.genre                = reader.ReadUInt32();
                p.morphology           = reader.ReadUInt32();
                if (lastPreset != null)
                {
                    lastPreset.endPresetZoneIndex = (ushort)(p.startPresetZoneIndex - 1);
                }
                rawPresets[x] = p;
                lastPreset    = p;
            }
        }
示例#2
0
 public PresetHeader[] ToPresets(Zone[] presetZones)
 {
     PresetHeader[] presets = new PresetHeader[rawPresets.Length - 1];
     for (int x = 0; x < presets.Length; x++)
     {
         RawPreset    rawPreset = rawPresets[x];
         PresetHeader p         = new PresetHeader();
         p.BankNumber  = rawPreset.bankNumber;
         p.Genre       = (int)rawPreset.genre;
         p.Library     = (int)rawPreset.library;
         p.Morphology  = (int)rawPreset.morphology;
         p.Name        = rawPreset.name;
         p.PatchNumber = rawPreset.patchNumber;
         p.Zones       = new Zone[rawPreset.endPresetZoneIndex - rawPreset.startPresetZoneIndex + 1];
         Array.Copy(presetZones, rawPreset.startPresetZoneIndex, p.Zones, 0, p.Zones.Length);
         presets[x] = p;
     }
     return(presets);
 }
 public PresetHeaderChunk(string id, int size, BinaryReader reader)
     : base(id, size)
 {
     if (size % 38 != 0)
         throw new Exception("Invalid SoundFont. The preset chunk was invalid.");
     rawPresets = new RawPreset[size / 38];
     RawPreset lastPreset = null;
     for (int x = 0; x < rawPresets.Length; x++)
     {
         RawPreset p = new RawPreset();
         p.name = IOHelper.Read8BitString(reader, 20);
         p.patchNumber = reader.ReadUInt16();
         p.bankNumber = reader.ReadUInt16();
         p.startPresetZoneIndex = reader.ReadUInt16();
         p.library = reader.ReadUInt32();
         p.genre = reader.ReadUInt32();
         p.morphology = reader.ReadUInt32();
         if (lastPreset != null)
             lastPreset.endPresetZoneIndex = (ushort)(p.startPresetZoneIndex - 1);
         rawPresets[x] = p;
         lastPreset = p;
     }
 }