AVR
From Just Solve the File Format Problem
(Difference between revisions)
Dan Tobias (Talk | contribs) |
Dexvertbot (Talk | contribs) m (→Sample files) |
||
(One intermediate revision by one user not shown) | |||
Line 126: | Line 126: | ||
versa, invert the most significant bit.</nowiki> | versa, invert the most significant bit.</nowiki> | ||
<!-- I like socks and paws --> | <!-- I like socks and paws --> | ||
+ | |||
+ | == Software == | ||
+ | * [[FFmpeg]] | ||
+ | * [http://sox.sourceforge.net/ SoX] | ||
+ | |||
+ | == Sample files == | ||
+ | * {{DexvertSamples|audio/avr}} |
Latest revision as of 04:26, 28 December 2023
AVR;;; Audio Visual Research sample file format. Public domain.
The .AVR sample file format sees use on the Atari ST(e) and older Apple Macintosh computers. Commonly used for 8 bit audio, sometimes 16.
Some Atari music software supporting AVR: Quartet, Zero-X, Breakthru, EPSS, Sound Lab.
/* All fields are big endian. */ struct AVR_HEADER { char magic_number[4]; /* "2BIT" */ char title[8]; /* Title, padded with 0s. No 0 terminator is needed at the end, all 8 characters can be used for text. */ signed short int stereo; /* -1 = stereo, 0 = mono. Stereo data is interleaved like a .wav file, LRLRLR.. */ signed short int bits; /* Bits per sample. Usually 8 or 16. 16 bit sample data is big endian. */ signed short int signed; /* -1 = signed, 0 = unsigned. The convention is to use unsigned for 8 bit recordings. Some programs may rely on this. */ signed short int loop; /* -1 = loop enabled, 0 = loop disabled. */ signed short int midi_note; /* Can be one of these three: -1: No MIDI note assigned (most common). 0xffnn: MIDI note number nn assigned. 0xllhh: MIDI note ll for the low key, and MIDI note hh for the high key. This mode isn't well- documented, presumably it specifies a range of keys to map the sample across. In this case it is unclear how the root note is determined. */ unsigned long int samp_rate; /* Sample rate in Hz. IMPORTANT: the upper byte of this must be masked off. The upper byte contains undocumented data unrelated to sample rate, very frequently non-zero. samp_rate = samp_rate & 0x00ffffff; Some programs will only look at the low two bytes of this field, limiting the maximum sample rate to 65535 Hz. */ unsigned long int length; /* Recording length in sample periods. */ unsigned long int loop_start; /* Loop start point in sample periods. If the loop is switched off, this can be set to 0 (but doesn't have to be). This should be <= loop_end, but don't rely on this when reading a file. */ unsigned long int loop_end; /* Loop end point in sample periods. This points to the first sample which is never played (the previous sample is the last one played before looping back to loop_start). If there is no data to the right of the loop_end point, this will have the same value as length. If the loop is switched off, this can be set to 0 (but doesn't have to be). This should be <= length, but don't rely on this when reading a file. */ signed short int key_split; /* Undocumented, usually 0. */ signed short int compression; /* Undocumented, usually 0. */ signed short int reserved; /* Undocumented, usually 0. */ char title_extra[20] /* Usually 0. Some programs use this space as additional characters for title[], only when title[7] is non-zero. When writing a file, it is best to set these to zero. Some programs may use this for other purposes. */ char comment[64]; /* Text comment. Padded with 0s. It is unclear whether this needs to be terminated with a 0. Assume un-terminated when reading, and write terminated. */ }; /* Total length of header: 128 bytes fixed-size. Sample data begins immediately after header. */
Definitions: signed short int: 16 bits big-endian two's complement, -32768 to +32767. unsigned long int: 32 bits big-endian, 0 to +4294967296. char: A single byte. 0: A zero value or byte (not an ASCII '0'). 0xnn A hexadecimal value nn. Sample: One or two bytes making up a single numerical value for one data point on one channel. Sample period: A group of samples, one sample for each channel. Recording: The whole sample data. The entire file, sans header. Signed: Sample data represented by signed two's complement integers. Unsigned: Sample data represented by unsigned integers, no-signal idle level (0 volts) stored as 128 (8 bit) or 32768 (16 bit). Values above this represent positive voltages. To convert from signed to unsigned or vice- versa, invert the most significant bit.