mirror of
https://github.com/horsicq/Detect-It-Easy.git
synced 2026-06-24 01:54:08 +00:00
Refactor and add references to Nintendo audio detection rules
Refactored detection logic in BCSAR, RIFF-IMA, and STRM rule files for improved readability and maintainability. Added relevant documentation links to each file for easier reference. No functional changes to the WAV rule file; only whitespace and indentation adjustments.
This commit is contained in:
parent
f29a8c83cb
commit
4aee86d63f
5 changed files with 379 additions and 368 deletions
|
|
@ -1,20 +1,22 @@
|
|||
// Detect It Easy: detection rule file
|
||||
// Author: Kae <TG@kaens>
|
||||
|
||||
// https://www.3dbrew.org/wiki/BCSAR
|
||||
init("archive", "Nintendo Binary CTR Sound ARchive (.BCSAR)");
|
||||
|
||||
function detect() {
|
||||
//ref https://www.3dbrew.org/wiki/BCSAR
|
||||
if ((!X.c("'CSAR'FE") && !X.c("'CSAR'FF")) || X.U8(5) == X.U8(6) || X.U8(5) < 0xFE) return false;
|
||||
var e = X.U8(5) == 0xFE? _LE: _BE;
|
||||
if (X.U32(0x14,e) != 0x2000 || X.U32(0x20,e) != 0x2001 || X.U32(0x2C,e) != 0x2002) return false;
|
||||
if (!X.c("'STRG'",sp=X.U32(0x18,e)) || !X.c("'INFO'",ip=X.U32(0x24,e)) || !X.c("'FILE'",fp=X.U32(0x30,e))) return false;
|
||||
bDetected = true;
|
||||
sVersion = 'v'+X.U32(8,e).toString(16)+'_'+(e==_LE? 'le': 'be');
|
||||
if ((!X.c("'CSAR'FE") && !X.c("'CSAR'FF")) || X.U8(5) == X.U8(6) || X.U8(5) < 0xFE) return;
|
||||
var e = X.U8(5) == 0xFE ? _LE : _BE;
|
||||
if (X.U32(0x14, e) != 0x2000 || X.U32(0x20, e) != 0x2001 || X.U32(0x2C, e) != 0x2002) return;
|
||||
if (!X.c("'STRG'", sp = X.U32(0x18, e)) || !X.c("'INFO'", ip = X.U32(0x24, e)) || !X.c("'FILE'", fp = X.U32(0x30, e))) return;
|
||||
|
||||
if (X.isVerbose()) {
|
||||
sOption('filenames:'+X.U32(sp+0x18,e)+' sz:'+outSz(X.U32(0xC,e)))
|
||||
}
|
||||
bDetected = true;
|
||||
|
||||
return result();
|
||||
sVersion = 'v' + X.U32(8, e).toString(16) + '_' + (e == _LE ? 'le' : 'be');
|
||||
|
||||
if (X.isVerbose()) {
|
||||
sOption('filenames:' + X.U32(sp + 0x18, e) + ' sz:' + outSz(X.U32(0xC, e)));
|
||||
}
|
||||
|
||||
return result();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,23 @@
|
|||
// Detect It Easy: detection rule file
|
||||
// Author: Kae <TG@kaens>
|
||||
|
||||
// https://github.com/vgmstream/vgmstream/blob/master/src/meta/riff_ima.c
|
||||
init("audio", "Nintendo DS RIFF IMA-ADPCM stream (.STRM,.BIN,.LBIN)");
|
||||
|
||||
function detect() {
|
||||
//ref https://github.com/vgmstream/vgmstream/blob/master/src/meta/riff_ima.c
|
||||
if (!X.c("'RIFF'") || !X.c("'IMA '",8) || !X.U32(0xC) || X.U32(4) < 0x2D) return;
|
||||
bDetected = true;
|
||||
if (X.isVerbose()) {
|
||||
var ch = X.U32(0x24), len = Util.divu64((X.U32(4)-0x2C) << 8, X.U16(0xC)) >> 8;
|
||||
sOption('ch:'+ch+' len '+secondsToTimeStr(len)+' s/r:'+X.U32(0xC)+'Hz '
|
||||
+['not looped','looped'][+(X.U32(0x20) != 0)]+' sz:'+outSz(X.U32(4)))
|
||||
}
|
||||
if (X.c("'RIFF'") && X.c("'IMA '", 8) && X.U32(0xC) && X.U32(4) >= 0x2D) {
|
||||
bDetected = true;
|
||||
|
||||
return result();
|
||||
if (X.isVerbose()) {
|
||||
var ch = X.U32(0x24), len = Util.divu64((X.U32(4) - 0x2C) << 8, X.U16(0xC)) >> 8;
|
||||
|
||||
sOption(
|
||||
'ch:' + ch + ' len ' + secondsToTimeStr(len) + ' s/r:' + X.U32(0xC) + 'Hz ' +
|
||||
['not looped', 'looped'][+(X.U32(0x20) != 0)] + ' sz:' + outSz(X.U32(4))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,25 @@
|
|||
// Detect It Easy: detection rule file
|
||||
// Author: Kae <TG@kaens>
|
||||
|
||||
// https://github.com/Gota7/NitroStudio2/blob/master/docs/specs/stream.md
|
||||
init("audio", "Nintendo DS multi-channel stream (.STRM)");
|
||||
|
||||
function detect() {
|
||||
//ref https://github.com/Gota7/NitroStudio2/blob/master/docs/specs/stream.md
|
||||
if ((!X.c("'STRM'FE") && !X.c("'STRM'FF")) || X.U8(4) == X.U8(5) || X.U8(5) < 0xFE || !X.c("'HEAD'",0x10)) return;
|
||||
var e = X.U8(4) == 0xFF? _LE: _BE, dp = 0x10+X.U32(0x14,e);
|
||||
if (X.U8(0x19) > 1 || dp > X.Sz()) return;
|
||||
if (!X.c("'DATA'",dp) || X.U32(0x28,e) != dp+8 || X.U32(8,e) != dp+X.U32(dp+4,e)) return;
|
||||
bDetected = true;
|
||||
sVersion = ['PCM8s','PCM16','IMA-ADPCM'][X.U8(0x18)]+'/'+(e==_LE? 'le': 'be');
|
||||
if (X.isVerbose()) {
|
||||
var ch = X.U8(0x1A), len = (X.U32(0x24,e)/X.U16(0x1C,e)).toFixed(0);
|
||||
sOption('ch:'+ch+' len '+secondsToTimeStr(len)
|
||||
+' s/r:'+X.U16(0x1C,e)+'Hz '+['not looped','looped'][X.U8(0x19)]+' sz:'+outSz(X.U32(dp+4,e)+dp))
|
||||
}
|
||||
if ((!X.c("'STRM'FE") && !X.c("'STRM'FF")) || X.U8(4) == X.U8(5) || X.U8(5) < 0xFE || !X.c("'HEAD'", 0x10)) return;
|
||||
var e = X.U8(4) == 0xFF ? _LE : _BE, dp = 0x10 + X.U32(0x14, e);
|
||||
if (X.U8(0x19) > 1 || dp > X.Sz()) return;
|
||||
if (!X.c("'DATA'", dp) || X.U32(0x28, e) != dp + 8 || X.U32(8, e) != dp + X.U32(dp + 4, e)) return;
|
||||
|
||||
return result();
|
||||
bDetected = true;
|
||||
|
||||
sVersion = ['PCM8s', 'PCM16', 'IMA-ADPCM'][X.U8(0x18)] + '/' + (e == _LE ? 'le' : 'be');
|
||||
if (X.isVerbose()) {
|
||||
var ch = X.U8(0x1A), len = (X.U32(0x24, e) / X.U16(0x1C, e)).toFixed(0);
|
||||
sOption(
|
||||
'ch:' + ch + ' len ' + secondsToTimeStr(len) +
|
||||
' s/r:' + X.U16(0x1C, e) + 'Hz ' + ['not looped', 'looped'][X.U8(0x19)] + ' sz:' + outSz(X.U32(dp + 4, e) + dp)
|
||||
);
|
||||
}
|
||||
|
||||
return result();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,340 +7,340 @@ init("audio", "RIFF container/WAVE file (.WAV)");
|
|||
|
||||
function detect() {
|
||||
|
||||
const debug = 0;
|
||||
const debug = 0;
|
||||
|
||||
if (X.Sz() >= 36 && X.c("'RIFF'........'WAVE'") && (sz = 8+X.U32(4, _LE)) > 12) {
|
||||
var labl = [], txts = [],
|
||||
dcsamples = 0,
|
||||
cue = 0,
|
||||
nRate = 0,
|
||||
nChannels = 0,
|
||||
nBPS = 0,
|
||||
hksz = 4,
|
||||
hkhd = "", title = "", dt = "", by = "", genre = "", cms = "", cmt = "", sft = "",
|
||||
p = 0xC,
|
||||
end = false;
|
||||
if(debug) var chunks = "";
|
||||
while (p < X.Sz() && p < sz) {
|
||||
hkhd = X.SA(p, 4);
|
||||
hksz = X.U32(p + 4, _LE);
|
||||
if(debug) chunks += " " + hhd + " [" + Hex(hsz) + "] @" + Hex(p);
|
||||
p += 8;
|
||||
switch (hkhd) {
|
||||
case "fmt ":
|
||||
nFormat = X.U16(p, _LE);
|
||||
nChannels = X.U16(p + 2, _LE);
|
||||
nRate = X.U32(p + 4, _LE);
|
||||
nBPS = X.U16(p + 0x0E, _LE);
|
||||
/* beautify preserve:start */
|
||||
switch (nFormat) {
|
||||
case 0x0001: sVersion = "Microsoft PCM (uncompressed)"; break;
|
||||
case 0x0002: sVersion = "Microsoft ADPCM"; break;
|
||||
case 0x0003: sVersion = "Microsoft IEEE float"; break;
|
||||
case 0x0004: sVersion = "Compaq VSELP"; break;
|
||||
case 0x0005: sVersion = "IBM CVSD"; break;
|
||||
case 0x0006: sVersion = "ITU G.711 a-law"; break;
|
||||
case 0x0007: sVersion = "ITU G.711 u-law"; break;
|
||||
case 0x0008: sVersion = "Microsoft DTS"; break;
|
||||
case 0x0009: sVersion = "DRM"; break;
|
||||
case 0x000A: sVersion = "WMA 9 Speech"; break;
|
||||
case 0x000B: sVersion = "Microsoft Windows Media RT Voice"; break;
|
||||
case 0x0010: sVersion = "OKI-ADPCM"; break;
|
||||
case 0x0011: sVersion = "Intel IMA/DVI-ADPCM"; break;
|
||||
case 0x0012: sVersion = "Videologic Mediaspace ADPCM"; break;
|
||||
case 0x0013: sVersion = "Sierra ADPCM"; break;
|
||||
case 0x0014: sVersion = "Antex G.723 ADPCM"; break;
|
||||
case 0x0015: sVersion = "DSP Solutions DIGISTD"; break;
|
||||
case 0x0016: sVersion = "DSP Solutions DIGIFIX"; break;
|
||||
case 0x0017: sVersion = "Dialogic OKI ADPCM"; break;
|
||||
case 0x0018: sVersion = "Media Vision ADPCM"; break;
|
||||
case 0x0019: sVersion = "HP CU"; break;
|
||||
case 0x001A: sVersion = "HP Dynamic Voice"; break;
|
||||
case 0x0020: sVersion = "Yamaha ADPCM"; break;
|
||||
case 0x0021: sVersion = "SONARC Speech Compression"; break;
|
||||
case 0x0022: sVersion = "DSP Group True Speech"; break;
|
||||
case 0x0023: sVersion = "Echo Speech Corp."; break;
|
||||
case 0x0024: sVersion = "Virtual Music Audiofile AF36"; break;
|
||||
case 0x0025: sVersion = "Audio Processing Tech."; break;
|
||||
case 0x0026: sVersion = "Virtual Music Audiofile AF10"; break;
|
||||
case 0x0027: sVersion = "Aculab Prosody 1612"; break;
|
||||
case 0x0028: sVersion = "Merging Tech. LRC"; break;
|
||||
case 0x0030: sVersion = "Dolby AC2"; break;
|
||||
case 0x0031: sVersion = "Microsoft GSM610"; break;
|
||||
case 0x0032: sVersion = "MSN Audio"; break;
|
||||
case 0x0033: sVersion = "Antex ADPCM"; break;
|
||||
case 0x0034: sVersion = "Control Resources VQLPC"; break;
|
||||
case 0x0035: sVersion = "DSP Solutions DIGIREAL"; break;
|
||||
case 0x0036: sVersion = "DSP Solutions DIGIADPCM"; break;
|
||||
case 0x0037: sVersion = "Control Resources CR10"; break;
|
||||
case 0x0038: sVersion = "Natural MicroSystems VBX ADPCM"; break;
|
||||
case 0x0039: sVersion = "Crystal Semiconductors IMA ADPCM"; break;
|
||||
case 0x003A: sVersion = "Echo Speech ECHOSC3"; break;
|
||||
case 0x003B: sVersion = "Rockwell ADPCM"; break;
|
||||
case 0x003C: sVersion = "Rockwell DIGITALK"; break;
|
||||
case 0x003D: sVersion = "Xebec Multimedia"; break;
|
||||
case 0x0040: sVersion = "Antex G.721 ADPCM"; break;
|
||||
case 0x0041: sVersion = "Antex G.728 CELP"; break;
|
||||
case 0x0042: sVersion = "Microsoft MSG723"; break;
|
||||
case 0x0043: sVersion = "IBM AVC ADPCM"; break;
|
||||
case 0x0045: sVersion = "ITU-T G.726"; break;
|
||||
case 0x0050: sVersion = "Microsoft MPEG"; break;
|
||||
case 0x0051: sVersion = "RT23 or PAC"; break;
|
||||
case 0x0052: sVersion = "InSoft RT24"; break;
|
||||
case 0x0053: sVersion = "InSoft PAC"; break;
|
||||
case 0x0055: sVersion = "MP3"; break;
|
||||
case 0x0059: sVersion = "Cirrus"; break;
|
||||
case 0x0060: sVersion = "Cirrus Logic"; break;
|
||||
case 0x0061: sVersion = "ESS Tech. PCM"; break;
|
||||
case 0x0062: sVersion = "Voxware Inc."; break;
|
||||
case 0x0063: sVersion = "Canopus ATRAC"; break;
|
||||
case 0x0064: sVersion = "APICOM G.726 ADPCM"; break;
|
||||
case 0x0065: sVersion = "APICOM G.722 ADPCM"; break;
|
||||
case 0x0066: sVersion = "Microsoft DSAT"; break;
|
||||
case 0x0067: sVersion = "Microsoft DSAT-DISPLAY"; break;
|
||||
case 0x0069: sVersion = "Voxware Byte Aligned"; break;
|
||||
case 0x0070: sVersion = "Voxware ACB"; break;
|
||||
case 0x0071: sVersion = "Voxware AC10"; break;
|
||||
case 0x0072: sVersion = "Voxware AC16"; break;
|
||||
case 0x0073: sVersion = "Voxware AC20"; break;
|
||||
case 0x0074: sVersion = "Voxware MetaVoice"; break;
|
||||
case 0x0075: sVersion = "Voxware MetaSound"; break;
|
||||
case 0x0076: sVersion = "Voxware RT29HW"; break;
|
||||
case 0x0077: sVersion = "Voxware VR12"; break;
|
||||
case 0x0078: sVersion = "Voxware VR18"; break;
|
||||
case 0x0079: sVersion = "Voxware TQ40"; break;
|
||||
case 0x007A: sVersion = "Voxware SC3"; break;
|
||||
case 0x007B: sVersion = "Voxware SC3"; break;
|
||||
case 0x0080: sVersion = "Soundsoft"; break;
|
||||
case 0x0081: sVersion = "Voxware TQ60"; break;
|
||||
case 0x0082: sVersion = "Microsoft MSRT24"; break;
|
||||
case 0x0083: sVersion = "AT&T G.729A"; break;
|
||||
case 0x0084: sVersion = "Motion Pixels MVI-MV12"; break;
|
||||
case 0x0085: sVersion = "DataFusion G.726"; break;
|
||||
case 0x0086: sVersion = "DataFusion GSM610"; break;
|
||||
case 0x0088: sVersion = "Iterated Systems Audio"; break;
|
||||
case 0x0089: sVersion = "Onlive"; break;
|
||||
case 0x008A: sVersion = "Multitude, Inc. FT SX20"; break;
|
||||
case 0x008B: sVersion = "Infocom IT’S A/S G.721 ADPCM"; break;
|
||||
case 0x008C: sVersion = "Convedia G729"; break;
|
||||
case 0x008D: sVersion = "Congruency, Inc. (not specified)"; break;
|
||||
case 0x0091: sVersion = "Siemens SBC24"; break;
|
||||
case 0x0092: sVersion = "Sonic Foundry Dolby AC3 APDIF"; break;
|
||||
case 0x0093: sVersion = "MediaSonic G.723"; break;
|
||||
case 0x0094: sVersion = "Aculab Prosody 8kbps"; break;
|
||||
case 0x0097: sVersion = "ZyXEL ADPCM"; break;
|
||||
case 0x0098: sVersion = "Philips LPCBB"; break;
|
||||
case 0x0099: sVersion = "Studer Professional Audio Packed"; break;
|
||||
case 0x00A0: sVersion = "Maiden PhonyTalk"; break;
|
||||
case 0x00A1: sVersion = "Racal Recorder GSM"; break;
|
||||
case 0x00A2: sVersion = "Racal Recorder G720.a"; break;
|
||||
case 0x00A3: sVersion = "Racal G723.1"; break;
|
||||
case 0x00A4: sVersion = "Racal Tetra ACELP"; break;
|
||||
case 0x00B0: sVersion = "NEC AAC NEC Corporation"; break;
|
||||
case 0x00FF: sVersion = "AAC"; break;
|
||||
case 0x0100: sVersion = "Rhetorex ADPCM"; break;
|
||||
case 0x0101: sVersion = "IBM u-Law"; break;
|
||||
case 0x0102: sVersion = "IBM a-Law"; break;
|
||||
case 0x0103: sVersion = "IBM ADPCM"; break;
|
||||
case 0x0111: sVersion = "Vivo G.723"; break;
|
||||
case 0x0112: sVersion = "Vivo Siren"; break;
|
||||
case 0x0120: sVersion = "Philips Speech Processing CELP"; break;
|
||||
case 0x0121: sVersion = "Philips Speech Processing GRUNDIG"; break;
|
||||
case 0x0123: sVersion = "Digital G.723"; break;
|
||||
case 0x0125: sVersion = "Sanyo LD ADPCM"; break;
|
||||
case 0x0130: sVersion = "Sipro Lab ACEPLNET"; break;
|
||||
case 0x0131: sVersion = "Sipro Lab ACELP4800"; break;
|
||||
case 0x0132: sVersion = "Sipro Lab ACELP8V3"; break;
|
||||
case 0x0133: sVersion = "Sipro Lab G.729"; break;
|
||||
case 0x0134: sVersion = "Sipro Lab G.729A"; break;
|
||||
case 0x0135: sVersion = "Sipro Lab Kelvin"; break;
|
||||
case 0x0136: sVersion = "VoiceAge AMR"; break;
|
||||
case 0x0140: sVersion = "Dictaphone G.726 ADPCM"; break;
|
||||
case 0x0150: sVersion = "Qualcomm PureVoice"; break;
|
||||
case 0x0151: sVersion = "Qualcomm HalfRate"; break;
|
||||
case 0x0155: sVersion = "Ring Zero Systems TUBGSM"; break;
|
||||
case 0x0160: sVersion = "Microsoft Audio1"; break;
|
||||
case 0x0161: sVersion = "Windows Media Audio V2 V7 V8 V9 / DivX audio (WMA) / Alex AC3 Audio"; break;
|
||||
case 0x0162: sVersion = "Windows Media Audio Professional V9"; break;
|
||||
case 0x0163: sVersion = "Windows Media Audio Lossless V9"; break;
|
||||
case 0x0164: sVersion = "WMA Pro over S/PDIF"; break;
|
||||
case 0x0170: sVersion = "UNISYS NAP ADPCM"; break;
|
||||
case 0x0171: sVersion = "UNISYS NAP ULAW"; break;
|
||||
case 0x0172: sVersion = "UNISYS NAP ALAW"; break;
|
||||
case 0x0173: sVersion = "UNISYS NAP 16K"; break;
|
||||
case 0x0174: sVersion = "MM SYCOM ACM SYC008 SyCom Technologies"; break;
|
||||
case 0x0175: sVersion = "MM SYCOM ACM SYC701 G726L SyCom Technologies"; break;
|
||||
case 0x0176: sVersion = "MM SYCOM ACM SYC701 CELP54 SyCom Technologies"; break;
|
||||
case 0x0177: sVersion = "MM SYCOM ACM SYC701 CELP68 SyCom Technologies"; break;
|
||||
case 0x0178: sVersion = "Knowledge Adventure ADPCM"; break;
|
||||
case 0x0180: sVersion = "Fraunhofer IIS MPEG2AAC"; break;
|
||||
case 0x0190: sVersion = "Digital Theater Systems DTS DS"; break;
|
||||
case 0x0200: sVersion = "Creative Labs ADPCM"; break;
|
||||
case 0x0202: sVersion = "Creative Labs FASTSPEECH8"; break;
|
||||
case 0x0203: sVersion = "Creative Labs FASTSPEECH10"; break;
|
||||
case 0x0210: sVersion = "UHER ADPCM"; break;
|
||||
case 0x0215: sVersion = "Ulead DV ACM"; break;
|
||||
case 0x0216: sVersion = "Ulead DV ACM"; break;
|
||||
case 0x0220: sVersion = "Quarterdeck Corp."; break;
|
||||
case 0x0230: sVersion = "I-Link VC"; break;
|
||||
case 0x0240: sVersion = "Aureal Semiconductor Raw Sport"; break;
|
||||
case 0x0241: sVersion = "ESST AC3"; break;
|
||||
case 0x0250: sVersion = "Interactive Products HSX"; break;
|
||||
case 0x0251: sVersion = "Interactive Products RPELP"; break;
|
||||
case 0x0260: sVersion = "Consistent CS2"; break;
|
||||
case 0x0270: sVersion = "Sony SCX"; break;
|
||||
case 0x0271: sVersion = "Sony SCY"; break;
|
||||
case 0x0272: sVersion = "Sony ATRAC3"; break;
|
||||
case 0x0273: sVersion = "Sony SPC"; break;
|
||||
case 0x0280: sVersion = "TELUM Telum Inc."; break;
|
||||
case 0x0281: sVersion = "TELUMIA Telum Inc."; break;
|
||||
case 0x0285: sVersion = "Norcom Voice Systems ADPCM"; break;
|
||||
case 0x0300: sVersion = "Fujitsu FM TOWNS SND"; break;
|
||||
case 0x0301: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0302: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0303: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0304: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0305: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0306: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0307: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0308: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0350: sVersion = "Micronas Semiconductors, Inc. Development"; break;
|
||||
case 0x0351: sVersion = "Micronas Semiconductors, Inc. CELP833"; break;
|
||||
case 0x0400: sVersion = "Brooktree Digital"; break;
|
||||
case 0x0401: sVersion = "Intel Music Coder (IMC)"; break;
|
||||
case 0x0402: sVersion = "Ligos Indeo Audio"; break;
|
||||
case 0x0450: sVersion = "QDesign Music"; break;
|
||||
case 0x0500: sVersion = "On2 VP7 On2 Technologies"; break;
|
||||
case 0x0501: sVersion = "On2 VP6 On2 Technologies"; break;
|
||||
case 0x0680: sVersion = "AT&T VME VMPCM"; break;
|
||||
case 0x0681: sVersion = "AT&T TCP"; break;
|
||||
case 0x0700: sVersion = "YMPEG Alpha (dummy for MPEG-2 compressor)"; break;
|
||||
case 0x08AE: sVersion = "ClearJump LiteWave (lossless)"; break;
|
||||
case 0x1000: sVersion = "Olivetti GSM"; break;
|
||||
case 0x1001: sVersion = "Olivetti ADPCM"; break;
|
||||
case 0x1002: sVersion = "Olivetti CELP"; break;
|
||||
case 0x1003: sVersion = "Olivetti SBC"; break;
|
||||
case 0x1004: sVersion = "Olivetti OPR"; break;
|
||||
case 0x1100: sVersion = "Lernout & Hauspie"; break;
|
||||
case 0x1101: sVersion = "Lernout & Hauspie CELP"; break;
|
||||
case 0x1102: sVersion = "Lernout & Hauspie SBC"; break;
|
||||
case 0x1103: sVersion = "Lernout & Hauspie SBC"; break;
|
||||
case 0x1104: sVersion = "Lernout & Hauspie SBC"; break;
|
||||
case 0x1400: sVersion = "Norris Comm. Inc."; break;
|
||||
case 0x1401: sVersion = "ISIAudio"; break;
|
||||
case 0x1500: sVersion = "AT&T Soundspace Music Compression"; break;
|
||||
case 0x181C: sVersion = "VoxWare RT24 speech"; break;
|
||||
case 0x181E: sVersion = "Lucent elemedia AX24000P Music"; break;
|
||||
case 0x1971: sVersion = "Sonic Foundry LOSSLESS"; break;
|
||||
case 0x1979: sVersion = "Innings Telecom Inc. ADPCM"; break;
|
||||
case 0x1C07: sVersion = "Lucent SX8300P speech"; break;
|
||||
case 0x1C0C: sVersion = "Lucent SX5363S G.723 compliant"; break;
|
||||
case 0x1F03: sVersion = "CUseeMe DigiTalk (ex-Rocwell)"; break;
|
||||
case 0x1FC4: sVersion = "NCT Soft ALF2CD ACM"; break;
|
||||
case 0x2000: sVersion = "FAST Multimedia DVM"; break;
|
||||
case 0x2001: sVersion = "Dolby DTS"; break;
|
||||
case 0x2002: sVersion = "RealAudio 1 / 2 14.4"; break;
|
||||
case 0x2003: sVersion = "RealAudio 1 / 2 28.8"; break;
|
||||
case 0x2004: sVersion = "RealAudio G2 / 8 Cook (low bitrate)"; break;
|
||||
case 0x2005: sVersion = "RealAudio 3 / 4 / 5 Music (DNET)"; break;
|
||||
case 0x2006: sVersion = "RealAudio 10 AAC (RAAC)"; break;
|
||||
case 0x2007: sVersion = "RealAudio 10 AAC+ (RACP)"; break;
|
||||
case 0x2500: sVersion = "Reserved range to 0x2600 Microsoft"; break;
|
||||
case 0x3313: sVersion = "makeAVIS (ffvfw fake AVI sound from AviSynth scripts)"; break;
|
||||
case 0x4143: sVersion = "Divio MPEG-4 AAC audio"; break;
|
||||
case 0x4201: sVersion = "Nokia adaptive multirate"; break;
|
||||
case 0x4243: sVersion = "Divio G726 Divio, Inc."; break;
|
||||
case 0x434C: sVersion = "LEAD Speech"; break;
|
||||
case 0x564C: sVersion = "LEAD Vorbis"; break;
|
||||
case 0x5756: sVersion = "WavPack Audio"; break;
|
||||
case 0x674F: sVersion = "Ogg Vorbis (mode 1)"; break;
|
||||
case 0x6750: sVersion = "Ogg Vorbis (mode 2)"; break;
|
||||
case 0x6751: sVersion = "Ogg Vorbis (mode 3)"; break;
|
||||
case 0x676F: sVersion = "Ogg Vorbis (mode 1+)"; break;
|
||||
case 0x6770: sVersion = "Ogg Vorbis (mode 2+)"; break;
|
||||
case 0x6771: sVersion = "Ogg Vorbis (mode 3+)"; break;
|
||||
case 0x7000: sVersion = "3COM NBX 3Com Corporation"; break;
|
||||
case 0x706D: sVersion = "FAAD AAC"; break;
|
||||
case 0x7A21: sVersion = "GSM-AMR (CBR, no SID)"; break;
|
||||
case 0x7A22: sVersion = "GSM-AMR (VBR, including SID)"; break;
|
||||
case 0xA100: sVersion = "Comverse Infosys Ltd. G723 1"; break;
|
||||
case 0xA101: sVersion = "Comverse Infosys Ltd. AVQSBC"; break;
|
||||
case 0xA102: sVersion = "Comverse Infosys Ltd. OLDSBC"; break;
|
||||
case 0xA103: sVersion = "Symbol Technologies G729A"; break;
|
||||
case 0xA104: sVersion = "VoiceAge AMR WB VoiceAge Corporation"; break;
|
||||
case 0xA105: sVersion = "Ingenient Technologies Inc. G726"; break;
|
||||
case 0xA106: sVersion = "ISO/MPEG-4 advanced audio Coding"; break;
|
||||
case 0xA107: sVersion = "Encore Software Ltd G726"; break;
|
||||
case 0xA109: sVersion = "Speex ACM Codec xiph.org"; break;
|
||||
case 0xDFAC: sVersion = "DebugMode SonicFoundry Vegas FrameServer ACM"; break;
|
||||
case 0xF1AC: sVersion = "Free Lossless Audio Codec FLAC"; break;
|
||||
case 0xFFFE: sVersion = "Extensible"; break;
|
||||
case 0xFFFF: sVersion = "Development"; break;
|
||||
default: sVersion = "Unknown"
|
||||
}
|
||||
/* beautify preserve:end */
|
||||
break;
|
||||
case "fact":
|
||||
dcsamples = X.U32(p, _LE); //the uncompressed (factual?) file size?
|
||||
case "data":
|
||||
bDetected = true;
|
||||
if (nBPS && nFormat == 1 && !(nBPS % 8)) {
|
||||
var nmSeconds = Math.round(X.U32(p - 4) / (nBPS >> 3) / nRate / nChannels * 10000) / 10;
|
||||
sOption(new Date(nmSeconds).toISOString().substr(11, 8),'len: ');
|
||||
}
|
||||
break;
|
||||
case "cue":
|
||||
var q = p + 4,
|
||||
hhd = "", hsz = 0;
|
||||
while (q < p + hksz && q < X.Sz()) {
|
||||
hhd = X.SA(q, 4);
|
||||
hsz = X.U32(q+4, _LE);
|
||||
q += 8;
|
||||
if(hhd == 'data') cue++;
|
||||
q += hsz + hsz & 1;
|
||||
}
|
||||
break;
|
||||
case "LIST": case "list": // lowercase non-standard but there are such files...
|
||||
if(["INFO","ADTL"].includes(X.SA(p,4).toUpperCase())) {
|
||||
var q = p + 4,
|
||||
hhd = "", hsz = 0;
|
||||
while (q < p + hksz && q < X.Sz()) {
|
||||
hhd = X.SA(q, 4);
|
||||
hsz = X.U32(q+4, _LE);
|
||||
q += 8;
|
||||
/* beautify preserve:start */
|
||||
switch (hhd) {
|
||||
case "INAM": title = X.SC(q,hsz,'CP1252'); break;
|
||||
case "IART": by = X.SC(q,hsz,'CP1252'); break;
|
||||
case "ICMS": cms = X.SC(q,hsz,'CP1252'); break;
|
||||
case "ICRD": dt = X.SC(q,hsz,'CP1252'); break;
|
||||
case "ISFT": sft = X.SC(q,hsz,'CP1252'); break;
|
||||
case "IGNR": genre = X.SC(q,hsz,'CP1252'); break;
|
||||
case "ICMT": cmt = X.SC(q,hsz,'CP1252'); break;
|
||||
case "labl": labl.push(X.SC(q+4,hsz-4,'CP1252').trim()); break;
|
||||
case "ltxt": txts.push(X.SC(q+0x14,hsz-0x14, X.SA(q+0x12,2)).trim()); break;
|
||||
}
|
||||
/* beautify preserve:end */
|
||||
hsz += hsz & 1;
|
||||
q += hsz
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
hksz += hksz & 1; //align
|
||||
p += hksz
|
||||
} // end of chunks
|
||||
if (X.Sz() >= 36 && X.c("'RIFF'........'WAVE'") && (sz = 8 + X.U32(4, _LE)) > 12) {
|
||||
var labl = [], txts = [],
|
||||
dcsamples = 0,
|
||||
cue = 0,
|
||||
nRate = 0,
|
||||
nChannels = 0,
|
||||
nBPS = 0,
|
||||
hksz = 4,
|
||||
hkhd = "", title = "", dt = "", by = "", genre = "", cms = "", cmt = "", sft = "",
|
||||
p = 0xC,
|
||||
end = false;
|
||||
if (debug) var chunks = "";
|
||||
while (p < X.Sz() && p < sz) {
|
||||
hkhd = X.SA(p, 4);
|
||||
hksz = X.U32(p + 4, _LE);
|
||||
if (debug) chunks += " " + hhd + " [" + Hex(hsz) + "] @" + Hex(p);
|
||||
p += 8;
|
||||
switch (hkhd) {
|
||||
case "fmt ":
|
||||
nFormat = X.U16(p, _LE);
|
||||
nChannels = X.U16(p + 2, _LE);
|
||||
nRate = X.U32(p + 4, _LE);
|
||||
nBPS = X.U16(p + 0x0E, _LE);
|
||||
/* beautify preserve:start */
|
||||
switch (nFormat) {
|
||||
case 0x0001: sVersion = "Microsoft PCM (uncompressed)"; break;
|
||||
case 0x0002: sVersion = "Microsoft ADPCM"; break;
|
||||
case 0x0003: sVersion = "Microsoft IEEE float"; break;
|
||||
case 0x0004: sVersion = "Compaq VSELP"; break;
|
||||
case 0x0005: sVersion = "IBM CVSD"; break;
|
||||
case 0x0006: sVersion = "ITU G.711 a-law"; break;
|
||||
case 0x0007: sVersion = "ITU G.711 u-law"; break;
|
||||
case 0x0008: sVersion = "Microsoft DTS"; break;
|
||||
case 0x0009: sVersion = "DRM"; break;
|
||||
case 0x000A: sVersion = "WMA 9 Speech"; break;
|
||||
case 0x000B: sVersion = "Microsoft Windows Media RT Voice"; break;
|
||||
case 0x0010: sVersion = "OKI-ADPCM"; break;
|
||||
case 0x0011: sVersion = "Intel IMA/DVI-ADPCM"; break;
|
||||
case 0x0012: sVersion = "Videologic Mediaspace ADPCM"; break;
|
||||
case 0x0013: sVersion = "Sierra ADPCM"; break;
|
||||
case 0x0014: sVersion = "Antex G.723 ADPCM"; break;
|
||||
case 0x0015: sVersion = "DSP Solutions DIGISTD"; break;
|
||||
case 0x0016: sVersion = "DSP Solutions DIGIFIX"; break;
|
||||
case 0x0017: sVersion = "Dialogic OKI ADPCM"; break;
|
||||
case 0x0018: sVersion = "Media Vision ADPCM"; break;
|
||||
case 0x0019: sVersion = "HP CU"; break;
|
||||
case 0x001A: sVersion = "HP Dynamic Voice"; break;
|
||||
case 0x0020: sVersion = "Yamaha ADPCM"; break;
|
||||
case 0x0021: sVersion = "SONARC Speech Compression"; break;
|
||||
case 0x0022: sVersion = "DSP Group True Speech"; break;
|
||||
case 0x0023: sVersion = "Echo Speech Corp."; break;
|
||||
case 0x0024: sVersion = "Virtual Music Audiofile AF36"; break;
|
||||
case 0x0025: sVersion = "Audio Processing Tech."; break;
|
||||
case 0x0026: sVersion = "Virtual Music Audiofile AF10"; break;
|
||||
case 0x0027: sVersion = "Aculab Prosody 1612"; break;
|
||||
case 0x0028: sVersion = "Merging Tech. LRC"; break;
|
||||
case 0x0030: sVersion = "Dolby AC2"; break;
|
||||
case 0x0031: sVersion = "Microsoft GSM610"; break;
|
||||
case 0x0032: sVersion = "MSN Audio"; break;
|
||||
case 0x0033: sVersion = "Antex ADPCM"; break;
|
||||
case 0x0034: sVersion = "Control Resources VQLPC"; break;
|
||||
case 0x0035: sVersion = "DSP Solutions DIGIREAL"; break;
|
||||
case 0x0036: sVersion = "DSP Solutions DIGIADPCM"; break;
|
||||
case 0x0037: sVersion = "Control Resources CR10"; break;
|
||||
case 0x0038: sVersion = "Natural MicroSystems VBX ADPCM"; break;
|
||||
case 0x0039: sVersion = "Crystal Semiconductors IMA ADPCM"; break;
|
||||
case 0x003A: sVersion = "Echo Speech ECHOSC3"; break;
|
||||
case 0x003B: sVersion = "Rockwell ADPCM"; break;
|
||||
case 0x003C: sVersion = "Rockwell DIGITALK"; break;
|
||||
case 0x003D: sVersion = "Xebec Multimedia"; break;
|
||||
case 0x0040: sVersion = "Antex G.721 ADPCM"; break;
|
||||
case 0x0041: sVersion = "Antex G.728 CELP"; break;
|
||||
case 0x0042: sVersion = "Microsoft MSG723"; break;
|
||||
case 0x0043: sVersion = "IBM AVC ADPCM"; break;
|
||||
case 0x0045: sVersion = "ITU-T G.726"; break;
|
||||
case 0x0050: sVersion = "Microsoft MPEG"; break;
|
||||
case 0x0051: sVersion = "RT23 or PAC"; break;
|
||||
case 0x0052: sVersion = "InSoft RT24"; break;
|
||||
case 0x0053: sVersion = "InSoft PAC"; break;
|
||||
case 0x0055: sVersion = "MP3"; break;
|
||||
case 0x0059: sVersion = "Cirrus"; break;
|
||||
case 0x0060: sVersion = "Cirrus Logic"; break;
|
||||
case 0x0061: sVersion = "ESS Tech. PCM"; break;
|
||||
case 0x0062: sVersion = "Voxware Inc."; break;
|
||||
case 0x0063: sVersion = "Canopus ATRAC"; break;
|
||||
case 0x0064: sVersion = "APICOM G.726 ADPCM"; break;
|
||||
case 0x0065: sVersion = "APICOM G.722 ADPCM"; break;
|
||||
case 0x0066: sVersion = "Microsoft DSAT"; break;
|
||||
case 0x0067: sVersion = "Microsoft DSAT-DISPLAY"; break;
|
||||
case 0x0069: sVersion = "Voxware Byte Aligned"; break;
|
||||
case 0x0070: sVersion = "Voxware ACB"; break;
|
||||
case 0x0071: sVersion = "Voxware AC10"; break;
|
||||
case 0x0072: sVersion = "Voxware AC16"; break;
|
||||
case 0x0073: sVersion = "Voxware AC20"; break;
|
||||
case 0x0074: sVersion = "Voxware MetaVoice"; break;
|
||||
case 0x0075: sVersion = "Voxware MetaSound"; break;
|
||||
case 0x0076: sVersion = "Voxware RT29HW"; break;
|
||||
case 0x0077: sVersion = "Voxware VR12"; break;
|
||||
case 0x0078: sVersion = "Voxware VR18"; break;
|
||||
case 0x0079: sVersion = "Voxware TQ40"; break;
|
||||
case 0x007A: sVersion = "Voxware SC3"; break;
|
||||
case 0x007B: sVersion = "Voxware SC3"; break;
|
||||
case 0x0080: sVersion = "Soundsoft"; break;
|
||||
case 0x0081: sVersion = "Voxware TQ60"; break;
|
||||
case 0x0082: sVersion = "Microsoft MSRT24"; break;
|
||||
case 0x0083: sVersion = "AT&T G.729A"; break;
|
||||
case 0x0084: sVersion = "Motion Pixels MVI-MV12"; break;
|
||||
case 0x0085: sVersion = "DataFusion G.726"; break;
|
||||
case 0x0086: sVersion = "DataFusion GSM610"; break;
|
||||
case 0x0088: sVersion = "Iterated Systems Audio"; break;
|
||||
case 0x0089: sVersion = "Onlive"; break;
|
||||
case 0x008A: sVersion = "Multitude, Inc. FT SX20"; break;
|
||||
case 0x008B: sVersion = "Infocom IT’S A/S G.721 ADPCM"; break;
|
||||
case 0x008C: sVersion = "Convedia G729"; break;
|
||||
case 0x008D: sVersion = "Congruency, Inc. (not specified)"; break;
|
||||
case 0x0091: sVersion = "Siemens SBC24"; break;
|
||||
case 0x0092: sVersion = "Sonic Foundry Dolby AC3 APDIF"; break;
|
||||
case 0x0093: sVersion = "MediaSonic G.723"; break;
|
||||
case 0x0094: sVersion = "Aculab Prosody 8kbps"; break;
|
||||
case 0x0097: sVersion = "ZyXEL ADPCM"; break;
|
||||
case 0x0098: sVersion = "Philips LPCBB"; break;
|
||||
case 0x0099: sVersion = "Studer Professional Audio Packed"; break;
|
||||
case 0x00A0: sVersion = "Maiden PhonyTalk"; break;
|
||||
case 0x00A1: sVersion = "Racal Recorder GSM"; break;
|
||||
case 0x00A2: sVersion = "Racal Recorder G720.a"; break;
|
||||
case 0x00A3: sVersion = "Racal G723.1"; break;
|
||||
case 0x00A4: sVersion = "Racal Tetra ACELP"; break;
|
||||
case 0x00B0: sVersion = "NEC AAC NEC Corporation"; break;
|
||||
case 0x00FF: sVersion = "AAC"; break;
|
||||
case 0x0100: sVersion = "Rhetorex ADPCM"; break;
|
||||
case 0x0101: sVersion = "IBM u-Law"; break;
|
||||
case 0x0102: sVersion = "IBM a-Law"; break;
|
||||
case 0x0103: sVersion = "IBM ADPCM"; break;
|
||||
case 0x0111: sVersion = "Vivo G.723"; break;
|
||||
case 0x0112: sVersion = "Vivo Siren"; break;
|
||||
case 0x0120: sVersion = "Philips Speech Processing CELP"; break;
|
||||
case 0x0121: sVersion = "Philips Speech Processing GRUNDIG"; break;
|
||||
case 0x0123: sVersion = "Digital G.723"; break;
|
||||
case 0x0125: sVersion = "Sanyo LD ADPCM"; break;
|
||||
case 0x0130: sVersion = "Sipro Lab ACEPLNET"; break;
|
||||
case 0x0131: sVersion = "Sipro Lab ACELP4800"; break;
|
||||
case 0x0132: sVersion = "Sipro Lab ACELP8V3"; break;
|
||||
case 0x0133: sVersion = "Sipro Lab G.729"; break;
|
||||
case 0x0134: sVersion = "Sipro Lab G.729A"; break;
|
||||
case 0x0135: sVersion = "Sipro Lab Kelvin"; break;
|
||||
case 0x0136: sVersion = "VoiceAge AMR"; break;
|
||||
case 0x0140: sVersion = "Dictaphone G.726 ADPCM"; break;
|
||||
case 0x0150: sVersion = "Qualcomm PureVoice"; break;
|
||||
case 0x0151: sVersion = "Qualcomm HalfRate"; break;
|
||||
case 0x0155: sVersion = "Ring Zero Systems TUBGSM"; break;
|
||||
case 0x0160: sVersion = "Microsoft Audio1"; break;
|
||||
case 0x0161: sVersion = "Windows Media Audio V2 V7 V8 V9 / DivX audio (WMA) / Alex AC3 Audio"; break;
|
||||
case 0x0162: sVersion = "Windows Media Audio Professional V9"; break;
|
||||
case 0x0163: sVersion = "Windows Media Audio Lossless V9"; break;
|
||||
case 0x0164: sVersion = "WMA Pro over S/PDIF"; break;
|
||||
case 0x0170: sVersion = "UNISYS NAP ADPCM"; break;
|
||||
case 0x0171: sVersion = "UNISYS NAP ULAW"; break;
|
||||
case 0x0172: sVersion = "UNISYS NAP ALAW"; break;
|
||||
case 0x0173: sVersion = "UNISYS NAP 16K"; break;
|
||||
case 0x0174: sVersion = "MM SYCOM ACM SYC008 SyCom Technologies"; break;
|
||||
case 0x0175: sVersion = "MM SYCOM ACM SYC701 G726L SyCom Technologies"; break;
|
||||
case 0x0176: sVersion = "MM SYCOM ACM SYC701 CELP54 SyCom Technologies"; break;
|
||||
case 0x0177: sVersion = "MM SYCOM ACM SYC701 CELP68 SyCom Technologies"; break;
|
||||
case 0x0178: sVersion = "Knowledge Adventure ADPCM"; break;
|
||||
case 0x0180: sVersion = "Fraunhofer IIS MPEG2AAC"; break;
|
||||
case 0x0190: sVersion = "Digital Theater Systems DTS DS"; break;
|
||||
case 0x0200: sVersion = "Creative Labs ADPCM"; break;
|
||||
case 0x0202: sVersion = "Creative Labs FASTSPEECH8"; break;
|
||||
case 0x0203: sVersion = "Creative Labs FASTSPEECH10"; break;
|
||||
case 0x0210: sVersion = "UHER ADPCM"; break;
|
||||
case 0x0215: sVersion = "Ulead DV ACM"; break;
|
||||
case 0x0216: sVersion = "Ulead DV ACM"; break;
|
||||
case 0x0220: sVersion = "Quarterdeck Corp."; break;
|
||||
case 0x0230: sVersion = "I-Link VC"; break;
|
||||
case 0x0240: sVersion = "Aureal Semiconductor Raw Sport"; break;
|
||||
case 0x0241: sVersion = "ESST AC3"; break;
|
||||
case 0x0250: sVersion = "Interactive Products HSX"; break;
|
||||
case 0x0251: sVersion = "Interactive Products RPELP"; break;
|
||||
case 0x0260: sVersion = "Consistent CS2"; break;
|
||||
case 0x0270: sVersion = "Sony SCX"; break;
|
||||
case 0x0271: sVersion = "Sony SCY"; break;
|
||||
case 0x0272: sVersion = "Sony ATRAC3"; break;
|
||||
case 0x0273: sVersion = "Sony SPC"; break;
|
||||
case 0x0280: sVersion = "TELUM Telum Inc."; break;
|
||||
case 0x0281: sVersion = "TELUMIA Telum Inc."; break;
|
||||
case 0x0285: sVersion = "Norcom Voice Systems ADPCM"; break;
|
||||
case 0x0300: sVersion = "Fujitsu FM TOWNS SND"; break;
|
||||
case 0x0301: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0302: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0303: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0304: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0305: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0306: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0307: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0308: sVersion = "Fujitsu (not specified)"; break;
|
||||
case 0x0350: sVersion = "Micronas Semiconductors, Inc. Development"; break;
|
||||
case 0x0351: sVersion = "Micronas Semiconductors, Inc. CELP833"; break;
|
||||
case 0x0400: sVersion = "Brooktree Digital"; break;
|
||||
case 0x0401: sVersion = "Intel Music Coder (IMC)"; break;
|
||||
case 0x0402: sVersion = "Ligos Indeo Audio"; break;
|
||||
case 0x0450: sVersion = "QDesign Music"; break;
|
||||
case 0x0500: sVersion = "On2 VP7 On2 Technologies"; break;
|
||||
case 0x0501: sVersion = "On2 VP6 On2 Technologies"; break;
|
||||
case 0x0680: sVersion = "AT&T VME VMPCM"; break;
|
||||
case 0x0681: sVersion = "AT&T TCP"; break;
|
||||
case 0x0700: sVersion = "YMPEG Alpha (dummy for MPEG-2 compressor)"; break;
|
||||
case 0x08AE: sVersion = "ClearJump LiteWave (lossless)"; break;
|
||||
case 0x1000: sVersion = "Olivetti GSM"; break;
|
||||
case 0x1001: sVersion = "Olivetti ADPCM"; break;
|
||||
case 0x1002: sVersion = "Olivetti CELP"; break;
|
||||
case 0x1003: sVersion = "Olivetti SBC"; break;
|
||||
case 0x1004: sVersion = "Olivetti OPR"; break;
|
||||
case 0x1100: sVersion = "Lernout & Hauspie"; break;
|
||||
case 0x1101: sVersion = "Lernout & Hauspie CELP"; break;
|
||||
case 0x1102: sVersion = "Lernout & Hauspie SBC"; break;
|
||||
case 0x1103: sVersion = "Lernout & Hauspie SBC"; break;
|
||||
case 0x1104: sVersion = "Lernout & Hauspie SBC"; break;
|
||||
case 0x1400: sVersion = "Norris Comm. Inc."; break;
|
||||
case 0x1401: sVersion = "ISIAudio"; break;
|
||||
case 0x1500: sVersion = "AT&T Soundspace Music Compression"; break;
|
||||
case 0x181C: sVersion = "VoxWare RT24 speech"; break;
|
||||
case 0x181E: sVersion = "Lucent elemedia AX24000P Music"; break;
|
||||
case 0x1971: sVersion = "Sonic Foundry LOSSLESS"; break;
|
||||
case 0x1979: sVersion = "Innings Telecom Inc. ADPCM"; break;
|
||||
case 0x1C07: sVersion = "Lucent SX8300P speech"; break;
|
||||
case 0x1C0C: sVersion = "Lucent SX5363S G.723 compliant"; break;
|
||||
case 0x1F03: sVersion = "CUseeMe DigiTalk (ex-Rocwell)"; break;
|
||||
case 0x1FC4: sVersion = "NCT Soft ALF2CD ACM"; break;
|
||||
case 0x2000: sVersion = "FAST Multimedia DVM"; break;
|
||||
case 0x2001: sVersion = "Dolby DTS"; break;
|
||||
case 0x2002: sVersion = "RealAudio 1 / 2 14.4"; break;
|
||||
case 0x2003: sVersion = "RealAudio 1 / 2 28.8"; break;
|
||||
case 0x2004: sVersion = "RealAudio G2 / 8 Cook (low bitrate)"; break;
|
||||
case 0x2005: sVersion = "RealAudio 3 / 4 / 5 Music (DNET)"; break;
|
||||
case 0x2006: sVersion = "RealAudio 10 AAC (RAAC)"; break;
|
||||
case 0x2007: sVersion = "RealAudio 10 AAC+ (RACP)"; break;
|
||||
case 0x2500: sVersion = "Reserved range to 0x2600 Microsoft"; break;
|
||||
case 0x3313: sVersion = "makeAVIS (ffvfw fake AVI sound from AviSynth scripts)"; break;
|
||||
case 0x4143: sVersion = "Divio MPEG-4 AAC audio"; break;
|
||||
case 0x4201: sVersion = "Nokia adaptive multirate"; break;
|
||||
case 0x4243: sVersion = "Divio G726 Divio, Inc."; break;
|
||||
case 0x434C: sVersion = "LEAD Speech"; break;
|
||||
case 0x564C: sVersion = "LEAD Vorbis"; break;
|
||||
case 0x5756: sVersion = "WavPack Audio"; break;
|
||||
case 0x674F: sVersion = "Ogg Vorbis (mode 1)"; break;
|
||||
case 0x6750: sVersion = "Ogg Vorbis (mode 2)"; break;
|
||||
case 0x6751: sVersion = "Ogg Vorbis (mode 3)"; break;
|
||||
case 0x676F: sVersion = "Ogg Vorbis (mode 1+)"; break;
|
||||
case 0x6770: sVersion = "Ogg Vorbis (mode 2+)"; break;
|
||||
case 0x6771: sVersion = "Ogg Vorbis (mode 3+)"; break;
|
||||
case 0x7000: sVersion = "3COM NBX 3Com Corporation"; break;
|
||||
case 0x706D: sVersion = "FAAD AAC"; break;
|
||||
case 0x7A21: sVersion = "GSM-AMR (CBR, no SID)"; break;
|
||||
case 0x7A22: sVersion = "GSM-AMR (VBR, including SID)"; break;
|
||||
case 0xA100: sVersion = "Comverse Infosys Ltd. G723 1"; break;
|
||||
case 0xA101: sVersion = "Comverse Infosys Ltd. AVQSBC"; break;
|
||||
case 0xA102: sVersion = "Comverse Infosys Ltd. OLDSBC"; break;
|
||||
case 0xA103: sVersion = "Symbol Technologies G729A"; break;
|
||||
case 0xA104: sVersion = "VoiceAge AMR WB VoiceAge Corporation"; break;
|
||||
case 0xA105: sVersion = "Ingenient Technologies Inc. G726"; break;
|
||||
case 0xA106: sVersion = "ISO/MPEG-4 advanced audio Coding"; break;
|
||||
case 0xA107: sVersion = "Encore Software Ltd G726"; break;
|
||||
case 0xA109: sVersion = "Speex ACM Codec xiph.org"; break;
|
||||
case 0xDFAC: sVersion = "DebugMode SonicFoundry Vegas FrameServer ACM"; break;
|
||||
case 0xF1AC: sVersion = "Free Lossless Audio Codec FLAC"; break;
|
||||
case 0xFFFE: sVersion = "Extensible"; break;
|
||||
case 0xFFFF: sVersion = "Development"; break;
|
||||
default: sVersion = "Unknown"
|
||||
}
|
||||
/* beautify preserve:end */
|
||||
break;
|
||||
case "fact":
|
||||
dcsamples = X.U32(p, _LE); //the uncompressed (factual?) file size?
|
||||
case "data":
|
||||
bDetected = true;
|
||||
if (nBPS && nFormat == 1 && !(nBPS % 8)) {
|
||||
var nmSeconds = Math.round(X.U32(p - 4) / (nBPS >> 3) / nRate / nChannels * 10000) / 10;
|
||||
sOption(new Date(nmSeconds).toISOString().substr(11, 8), 'len: ');
|
||||
}
|
||||
break;
|
||||
case "cue":
|
||||
var q = p + 4,
|
||||
hhd = "", hsz = 0;
|
||||
while (q < p + hksz && q < X.Sz()) {
|
||||
hhd = X.SA(q, 4);
|
||||
hsz = X.U32(q + 4, _LE);
|
||||
q += 8;
|
||||
if (hhd == 'data') cue++;
|
||||
q += hsz + hsz & 1;
|
||||
}
|
||||
break;
|
||||
case "LIST": case "list": // lowercase non-standard but there are such files...
|
||||
if (["INFO", "ADTL"].includes(X.SA(p, 4).toUpperCase())) {
|
||||
var q = p + 4,
|
||||
hhd = "", hsz = 0;
|
||||
while (q < p + hksz && q < X.Sz()) {
|
||||
hhd = X.SA(q, 4);
|
||||
hsz = X.U32(q + 4, _LE);
|
||||
q += 8;
|
||||
/* beautify preserve:start */
|
||||
switch (hhd) {
|
||||
case "INAM": title = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "IART": by = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "ICMS": cms = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "ICRD": dt = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "ISFT": sft = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "IGNR": genre = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "ICMT": cmt = X.SC(q, hsz, 'CP1252'); break;
|
||||
case "labl": labl.push(X.SC(q + 4, hsz - 4, 'CP1252').trim()); break;
|
||||
case "ltxt": txts.push(X.SC(q + 0x14, hsz - 0x14, X.SA(q + 0x12, 2)).trim()); break;
|
||||
}
|
||||
/* beautify preserve:end */
|
||||
hsz += hsz & 1;
|
||||
q += hsz
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
hksz += hksz & 1; //align
|
||||
p += hksz
|
||||
} // end of chunks
|
||||
|
||||
sOptionT(addEllipsis(title)); sOptionT(dt, 'created: '); sOptionT(addEllipsis(by),'by: ');
|
||||
sOptionT(genre, 'genre: '); sOptionT(addEllipsis(sft), 's/w: '); sOptionT(addEllipsis(cms), 'cms.by: ');
|
||||
sOption(addEllipsis(cmt.trim()),'cmt: "', '"');
|
||||
if(labl.length) sOptionT(addEllipsis(labl.filter(function(x){return x.length>0}).join('; ')),'labels: "', '"');
|
||||
if(txts.length) sOptionT(addEllipsis(txts.filter(function(x){return x.length>0}).join('; ')),'captions: "', '"');
|
||||
if (debug) if (chunks) sOption(chunks, 'chunks: [',']');
|
||||
sOption('ch:' + nChannels + (nBPS ? ' ' + nBPS + '-bit' : '') + ' s/r:' + nRate + 'Hz'
|
||||
+ (dcsamples ? ' fact:' + Math.round(dcsamples / 0x100000) + 'M' : '') //for compressed things only
|
||||
+' sz:'+outSz(sz));
|
||||
}
|
||||
sOptionT(addEllipsis(title)); sOptionT(dt, 'created: '); sOptionT(addEllipsis(by), 'by: ');
|
||||
sOptionT(genre, 'genre: '); sOptionT(addEllipsis(sft), 's/w: '); sOptionT(addEllipsis(cms), 'cms.by: ');
|
||||
sOption(addEllipsis(cmt.trim()), 'cmt: "', '"');
|
||||
if (labl.length) sOptionT(addEllipsis(labl.filter(function (x) { return x.length > 0 }).join('; ')), 'labels: "', '"');
|
||||
if (txts.length) sOptionT(addEllipsis(txts.filter(function (x) { return x.length > 0 }).join('; ')), 'captions: "', '"');
|
||||
if (debug) if (chunks) sOption(chunks, 'chunks: [', ']');
|
||||
sOption('ch:' + nChannels + (nBPS ? ' ' + nBPS + '-bit' : '') + ' s/r:' + nRate + 'Hz'
|
||||
+ (dcsamples ? ' fact:' + Math.round(dcsamples / 0x100000) + 'M' : '') //for compressed things only
|
||||
+ ' sz:' + outSz(sz));
|
||||
}
|
||||
|
||||
return result();
|
||||
return result();
|
||||
}
|
||||
|
|
@ -49,8 +49,7 @@ function detect() {
|
|||
|
||||
nOffset += 2;
|
||||
for (pool = 1; pool < constantPoolCount; pool++) {
|
||||
switch (Binary.read_uint8(nOffset)) // Tag
|
||||
{
|
||||
switch (Binary.read_uint8(nOffset)) { // Tag
|
||||
case 1: // CONSTANT_Utf8
|
||||
nOffset += 1 + 2 + Binary.read_uint16(nOffset + 1, _BE);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue