public INFOsub(BinaryReader bx, FileStream fx, INFO nfo) { long orig = fx.Position; Type = IOHelper.GetString(bx.ReadChars(4)); Length = bx.ReadInt32(); nfo.nfosub.Add(orig, this); }
/// <summary> /// Read all but sample data from sf2 into memory. /// </summary> /// <param name="fname">File name.</param> public void init(string fname) { outp = string.Empty; nn = MidiHelper.OctaveMacro(); fstream = File.Open(fname, FileMode.Open, FileAccess.Read); bread = new BinaryReader(fstream,System.Text.Encoding.ASCII); riff = new RIFF(fstream,bread); int len; string format = string.Format( "RIFF: '{0}', " + "Length: {1:###,###,###,##0}, " + "Tag: '{2}'\n" + "----------------------\n", IOHelper.GetString(riff.header), riff.Length, IOHelper.GetString(riff.Tag) ); System.Diagnostics.Debug.Print(format); outp += format; foreach (KeyValuePair<long,SoundFont2.RIFFsub> rsx in riff.rss) { outp += ("" + rsx.Key.ToString("##,###,###,##0")).PadLeft(12,' ') + " | " + IOHelper.GetString(rsx.Value.header)+(" <"+rsx.Value.Length.ToString() +">").PadLeft(16)+" \'" + IOHelper.GetString(rsx.Value.Tag) + "\'\r\n"; string foo = (IOHelper.GetString(rsx.Value.Tag)); switch (foo) { case "INFO": len = rsx.Value.Length; nfo = new INFO(len,bread,fstream); foreach (KeyValuePair<long, INFOsub> mox in nfo.nfosub) { string vers = ""; long po; ZSTR nx; switch (mox.Value.Type) { case "ifil": po = fstream.Position; fstream.Seek(mox.Key+8, SeekOrigin.Begin); nfo.ifil.Major = bread.ReadInt16(); nfo.ifil.Minor = bread.ReadInt16(); fstream.Seek(po, SeekOrigin.Begin); vers = nfo.ifil.Major.ToString() + "." + nfo.ifil.Minor.ToString(); break; case "isng": po = fstream.Position; fstream.Seek(mox.Key+8, SeekOrigin.Begin); nfo.isng.StrValue = bread.ReadChars(mox.Value.Length); fstream.Seek(po, SeekOrigin.Begin); vers = IOHelper.GetString(nfo.isng.StrValue).ToString() + ""; break; case "INAM": po = fstream.Position; fstream.Seek(mox.Key+8, SeekOrigin.Begin); nfo.inam.StrValue = bread.ReadChars(mox.Value.Length); fstream.Seek(po, SeekOrigin.Begin); vers = IOHelper.GetString(nfo.inam.StrValue).ToString() + ""; break; default: po = fstream.Position; nx = new ZSTR(); fstream.Seek(mox.Key+8, SeekOrigin.Begin); nx.StrValue = bread.ReadChars(mox.Value.Length); fstream.Seek(po, SeekOrigin.Begin); vers = IOHelper.GetString(nx.StrValue).ToString().Trim((char)0).Trim((char)0x22) + ""; break; } outp += "" + mox.Key.ToString("##,###,###,##0").PadLeft(12) + ": " + (mox.Value.Type) + ": " +vers.TrimEnd((char)0)+ "\r\n"; } break; case "pdta": len = rsx.Value.Length; hyde = new listHYDRA(fstream,bread,rsx.Key); outp += "PHDR"+hyde.phdr.Count.ToString()+"\r\n"; foreach (PHDR ph in hyde.phdr) { outp += ph.preset.ToString().PadLeft(3,'0') + ":" + ph.bank.ToString().PadLeft(3,'0') + " " + IOHelper.GetZerodStr(ph.presetName) + " (lib=" + ph.genera.ToString() + " genera=" + ph.genera.ToString() + " morphology=" + ph.morphology.ToString() + " pbagndx=" + ph.presetBagIndex.ToString() + ")\r\n"; } outp += "PBAG"+hyde.pbag.Count.ToString()+"\r\n"; foreach (PBAG pb in hyde.pbag) outp += "\t" + pb.gen.ToString() + ":" + pb.mod.ToString() + "\r\n"; outp += "PGEN"+hyde.pgen.Count.ToString()+"\r\n"; foreach (PGEN pm in hyde.pgen) { outp += "\tsfGen="+pm.SFGen.ToString() + " hi=" + pm.TypeHi.ToString() + " lo=" + pm.TypeLo.ToString() + "\r\n"; } outp += "PMOD"+hyde.pmod.Count.ToString()+"\r\n"; foreach (PMOD pm in hyde.pmod) { outp += "\tsrc="+pm.src.ToString() + " dst=" + pm.dst.ToString() + " amt=" + pm.amt.ToString() + " amtsrc=" + pm.amtsrc.ToString() + " trans=" + pm.trans.ToString()+ "\r\n"; } outp += "INST"+hyde.inst.Count.ToString()+"\r\n"; foreach (INST pms in hyde.inst) { outp += "name="+IOHelper.GetZerodStr(pms.iName) + " iBag=" + pms.bagIndex.ToString() + "\r\n"; } outp += "IBAG: "+hyde.ibag.Count.ToString()+"\r\n"; foreach (IBAG pms in hyde.ibag) { outp += "\tBagIndex=" + pms.gen.ToString() + " dst=" + pms.mod.ToString() + "\r\n"; } outp += "IMOD: "+hyde.imod.Count.ToString()+"\r\n"; foreach (IMOD pm in hyde.imod) { outp += string.Format( "\t amt: {0}, src: {1}, dst: {2}, amtsrc: {3}, trans: {4}\n", pm.amt,pm.src,pm.dst,pm.amtsrc,pm.trans ); } outp += "SHDR: "+hyde.shdr.Count.ToString()+"\r\n"; foreach (SHDR pm in hyde.shdr) { outp += IOHelper.GetZerodStr(pm.iName).ToString() + " src=" + pm.LenA.ToString() + " trans=" + pm.LenB.ToString() + "\r\n"; } break; } } fstream.Close(); bread.Close(); // } // ofd.Dispose(); }