public RIFF ToDLSRegion() { RIFF rgn = new RIFF("rgn "); byte[] rgnh = new byte [12]; BitConv.ToInt16(rgnh, 0, minimumnote); BitConv.ToInt16(rgnh, 2, maximumnote); BitConv.ToInt16(rgnh, 4, 0); BitConv.ToInt16(rgnh, 6, 127); BitConv.ToInt16(rgnh, 8, 0); BitConv.ToInt16(rgnh, 10, 0); rgn.Items.Add(new RIFFData("rgnh", rgnh)); byte[] wsmp = new byte [20 /* 36 */]; BitConv.ToInt32(wsmp, 0, 20); BitConv.ToInt16(wsmp, 4, centernote); BitConv.ToInt16(wsmp, 6, pitchshift); BitConv.ToInt32(wsmp, 8, volume - 64 << 16); BitConv.ToInt32(wsmp, 12, 0); BitConv.ToInt32(wsmp, 16, 0 /* 1 */); /*BitConv.ToInt32(wsmp,20,16); * BitConv.ToInt32(wsmp,24,0); * BitConv.ToInt32(wsmp,28,LOOPSTART); * BitConv.ToInt32(wsmp,28,LOOPLENGTH);*/ rgn.Items.Add(new RIFFData("wsmp", wsmp)); byte[] wlnk = new byte [12]; BitConv.ToInt16(wlnk, 0, 0); BitConv.ToInt16(wlnk, 2, 0); BitConv.ToInt32(wlnk, 4, 3); // ??? BitConv.ToInt32(wlnk, 8, wave - 1); rgn.Items.Add(new RIFFData("wlnk", wlnk)); return(rgn); }
public byte[] ToMIDI() { RIFF riff = new RIFF("MIDI"); byte[] mthd = new byte [6]; BEBitConv.ToInt16(mthd, 0, 0); BEBitConv.ToInt16(mthd, 2, 1); BEBitConv.ToInt16(mthd, 4, resolution); riff.Items.Add(new RIFFData("MThd", mthd)); byte[] mtrk = new byte [15 + data.Length]; mtrk[0] = 0; mtrk[1] = 0xFF; mtrk[2] = 0x51; mtrk[3] = 0x03; MIDIConv.To3BE(mtrk, 4, tempo); mtrk[7] = 0; mtrk[8] = 0xFF; mtrk[9] = 0x58; mtrk[10] = 0x04; BEBitConv.ToInt16(mtrk, 11, rhythm); mtrk[13] = 0x18; mtrk[14] = 0x08; data.CopyTo(mtrk, 15); riff.Items.Add(new RIFFData("MTrk", mtrk)); return(riff.SaveBody(Endianness.BigEndian)); }
public static RIFF ToWave(byte[] data,int samplerate) { if (data == null) throw new ArgumentNullException("data"); byte[] format = new byte [16]; BitConv.ToInt16(format,0,1); BitConv.ToInt16(format,2,1); BitConv.ToInt32(format,4,samplerate); BitConv.ToInt32(format,8,samplerate * 2); BitConv.ToInt16(format,12,2); BitConv.ToInt16(format,14,16); RIFF wave = new RIFF("WAVE"); wave.Items.Add(new RIFFData("fmt ",format)); wave.Items.Add(new RIFFData("data",data)); return wave; }
public RIFF ToDLSInstrument(int programnumber, bool drumkit) { RIFF ins = new RIFF("ins "); byte[] insh = new byte [12]; BitConv.ToInt32(insh, 0, tones.Count); BitConv.ToInt32(insh, 4, drumkit ? (1 << 31) : 0); BitConv.ToInt32(insh, 8, programnumber); ins.Items.Add(new RIFFData("insh", insh)); RIFF lrgn = new RIFF("lrgn"); foreach (VHTone tone in tones) { lrgn.Items.Add(tone.ToDLSRegion()); } ins.Items.Add(lrgn); return(ins); }
public static RIFF ToWave(byte[] data, int samplerate) { if (data == null) { throw new ArgumentNullException("data"); } byte[] format = new byte [16]; BitConv.ToInt16(format, 0, 1); BitConv.ToInt16(format, 2, 1); BitConv.ToInt32(format, 4, samplerate); BitConv.ToInt32(format, 8, samplerate * 2); BitConv.ToInt16(format, 12, 2); BitConv.ToInt16(format, 14, 16); RIFF wave = new RIFF("WAVE"); wave.Items.Add(new RIFFData("fmt ", format)); wave.Items.Add(new RIFFData("data", data)); return(wave); }
public RIFF ToDLSRegion() { RIFF rgn = new RIFF("rgn "); byte[] rgnh = new byte [12]; BitConv.ToInt16(rgnh,0,minimumnote); BitConv.ToInt16(rgnh,2,maximumnote); BitConv.ToInt16(rgnh,4,0); BitConv.ToInt16(rgnh,6,127); BitConv.ToInt16(rgnh,8,0); BitConv.ToInt16(rgnh,10,0); rgn.Items.Add(new RIFFData("rgnh",rgnh)); byte[] wsmp = new byte [20 /* 36 */]; BitConv.ToInt32(wsmp,0,20); BitConv.ToInt16(wsmp,4,centernote); BitConv.ToInt16(wsmp,6,pitchshift); BitConv.ToInt32(wsmp,8,volume - 64 << 16); BitConv.ToInt32(wsmp,12,0); BitConv.ToInt32(wsmp,16,0 /* 1 */); /*BitConv.ToInt32(wsmp,20,16); BitConv.ToInt32(wsmp,24,0); BitConv.ToInt32(wsmp,28,LOOPSTART); BitConv.ToInt32(wsmp,28,LOOPLENGTH);*/ rgn.Items.Add(new RIFFData("wsmp",wsmp)); byte[] wlnk = new byte [12]; BitConv.ToInt16(wlnk,0,0); BitConv.ToInt16(wlnk,2,0); BitConv.ToInt32(wlnk,4,3); // ??? BitConv.ToInt32(wlnk,8,wave - 1); rgn.Items.Add(new RIFFData("wlnk",wlnk)); return rgn; }
public RIFF ToDLSInstrument(int programnumber,bool drumkit) { RIFF ins = new RIFF("ins "); byte[] insh = new byte [12]; BitConv.ToInt32(insh,0,tones.Count); BitConv.ToInt32(insh,4,drumkit ? (1 << 31) : 0); BitConv.ToInt32(insh,8,programnumber); ins.Items.Add(new RIFFData("insh",insh)); RIFF lrgn = new RIFF("lrgn"); foreach (VHTone tone in tones) { lrgn.Items.Add(tone.ToDLSRegion()); } ins.Items.Add(lrgn); return ins; }
public RIFF ToDLS() { RIFF dls = new RIFF("DLS "); byte[] colh = new byte [4]; BitConv.ToInt32(colh,0,programs.Count * 2); dls.Items.Add(new RIFFData("colh",colh)); RIFF lins = new RIFF("lins"); for (int i = 0;i < 128;i++) { if (programs.ContainsKey(i)) { lins.Items.Add(programs[i].ToDLSInstrument(i,false)); lins.Items.Add(programs[i].ToDLSInstrument(i,true)); } } dls.Items.Add(lins); RIFF wvpl = new RIFF("wvpl"); foreach (SampleSet sampleset in waves) { List<byte> pcm = new List<byte>(); double s0 = 0.0; double s1 = 0.0; int loopstart = 0; for (int i = 0;i < sampleset.SampleLines.Count;i++) { SampleLine sampleline = sampleset.SampleLines[i]; pcm.AddRange(sampleline.ToPCM(ref s0,ref s1)); if ((sampleline.Flags & SampleLineFlags.LoopEnd) != 0) { break; } if ((sampleline.Flags & SampleLineFlags.LoopStart) != 0) { loopstart = i; } } /*for (int i = loopstart;i < sampleset.SampleLines.Count;i++) { SampleLine sampleline = sampleset.SampleLines[i]; pcm.AddRange(sampleline.ToPCM(ref s0,ref s1)); if ((sampleline.Flags & SampleLineFlags.LoopEnd) != 0) { break; } }*/ RIFF wave = WaveConv.ToWave(pcm.ToArray(),44100); wave.Name = "wave"; wvpl.Items.Add(wave); } int waveoffset = 0; byte[] ptbl = new byte [8 + 4 * waves.Count]; BitConv.ToInt32(ptbl,0,8); BitConv.ToInt32(ptbl,4,waves.Count); for (int i = 0;i < waves.Count;i++) { BitConv.ToInt32(ptbl,8 + i * 4,waveoffset); waveoffset += wvpl.Items[i].Length; } dls.Items.Add(new RIFFData("ptbl",ptbl)); dls.Items.Add(wvpl); return dls; }
public RIFF ToDLS() { RIFF dls = new RIFF("DLS "); byte[] colh = new byte [4]; BitConv.ToInt32(colh, 0, programs.Count * 2); dls.Items.Add(new RIFFData("colh", colh)); RIFF lins = new RIFF("lins"); for (int i = 0; i < 128; i++) { if (programs.ContainsKey(i)) { lins.Items.Add(programs[i].ToDLSInstrument(i, false)); lins.Items.Add(programs[i].ToDLSInstrument(i, true)); } } dls.Items.Add(lins); RIFF wvpl = new RIFF("wvpl"); foreach (SampleSet sampleset in waves) { List <byte> pcm = new List <byte>(); double s0 = 0.0; double s1 = 0.0; int loopstart = 0; for (int i = 0; i < sampleset.SampleLines.Count; i++) { SampleLine sampleline = sampleset.SampleLines[i]; pcm.AddRange(sampleline.ToPCM(ref s0, ref s1)); if ((sampleline.Flags & SampleLineFlags.LoopEnd) != 0) { break; } if ((sampleline.Flags & SampleLineFlags.LoopStart) != 0) { loopstart = i; } } /*for (int i = loopstart;i < sampleset.SampleLines.Count;i++) * { * SampleLine sampleline = sampleset.SampleLines[i]; * pcm.AddRange(sampleline.ToPCM(ref s0,ref s1)); * if ((sampleline.Flags & SampleLineFlags.LoopEnd) != 0) * { * break; * } * }*/ RIFF wave = WaveConv.ToWave(pcm.ToArray(), 44100); wave.Name = "wave"; wvpl.Items.Add(wave); } int waveoffset = 0; byte[] ptbl = new byte [8 + 4 * waves.Count]; BitConv.ToInt32(ptbl, 0, 8); BitConv.ToInt32(ptbl, 4, waves.Count); for (int i = 0; i < waves.Count; i++) { BitConv.ToInt32(ptbl, 8 + i * 4, waveoffset); waveoffset += wvpl.Items[i].Length; } dls.Items.Add(new RIFFData("ptbl", ptbl)); dls.Items.Add(wvpl); return(dls); }
public byte[] ToMIDI() { RIFF riff = new RIFF("MIDI"); byte[] mthd = new byte [6]; BEBitConv.ToInt16(mthd,0,0); BEBitConv.ToInt16(mthd,2,1); BEBitConv.ToInt16(mthd,4,resolution); riff.Items.Add(new RIFFData("MThd",mthd)); byte[] mtrk = new byte [15 + data.Length]; mtrk[0] = 0; mtrk[1] = 0xFF; mtrk[2] = 0x51; mtrk[3] = 0x03; MIDIConv.To3BE(mtrk,4,tempo); mtrk[7] = 0; mtrk[8] = 0xFF; mtrk[9] = 0x58; mtrk[10] = 0x04; BEBitConv.ToInt16(mtrk,11,rhythm); mtrk[13] = 0x18; mtrk[14] = 0x08; data.CopyTo(mtrk,15); riff.Items.Add(new RIFFData("MTrk",mtrk)); return riff.SaveBody(Endianness.BigEndian); }