*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->IRIX man pages -> dmedia/datframe (4)              
Title
Content
Arch
Section
 

Contents


DATFRAME(4)							   DATFRAME(4)


NAME    [Toc]    [Back]

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

SYNOPSIS    [Toc]    [Back]

     #include <dataudio.h>

DESCRIPTION    [Toc]    [Back]

     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]
     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    [Toc]    [Back]

      
      
     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    [Toc]    [Back]

     Mark Callow


								       PPPPaaaaggggeeee 11111111
[ Back ]
 Similar pages
Name OS Title
CDparseframe IRIX parse a frame of CD digital audio data
cdframe IRIX structure of a frame of audio data on Compact Disc (CD)
CDreadda IRIX read digital audio data from audio CD in CD-ROM
CDcreateparser IRIX creates a CD digital audio data parser
CDresetparser IRIX resets a CD digital audio data parser
CDdeleteparser IRIX deletes a CD digital audio data parser
DTparseframe IRIX parse a frame of DAT audio data
AFinitcompression IRIX configure the audio compression type and parameters in an AFfilesetup structure for an audio track
AFgetframecnt IRIX get the total sample frame count / data bytes / data offset for a specified audio track from an AFfilehandle s
afGetFrameSize IRIX get the track / virtual frame size in bytes for a specified audio track from an AFfilehandle structure
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service