示例#1
0
 public RiffChunk GetNextSubChunk()
 {
     if (this.riffFile.BaseStream.Position + 8L < this.dataOffset + (long)((ulong)this.chunkSize))
     {
         RiffChunk expr_2E = new RiffChunk(this.riffFile);
         expr_2E.ReadChunk();
         return(expr_2E);
     }
     return(null);
 }
示例#2
0
        public SampleDataChunk(RiffChunk chunk)
        {
            string text = chunk.ReadChunkID();

            if (text != "sdta")
            {
                throw new InvalidDataException(string.Format("Not a sample data chunk ({0})", text));
            }
            this.sampleData = chunk.GetData();
        }
示例#3
0
        internal InfoChunk(RiffChunk chunk)
        {
            bool ifilPresent = false;
            bool inamPresent = false;

            if (chunk.ReadChunkID() != "INFO")
            {
                throw new InvalidDataException("Not an INFO chunk");
            }
            //this.chunk = chunk;
            RiffChunk c;

            while ((c = chunk.GetNextSubChunk()) != null)
            {
                switch (c.ChunkID)
                {
                case "ifil":
                    ifilPresent      = true;
                    SoundFontVersion = c.GetDataAsStructure(new SFVersionBuilder());
                    break;

                case "isng":
                    WaveTableSoundEngine = c.GetDataAsString();
                    break;

                case "INAM":
                    inamPresent = true;
                    BankName    = c.GetDataAsString();
                    break;

                case "irom":
                    DataROM = c.GetDataAsString();
                    break;

                case "iver":
                    ROMVersion = c.GetDataAsStructure(new SFVersionBuilder());
                    break;

                case "ICRD":
                    CreationDate = c.GetDataAsString();
                    break;

                case "IENG":
                    Author = c.GetDataAsString();
                    break;

                case "IPRD":
                    TargetProduct = c.GetDataAsString();
                    break;

                case "ICOP":
                    Copyright = c.GetDataAsString();
                    break;

                case "ICMT":
                    Comments = c.GetDataAsString();
                    break;

                case "ISFT":
                    Tools = c.GetDataAsString();
                    break;

                default:
                    throw new InvalidDataException($"Unknown chunk type {c.ChunkID}");
                }
            }
            if (!ifilPresent)
            {
                throw new InvalidDataException("Missing SoundFont version information");
            }
            // n.b. issue #150 - it is valid for isng not to be present
            if (!inamPresent)
            {
                throw new InvalidDataException("Missing SoundFont name information");
            }
        }
示例#4
0
        internal PresetsChunk(RiffChunk chunk)
        {
            string header = chunk.ReadChunkID();

            if (header != "pdta")
            {
                throw new InvalidDataException(String.Format("Not a presets data chunk ({0})", header));
            }

            RiffChunk c;

            while ((c = chunk.GetNextSubChunk()) != null)
            {
                switch (c.ChunkID)
                {
                case "PHDR":
                case "phdr":
                    c.GetDataAsStructureArray(presetHeaders);
                    break;

                case "PBAG":
                case "pbag":
                    c.GetDataAsStructureArray(presetZones);
                    break;

                case "PMOD":
                case "pmod":
                    c.GetDataAsStructureArray(presetZoneModulators);
                    break;

                case "PGEN":
                case "pgen":
                    c.GetDataAsStructureArray(presetZoneGenerators);
                    break;

                case "INST":
                case "inst":
                    c.GetDataAsStructureArray(instruments);
                    break;

                case "IBAG":
                case "ibag":
                    c.GetDataAsStructureArray(instrumentZones);
                    break;

                case "IMOD":
                case "imod":
                    c.GetDataAsStructureArray(instrumentZoneModulators);
                    break;

                case "IGEN":
                case "igen":
                    c.GetDataAsStructureArray(instrumentZoneGenerators);
                    break;

                case "SHDR":
                case "shdr":
                    c.GetDataAsStructureArray(sampleHeaders);
                    break;

                default:
                    throw new InvalidDataException(String.Format("Unknown chunk type {0}", c.ChunkID));
                }
            }

            // now link things up
            instrumentZoneGenerators.Load(sampleHeaders.SampleHeaders);
            instrumentZones.Load(instrumentZoneModulators.Modulators, instrumentZoneGenerators.Generators);
            instruments.LoadZones(instrumentZones.Zones);
            presetZoneGenerators.Load(instruments.Instruments);
            presetZones.Load(presetZoneModulators.Modulators, presetZoneGenerators.Generators);
            presetHeaders.LoadZones(presetZones.Zones);
            sampleHeaders.RemoveEOS();
        }