-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaudio.AU.1.sg
61 lines (57 loc) · 2.82 KB
/
audio.AU.1.sg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// https://github.com/horsicq/Detect-It-Easy signature file
// Author: Kaens TG@kaens
init("audio","Next/SUN Au waveform audio (.AU,.SND)");
includeScript("read");
function detect(bShowType,bShowVersion,bShowOptions) {
//ref https://en.wikipedia.org/wiki/Au_file_format
// & https://sox.sourceforge.net/AudioFormats-11.html#ss11.2
// & http://soundfile.sapp.org/doc/NextFormat/soundstruct.h
// & https://sox.sourceforge.net/AudioFormats-11.html
if(!Binary.compare("'.snd'")) return false; malformed = 0;
_log(" 1" );
dataofs = File.read_uint32(4,_BE);
_log(Hex(dataofs));
if(dataofs<0x18 || dataofs>File.getSize()) return false;
if(dataofs<0x1C) malformed = "dtofs="+Hex(dataofs);
_log(" 2");
datasz = File.read_uint32(8,_BE);
if(datasz != 0xFFFFFFFF && datasz > File.getSize()) malformed = "dtsz="+Hex(datasz);
bDetected = 1;
switch(File.read_int32(0x0C,_BE)) {
case 0x00: sVersion = "unspecified format"; break;
case 0x01: sVersion = "8-bit G.711 μ-law"; break;
case 0x02: sVersion = "8-bit linear PCM"; break;
case 0x03: sVersion = "16-bit linear PCM"; break;
case 0x04: sVersion = "24-bit linear PCM"; break;
case 0x05: sVersion = "32-bit linear PCM"; break;
case 0x06: sVersion = "32-bit IEEE floating point"; break;
case 0x07: sVersion = "64-bit IEEE floating point"; break;
case 0x08: sVersion = "Fragmented sample data"; break;
case 0x0A: sVersion = "DSP program"; break;
case 0x0B: sVersion = "8-bit fixed point"; break;
case 0x0C: sVersion = "16-bit fixed point"; break;
case 0x0D: sVersion = "24-bit fixed point"; break;
case 0x0E: sVersion = "32-bit fixed point"; break;
case 0x10: sVersion = "Sound Kit's visual data"; break;
case 0x11: sVersion = "MULAW_SQUELCH"; break;
case 0x12: sVersion = "16-bit linear w/emphasis"; break;
case 0x13: sVersion = "16-bit linear compressed"; break;
case 0x14: sVersion = "16-bit linear w/emphasis compressed"; break;
case 0x15: sVersion = "Music Kit DSP commands"; break;
case 0x17: sVersion = "ITU-T G.721 4-bit ADPCM"; break;
case 0x18: sVersion = "ITU-T G.722 4-bit SB-ADPCM"; break;
case 0x19: sVersion = "ITU-T G.723 3-bit SB-ADPCM"; break;
case 0x1A: sVersion = "ITU-T G.723 5-bit SB-ADPCM"; break;
case 0x1B: sVersion = "8-bit G.711 A-law"; break;
case 0x1B: sVersion = "AES"; break;
case 0x1C: sVersion = "8-bit Delta μ-law"; break;
default: sVersion = "unknown"
}
if(malformed) sVersion += ", malformed "+malformed;
if(Binary.isVerbose()) {
sr = (File.read_uint32(0x10,_BE)/1000).toFixed(1); ch = File.read_uint32(0x14,_BE);
if(dataofs >= 0x1C) sOption(File.read_ansiString(0x18,Math.min(File.getSize()-0x18,0x100)));
sOption("ch:"+ch+" s/r:"+sr+"kHz");
}
return result(bShowType,bShowVersion,bShowOptions);
}