void WriteDiphone(DiphoneHeader dh, BinaryWriter bw)
 {
     bw.Write(dh.Phone1.ToCharArray());
     bw.Write((byte)0);
     bw.Write(dh.Phone2.ToCharArray());
     bw.Write((byte)0);
     bw.Write(new byte[4] {
         dh.b1, dh.b2, dh.b3, dh.b4
     });
 }
        DiphoneHeader ReadDiphone(BinaryReader br)
        {
            DiphoneHeader result = new DiphoneHeader();

            result.Phone1 = ReadStringZ(br);
            result.Phone2 = ReadStringZ(br);

            /*			int i=br.ReadInt16(),j=br.ReadInt16();
             * if (i<i_min)
             *      i_min=i;
             * if (j<j_min)
             *      j_min=j;
             * Console.WriteLine(String.Format("{0}->{1} {2:x} {3:x}",phone1,phone2,i,j));*/
            result.b1     = br.ReadByte();
            result.b2     = br.ReadByte();
            result.b3     = br.ReadByte();
            result.b4     = br.ReadByte();
            result.Offset = (uint)br.BaseStream.Position;
            return(result);
            //	diphones++;
        }
        public void ReadFromStream(Stream stream)
        {
            header = new Header();
//			header.Count=0;
            BinaryReader br = new BinaryReader(stream, ASCIIEncoding.ASCII);

            header.Software = ASCIIEncoding.ASCII.GetString(br.ReadBytes(6));
            header.Version  = ASCIIEncoding.ASCII.GetString(br.ReadBytes(5));
//			int i=br.ReadInt32(),j=br.ReadInt16();
            header.Count      = br.ReadUInt32();
            header.i1         = br.ReadInt32();
            header.i2         = br.ReadInt32();
            header.Rate       = br.ReadUInt16();
            header.FrameShift = br.ReadByte();
            header.b1         = br.ReadByte();
            diphoneHeaders    = new List <DiphoneHeader>();

            uint offset = 14799;

            sample_offset = offset;
            for (int x = 0; x < header.Count; x++)
            {
                DiphoneHeader dh = ReadDiphone(br);
                dh.Address = offset;
                //dh.AlignedSize=dh.Size;//+dh.Address%60+8*((uint)x+1);
                diphoneHeaders.Add(dh);
                //offset+=(uint)(dh.Size+(dh.b4*4+(dh.b4-dh.b3-1)*256));
                offset += (uint)dh.b4 * 260;
            }
            //Console.WriteLine("Headers end at "+stream.Position);

            /*			sample_offset=14799;
             * for(int i=0;i<diphoneHeaders.Count;i++) {
             *      DiphoneHeader dih=diphoneHeaders[i];
             *      dih.Address=sample_offset+dih.Address;
             * }*/
            //br.Close();
        }