datframe man page on IRIX

Man page or keyword search:  
man Server   31559 pages
apropos Keyword Search (all sections)
Output format
IRIX logo
[printable version]



DATFRAME(4)							   DATFRAME(4)

NAME
     datframe - structure of a frame of audio data on Digital Audio Tape (DAT)

SYNOPSIS
     #include <dataudio.h>

DESCRIPTION
     The Digital Audio Tape (DAT) recorder system is very complex.  This man
     page gives the most useful and relevant information for DAT use in
     professional systems.  It is by no means comprehensive.  Conflicts and
     questions must be resolved by reference to the definitive DAT Conference
     specification referenced below.

     Audio on Digital Audio Tapes (DAT) is blocked into frames.	 A DAT
     recording has 33.33 frames every second.  One frame of data contains both
     audio and non-audio data (known as subcodes).  A program reading or
     writing a DAT in audio mode must read(2) or write(2) a minimum of one DAT
     frame.

     The dtframe structure, describing the content of a frame of DAT data, is
     defined in <dataudio.h> as follows:

	   typedef struct dtframe {
	      char audio[DTDA_DATASIZE];
	      struct dtsubcode sc;
	   } DTFRAME

     Audio samples in the audio array are linearly encoded in a 16-bit 2's
     complement format.	 Encoding is carried out either without pre-emphasis
     or with a first order 50/15 Ms pre-emphasis.  Pre-emphasis is not
     recommended for professional use.	Other encodings are supported by the
     DAT format but are not permitted in professional use.  The data stream
     contains two interleaved channels, usually used as the left and right
     channels of a stereo signal.  The sample representing the left channel is
     first, followed by the sample representing the right channel.  The DAT
     Conference recommends sampling both both left and right channels
     simultaneously during recording.  The IRIS Indigo and Personal IRIS 4D/35
     audio ADC hardware samples both channels simultaneously.

     The least significant byte of each 16-bit value is first.	The bytes need
     to be swapped in order to match the native byte ordering of the IRIS
     Indigo and Personal IRIS 4D/35 and their audio hardware.  So each 4-byte
     chunk of the data array represents a pair of samples (1 left plus 1
     right) as follows.	 Byte 0 is the least significant byte of the left
     channel sample; byte 1 is the most significant byte of the left channel
     sample.  Byte 2 is the least significant byte of the simultaneous right
     channel sample; byte 3 is the most significant byte of the simultaneous
     right channel sample.

									Page 1

DATFRAME(4)							   DATFRAME(4)

     DTDA_DATASIZE is 5760 bytes.

   Subcodes
     The dtsubcode structure contains subcode information that is recorded on
     several different areas of the tape.  struct dtsubcode is defined in
     dataudio.h as follows:

	   typedef struct dtsubcode {
	      struct dtsubcodepack packs[7];
	      struct dtsubid {
		  unchar ctrlid:4, dataid:4;
		  unchar pno1:4, numpacks:4;
		  unchar pno2:4, pno3:4;
		  unchar ipf;
	      } sid;
	      struct dtmainid {
		  unchar fmtid:2;
		  unchar emphasis:2;
		  unchar sampfreq:2;
		  unchar numchans:2;
		  unchar quantization:2;
		  unchar trackpitch:2;
		  unchar copy:2;
		  unchar pack:2;
	      } mid;
	   } DTSUBCODE;

     In referring to the DAT Conference specification, you need to know that
     the mid field contains the bits from the ID field of the main data area
     otherwise known as the Main ID bits.  The sid field contains the bits
     from the ID field of the sub data area, otherwise known as Sub ID bits.
     The packs field contains all seven data packs from the sub-data area of
     the tape.

   Main ID Bits
     The bits of the mid field have the following meanings and values:

		     value   meaning
     fmtid:	       0     for audio use
		       1     reserved
		       2     reserved
		       3     reserved

		     value   meaning
     emphasis:	       0     off
		       1     50/15 Msec
		       2     reserved
		       3     reserved

									Page 2

