Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 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;
 }
Exemplo n.º 8
0
 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;
 }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
 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);
 }