mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-25 22:38:11 +01:00
Add TXTH ULAW/ALAW codecs
This commit is contained in:
parent
2e62b638c6
commit
35433e6650
@ -107,6 +107,13 @@ as explained below, but often will use default values. Accepted codec strings:
|
|||||||
# * For few rare games [Ikinari Maou (Switch)]
|
# * For few rare games [Ikinari Maou (Switch)]
|
||||||
# * Interleave is multiple of 0x4 (default)
|
# * Interleave is multiple of 0x4 (default)
|
||||||
#
|
#
|
||||||
|
# - ULAW mu-Law 8-bit PCM
|
||||||
|
# * For few rare games [Burnout (GC)]
|
||||||
|
# * Interleave is multiple of 0x1 (default)
|
||||||
|
# - ALAW A-Law 8-bit PCM
|
||||||
|
# * For few rare games [Conquest of Elysium 3 (PC), Dominions 3/4 (PC)]
|
||||||
|
# * Interleave is multiple of 0x1 (default)
|
||||||
|
#
|
||||||
# - IMA IMA ADPCM (mono/stereo)
|
# - IMA IMA ADPCM (mono/stereo)
|
||||||
# * For some PC games, and rarely consoles
|
# * For some PC games, and rarely consoles
|
||||||
# * Special interleave is multiple of 0x1, often +0x80
|
# * Special interleave is multiple of 0x1, often +0x80
|
||||||
|
@ -61,8 +61,8 @@ static const char* extension_list[] = {
|
|||||||
//"aiff", //common
|
//"aiff", //common
|
||||||
"aix",
|
"aix",
|
||||||
"akb",
|
"akb",
|
||||||
"al",
|
"al", //txth/raw [Dominions 3 - The Awakening (PC)]
|
||||||
"al2",
|
"al2", //txth/raw [Conquest of Elysium 3 (PC)]
|
||||||
"ams", //txth/reserved [Super Dragon Ball Z (PS2) ELF names]
|
"ams", //txth/reserved [Super Dragon Ball Z (PS2) ELF names]
|
||||||
"amts", //fake extension/header id for .stm (renamed? to be removed?)
|
"amts", //fake extension/header id for .stm (renamed? to be removed?)
|
||||||
"an2",
|
"an2",
|
||||||
@ -568,7 +568,7 @@ static const char* extension_list[] = {
|
|||||||
|
|
||||||
"u0",
|
"u0",
|
||||||
"ue4opus",
|
"ue4opus",
|
||||||
"ulw",
|
"ulw", //txth/raw [Burnout (GC)]
|
||||||
"um3",
|
"um3",
|
||||||
"utk",
|
"utk",
|
||||||
"uv",
|
"uv",
|
||||||
|
@ -55,8 +55,10 @@ typedef enum {
|
|||||||
PCM8_SB,
|
PCM8_SB,
|
||||||
HEVAG,
|
HEVAG,
|
||||||
YMZ,
|
YMZ,
|
||||||
|
ULAW,
|
||||||
|
ALAW,
|
||||||
|
|
||||||
UNKNOWN = 99,
|
UNKNOWN = 255,
|
||||||
} txth_codec_t;
|
} txth_codec_t;
|
||||||
|
|
||||||
typedef enum { DEFAULT, NEGATIVE, POSITIVE, INVERTED } txth_loop_t;
|
typedef enum { DEFAULT, NEGATIVE, POSITIVE, INVERTED } txth_loop_t;
|
||||||
@ -238,6 +240,8 @@ VGMSTREAM* init_vgmstream_txth(STREAMFILE* sf) {
|
|||||||
case PCM8_U:
|
case PCM8_U:
|
||||||
case PCM8_SB: interleave = 0x01; break;
|
case PCM8_SB: interleave = 0x01; break;
|
||||||
case PCM_FLOAT_LE: interleave = 0x04; break;
|
case PCM_FLOAT_LE: interleave = 0x04; break;
|
||||||
|
case ULAW:
|
||||||
|
case ALAW: interleave = 0x01; break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -260,6 +264,8 @@ VGMSTREAM* init_vgmstream_txth(STREAMFILE* sf) {
|
|||||||
case PCM8_U: coding = coding_PCM8_U; break;
|
case PCM8_U: coding = coding_PCM8_U; break;
|
||||||
case PCM8_U_int: coding = coding_PCM8_U_int; break;
|
case PCM8_U_int: coding = coding_PCM8_U_int; break;
|
||||||
case PCM8_SB: coding = coding_PCM8_SB; break;
|
case PCM8_SB: coding = coding_PCM8_SB; break;
|
||||||
|
case ULAW: coding = coding_ULAW; break;
|
||||||
|
case ALAW: coding = coding_ALAW; break;
|
||||||
case PCM_FLOAT_LE: coding = coding_PCMFLOAT; break;
|
case PCM_FLOAT_LE: coding = coding_PCMFLOAT; break;
|
||||||
case SDX2: coding = coding_SDX2; break;
|
case SDX2: coding = coding_SDX2; break;
|
||||||
case DVI_IMA: coding = coding_DVI_IMA; break;
|
case DVI_IMA: coding = coding_DVI_IMA; break;
|
||||||
@ -333,6 +339,8 @@ VGMSTREAM* init_vgmstream_txth(STREAMFILE* sf) {
|
|||||||
case coding_PCM8:
|
case coding_PCM8:
|
||||||
case coding_PCM8_U:
|
case coding_PCM8_U:
|
||||||
case coding_PCM8_SB:
|
case coding_PCM8_SB:
|
||||||
|
case coding_ULAW:
|
||||||
|
case coding_ALAW:
|
||||||
case coding_PCMFLOAT:
|
case coding_PCMFLOAT:
|
||||||
case coding_PCM4:
|
case coding_PCM4:
|
||||||
case coding_PCM4_U:
|
case coding_PCM4_U:
|
||||||
@ -993,6 +1001,8 @@ static txth_codec_t parse_codec(txth_header* txth, const char* val) {
|
|||||||
else if (is_string(val,"PCM_FLOAT_LE")) return PCM_FLOAT_LE;
|
else if (is_string(val,"PCM_FLOAT_LE")) return PCM_FLOAT_LE;
|
||||||
else if (is_string(val,"IMA_HV")) return IMA_HV;
|
else if (is_string(val,"IMA_HV")) return IMA_HV;
|
||||||
else if (is_string(val,"HEVAG")) return HEVAG;
|
else if (is_string(val,"HEVAG")) return HEVAG;
|
||||||
|
else if (is_string(val,"ULAW")) return ULAW;
|
||||||
|
else if (is_string(val,"ALAW")) return ALAW;
|
||||||
/* special handling */
|
/* special handling */
|
||||||
else if (is_string(val,"name_value")) return txth->name_values[0];
|
else if (is_string(val,"name_value")) return txth->name_values[0];
|
||||||
else if (is_string(val,"name_value1")) return txth->name_values[0];
|
else if (is_string(val,"name_value1")) return txth->name_values[0];
|
||||||
@ -2132,6 +2142,8 @@ static int get_bytes_to_samples(txth_header* txth, uint32_t bytes) {
|
|||||||
case PCM8_U_int:
|
case PCM8_U_int:
|
||||||
case PCM8_U:
|
case PCM8_U:
|
||||||
case PCM8_SB:
|
case PCM8_SB:
|
||||||
|
case ULAW:
|
||||||
|
case ALAW:
|
||||||
return pcm8_bytes_to_samples(bytes, txth->channels);
|
return pcm8_bytes_to_samples(bytes, txth->channels);
|
||||||
case PCM_FLOAT_LE:
|
case PCM_FLOAT_LE:
|
||||||
return pcm_bytes_to_samples(bytes, txth->channels, 32);
|
return pcm_bytes_to_samples(bytes, txth->channels, 32);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user