DATFRAME(4)							   DATFRAME(4)

		     value   meaning
     sampfreq:	       0     48kHz
		       1     44.1kHz
		       2     32kHz
		       3     reserved

		     value   meaning
     numchans:	       0     2 channels
		       1     4 channels
		       2     reserved
		       3     reserved

		     value   meaning
     quantization:     0     16-bit linear
		       1     12-bit non-linear
		       2     reserved
		       3     reserved

		     value   meaning
     trackpitch:       0     normal track mode
		       1     wide track mode
		       2     reserved
		       3     reserved

		     value   meaning
     copy:	       0     copy permitted
		       1     reserved
		       2     copy prohibited
		       3     reserved

     These bits are always present and must be recorded when making your own
     recordings.

     The pack field is optional.  It should be filled with zero when not being
     used.  The bits of the pack field are assembled with the bits of the pack
     fields from 31 other frames to build one 8-byte subcode pack.  These
     packs are duplicated in the sub data area from where they are much easier
     to recover.  All seven packs can be found in the packs array in DTFRAME.

   Sub ID Bits
     The ctrlid field is a bit field with the following meanings:

	  bit name	    meaning
	  0   TOC ID	    set if this program is stored
			    in the table of contents
	  1   Shortening ID set for 33 _ 3 frames at the
			    start of shortening play
	  2   Start ID	    set for 300 _ 30 frames at
			    the start of a track
	  3   Priority ID   set when the program number is
			    recorded and is well defined

									Page 3

DATFRAME(4)							   DATFRAME(4)

     The dataid field is zero for audio use.  All other values are reserved.

     pno1, pno2 and pno3 are 3 BCD digits indicating the current program
     number.  pno1 is the most significant digit.  Program numbering starts
     with the value 001 and has to increase by increments of one.  The maximum
     program number is 799 so pno can have values from 0 - 7, and pno2 and
     pno3 can have values from 0 - 9.  The program number can also be one of
     three special values 0AA means the program number is not currently valid.
     0BB means we are in the lead-in area.  0EE means we are in the lead-out
     area.

     The program number is only required to be valid when startid is 1, i.e.
     for 300 _ 30 frames.  so it is likely to disappear and be replaced by 0AA
     shortly after a track starts.

     numpacks is the number of subcode packs actually used in this frame.  It
     usually indicates that all seven packs are recorded even when they are
     all zero.

     ipf contains the interpolation flags, one for each channel as follows:

	  Bit	 Channel
	  0x40	 Left IPF
	  0x20	 Right IPF

     The interpolation flags indicate when uncorrectable errors have been
     detected during playback leading the DAT drive to interpolate the missing
     data.  It is usually advisable not to play the audio data from a frame
     with these flags set.

     Most of Sub ID is optional.  Only dataid is required and must be zero.
     If the bits of ctrlid are zero, the bits of the rest of Sub ID may also
     be set to zero and will be ignored.

   Subcode Packs
     Nine different pack items are currently defined and seven are reserved.
     The nine items are:

	  Pack ID    Content
	  0000	     no information
	  0001	     Program Time
	  0010	     Absolute Time
	  0011	     Running Time/Pro R-Time
	  0100	     Table of Contents
	  0101	     Date
	  0110	     Catalog Number
	  0111	     International Standard Recording Code
	  1000	     Pro Binary

   Program Time
     Program Time indicates the time from the beginning of the program.	 It is
     stored in a dttimepack structure defined in dataudio.h as follows:

									Page 4

DATFRAME(4)							   DATFRAME(4)

	   /*
	    * The timecode structure looks like this:
	    *
	    *	   struct dttimecode {
	    *	       unchar hhi:4, hlo:4;
	    *	       unchar mhi:4, mlo:4;
	    *	       unchar shi:4, slo:4;
	    *	       unchar fhi:4, flo:4;
	    *	   };
	    *
	    * This structure is identical to mtaudtimecode in sys/mtio.h so
	    */
	   #define dttimecode mtaudtimecode

	   /* pack for ptime, atime, rtime and pro-rtime */
	   struct dttimepack {
	      unchar id:4, flag:1, pno1:3, pno2:4, pno3:4;
	      struct dtpackedbcd {unchar dhi:4, dlo:4;} index;
	      struct dttimecode tc;
	      unchar parity;
	   };

     The program number is stored in pno1, pno2, and pno3 as 3 BCD digits
     exactly like the Sub ID field. That information is duplicated here.
     index is the index number of the current subdivision within the program.
     The index number is expressed as 2 BCD digits.  AA indicates that the
     index number is invalid.  A program may be preceded by an index number of
     00 with the same program number.  This represents the music interval or
     pause between tracks.  Valid index numbers are 01 to 99.  Within a
     program, the first value of the index number is 01 and the value of the
     index number has to increase by one.

     The program time is represented by 2 BCD digits each for hours, minutes,
     seconds and frames.  Hours range from 00 to 99, and minutes and seconds
     from 00 to 59.  Over a three second period, frames ranges from 00 to 32,
     00 to 32, and 00 to 33.  In other words if (seconds modulo 3) is 0 or 1,
     frames ranges from 00 to 32.  If (seconds modulo 3) is 2, frames ranges
     from 00 to 33.  AA indicates the the program time is invalid.  The
     program time is set to zero at the start position of a program and
     increases within the program.  The start position of a program is the
     first position where the program number is renewed (changed) and the
     index number is not 00.

   Absolute Time
     Absolute time is stored in a struct dttimepack identical to program
     time's.  Absolute time is set to 00 at the start of the first program on
     the tape and increases throughout the tape except on the lead-in area
     (program number 0BB).  The time decreases on the lead-in area and is set
     to zero at the end point of the lead-in area.

									Page 5

DATFRAME(4)							   DATFRAME(4)

     When the first program cannot begin after the time is set to zero, the
     time should be zero continuously until the first program begins.  The
     program number of this area should be 0BB and this area should be less
     than 33 frames.

   Running Time
     Running time is stored in a pack with ID 3, and the flag bit zero.	 The
     pack is a time pack identical to program and absolute times'.  The
     running time is a continuously increasing time code beginning from some
     value at the start point of each recording.  The time increases within
     one recording.

   Pro R Time
     Pro R time is a variation on the running time pack for professional use.
     Pro R time is indicated when the flag bit is one.	Pro R time is stored
     in a dtprotimepack defined in dataudio.h as follows:

	   /* pack for pro-rtime */
	   struct dtprotimepack {
	      unchar id:4, flag:1, fill:1, sid:2;
	      unchar freq:2, xrate:3, msb:3;
	      unchar lsb;
	      struct dttimecode tc;
	      unchar parity;
	   };

     Pro R time stores a running time in the tc field just like running time.
     The other fields give addition information about the stored time value.

     The sid field indicates the type of time code recorded as follows:

	  value	  meaning
	  00	  IEC (SMPTE) timecode (IEC 461)
	  01	  local sample address code of Pro DIO time code.
	  10	  time-of-day code of Pro DIO time code (IEC 958)
	  11	  reserved

     The freq field indicates the sampling frequency used for the time
     conversion to Pro R time as follows:

	  value	  meaning
	  00	  48kHz
	  01	  44.1kHz
	  10	  32kHz
	  11	  reserved

     When the sid field indicates IEC (SMPTE) time code, the xrate field
     indicates the transmission rate of the time code as follows:

									Page 6

DATFRAME(4)							   DATFRAME(4)

	  value	  meaning
	  000	  30Hz
	  001	  29.97Hz, non-drop frame
	  010	  29.97Hz, drop frame
	  011	  25Hz
	  100	  24Hz
	  101	  reserved
	  110	  reserved
	  111	  reserved

     For any other value of sid, this field must have the value 000.

     The msb, and lsb fields provide 11 bits of binary data.  When sid
     indicates IEC (SMPTE) time code these bits record a Time code Marker (TC
     Marker). TC Marker is the time difference between the IEC time code frame
     and the DAT frame.

     When sid indicates one of the Pro DIO time codes, the binary data records
     the 32-bit binary code corresponding to the first sample of a DAT frame
     converted into hour, minute, seconds, frame and sample (called the sample
     number).

     The range of value indicated by these 11 bits is different for each value
     of freq as shown in the following table:

	  frequency   range
	  48kHz	      0 - 1439
	  44.1kHz     0 - 1322
	  32kHz	      0 - 959.

   Table of Contents
     The TOC pack contains one entry from the table of contents.  The TOC is
     stored in a struct dttocpack defined in dataudio.h as follows:

	   /* pack for table of contents */
	   struct dttocpack {
	      unchar id:4, flag:1, pno1:3, pno2:4, pno3:4;
	      struct dtpackedbcd point;
	      struct dttimecode atime;
	      unchar parity;
	   };

     The table of contents may be recorded repeatedly over the entire length
     of the tape or only at the beginning of the tape.	In the first case it
     is called repeated TOC (R-TOC). In the latter case it is called user's
     TOC (U-TOC).

     The standard table of contents entry has a program number in pno1, pno2
     and pno3, and an index number in point. The starting position of that
     program, index pair is given in atime. Several special values of pno and
     index with specific meanings are also used.  The following table shows

									Page 7

DATFRAME(4)							   DATFRAME(4)

     these values.

	  Point	  Program Number	Atime
	  AA	  0BB			all "0"
	  BB	  PNO of TOC area	all "0"
	  B0	  No. of TOC entries	all "0"
	  A0	  No. of 1st program	start of 1st program
	  A1	  No. of last program	start of last program
	  C0	  No. of a skip area	start of skip area
	  C1	  No. of a skip area	end of skip area
	  CC	  0BB			all "0"
	  EE	  PNO of TOC area	all "0"

     Point BB is the beginning of the table of contents.  Point CC is a
     continuation of the table of contents.  Point EE is the end of the table
     of contents.

     A location in absolute time is found by scanning the tape at 150X play
     speed.  Since it is possible to do exactly the same kind of search for a
     program number, the table of contents is not terribly useful.

   Date
     The date pack is a time stamp giving the time and date of recording.  It
     is stored in a struct dtdatepack which is defined in dataudio.h as
     follows:

	   /* pack for date */
	   struct dtdatepack {
	      unchar id:4, dayow:4;
	      struct dtpackedbcd year;
	      struct dtpackedbcd month;
	      struct dtpackedbcd day;
	      struct dtpackedbcd hour;
	      struct dtpackedbcd min;
	      struct dtpackedbcd sec;
	      unchar parity;
	   };

   Catalog Number
     The catalog number pack gives the catalog number expressed in 13 BCD
     digits according to the UPS/EAN-Code.  It is stored in a struct
     dtcatalogpack defined in dataudio.h as follows:

	   /* pack for catalog number */
	   struct dtcatalogpack {
	      unchar id:4, n1:4;
	      struct dtpackedbcd nrest[6];
	      unchar parity;
	   };

									Page 8

