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(); }