DATFRAME(4)							   DATFRAME(4)

     The catalog number does not change on a tape.  When this item is present
     it occupies at least one of 100 successive frames.

   International Standard Recording Code
     The ISRC gives a unique identification code to a recording.  It is stored
     in a struct dtidentpack which is defined in dataudio.h as follows:

	   /* pack for ISRC */
	   struct dtidentpack {
	      unchar id:4, point:2, fill:2;
	      union {
		  struct {
		      unchar country[2];
		      unchar owner[3];
		      unchar fill;
		  } point0;
		  struct {
		      struct dtpackedbcd year;
		      struct dtpackedbcd serial[3]; /* serial is 1st 5 digits */
		      unchar fill[2];
		  } point1;
	      } data;
	      unchar parity;
	   };

     When point is zero the pack contains the country and owner codes.	When
     point is one the pack contains the year and serial number.	 Country and
     owner are encoded in a six-bit code representing digits and upper case
     letters.  [See cdframe(4) for the code.]  Year and serial number are BCD
     digits.

     The ISRC can only change immediately after the program number changes.

     When this item is present it occupies at least one of 100 successive
     frames.

   Pro Binary
     The Pro Binary pack contains either the binary group data of IEC (SMPTE)
     time code or the status data of Pro DIO time code.	 It is stored in a
     struct dtprobinarypack which is defined in dataudio.h as follows:

	   /* pack for pro-binary */
	   struct dtprobinarypack {
	      unchar id:4, fill:2, sid:2;
	      union {
		  struct bgd {
		      unchar fill;
		      unchar tcbits;
		      struct dtpackedbcd bg[4];
		  } bgd;  /* binary group data of IEC time code */
		  struct csid {

									Page 9

DATFRAME(4)							   DATFRAME(4)

		      unchar csbytes[6];
		  } csid; /* channel status id of Pro DIO time code */
		  struct cod {
		      unchar fill[2];
		      unchar cod[4];
		  } cod; /* alphanumeric origin data of Pro DIO */
		  struct cdd {
		      unchar fill[1];
		      unchar flags;
		      unchar cdd[4];
		  } cdd;  /* alphanumeric destination data of Pro DIO */
	      } data;
	      unchar parity;
	   };

     sid is a subpack identification identifying what is in this pack as
     follows:

	  value	  content
	  00	  binary group data of IEC (SMPTE) time code
	  01	  channel status ID of Pro DIO time code
	  10	  alphanumeric origin data of Pro DIO
	  11	  alphanumeric destination data of Pro DIO

     The IEC (SMPTE) binary group data consists of binary group and time code
     bits.  The binary groups are stored as BCD digits in bg. The eighth
     binary group is stored in bg[0].dhi. The seventh binary group is stored
     in bg[0].dlo. The groups continue in descending order through the array
     with the second group in bg[3].dhi and the first group in bg[3].dlo.

     The time code bits are used as follows:

	  bit	IEC bit	  525/60	      625/50
	  0	10	  drop frame	      unassigned
	  1	11	  color frame	      color lock
	  2	27	  phase correction    binary group flag
	  3	43	  binary group flag   binary group flag
	  4	58	  unassigned	      unassigned
	  5	59	  binary group flag   phase correction
	  6		  not used
	  7		  not used

     When the IEC (SMPTE) time code is recorded for a given frame, the binary
     group data must also be recorded.

     The channel status ID consists of bytes 0 to 5 of the channel status data
     of the IEC serial digital interface stored in bytes 0 to 5 of
     data.cdid.csbytes.

								       Page 10

DATFRAME(4)							   DATFRAME(4)

     The alphanumeric channel origin data consists of bytes 6 to 9 of the
     channel status data of the IEC serial digital interface stored in bytes 0
     to 3 of data.cod.cod.

     The alphanumeric channel destination data consists of byte 22 of the
     channel status data of the IEC serial digital interface stored in
     data.cdd.flags and bytes 10 to 13 of the channel status data stored in
     bytes 0 to 4 of data.cdd.cdd.

   Pack Parity
     The last byte of a pack is a parity checksum which is computed as the
     exclusive-OR of the first seven bytes.  During playback, the DAT drive
     executes a parity check and only returns packs with correct parity.
     During recording, the correct parity value must be computed and written
     into the parity field before the pack is written to the tape.

SEE ALSO
     The Digital Audio Tape Recorder System published by The DAT Conference.
     c/o Electronic Industries Association of Japan, Engineering Department.
     Tokyo Chamber of Commerce & Industry Building 2-2, 3-chome, Marunouchi,
     Chiyoda-ku, Tokyo 100, Japan

     DAT for Professional Use.	The DAT Conference. c/o Electronic Industries
     Association of Japan, Engineering Department.  Tokyo Chamber of Commerce
     & Industry Building 2-2, 3-chome, Marunouchi, Chiyoda-ku, Tokyo 100,
     Japan

AUTHOR
     Mark Callow

								       Page 11

[top]

List of man pages available for IRIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net