Merge pull request #61168 from DeeJayLSP/wav_ieee
This commit is contained in:
commit
f254500753
|
@ -162,7 +162,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
|
||||||
//Consider revision for engine version 3.0
|
//Consider revision for engine version 3.0
|
||||||
compression_code = file->get_16();
|
compression_code = file->get_16();
|
||||||
if (compression_code != 1 && compression_code != 3) {
|
if (compression_code != 1 && compression_code != 3) {
|
||||||
ERR_FAIL_V_MSG(ERR_INVALID_DATA, "Format not supported for WAVE file (not PCM). Save WAVE files as uncompressed PCM instead.");
|
ERR_FAIL_V_MSG(ERR_INVALID_DATA, "Format not supported for WAVE file (not PCM). Save WAVE files as uncompressed PCM or IEEE float instead.");
|
||||||
}
|
}
|
||||||
|
|
||||||
format_channels = file->get_16();
|
format_channels = file->get_16();
|
||||||
|
@ -180,6 +180,10 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
|
||||||
ERR_FAIL_V_MSG(ERR_INVALID_DATA, "Invalid amount of bits in the sample (should be one of 8, 16, 24 or 32).");
|
ERR_FAIL_V_MSG(ERR_INVALID_DATA, "Invalid amount of bits in the sample (should be one of 8, 16, 24 or 32).");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (compression_code == 3 && format_bits % 32) {
|
||||||
|
ERR_FAIL_V_MSG(ERR_INVALID_DATA, "Invalid amount of bits in the IEEE float sample (should be 32 or 64).");
|
||||||
|
}
|
||||||
|
|
||||||
/* Don't need anything else, continue */
|
/* Don't need anything else, continue */
|
||||||
format_found = true;
|
format_found = true;
|
||||||
}
|
}
|
||||||
|
@ -208,18 +212,13 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
|
||||||
|
|
||||||
data.resize(frames * format_channels);
|
data.resize(frames * format_channels);
|
||||||
|
|
||||||
|
if (compression_code == 1) {
|
||||||
if (format_bits == 8) {
|
if (format_bits == 8) {
|
||||||
for (int i = 0; i < frames * format_channels; i++) {
|
for (int i = 0; i < frames * format_channels; i++) {
|
||||||
// 8 bit samples are UNSIGNED
|
// 8 bit samples are UNSIGNED
|
||||||
|
|
||||||
data.write[i] = int8_t(file->get_8() - 128) / 128.f;
|
data.write[i] = int8_t(file->get_8() - 128) / 128.f;
|
||||||
}
|
}
|
||||||
} else if (format_bits == 32 && compression_code == 3) {
|
|
||||||
for (int i = 0; i < frames * format_channels; i++) {
|
|
||||||
//32 bit IEEE Float
|
|
||||||
|
|
||||||
data.write[i] = file->get_float();
|
|
||||||
}
|
|
||||||
} else if (format_bits == 16) {
|
} else if (format_bits == 16) {
|
||||||
for (int i = 0; i < frames * format_channels; i++) {
|
for (int i = 0; i < frames * format_channels; i++) {
|
||||||
//16 bit SIGNED
|
//16 bit SIGNED
|
||||||
|
@ -240,6 +239,21 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
|
||||||
data.write[i] = (int32_t(s) >> 16) / 32768.f;
|
data.write[i] = (int32_t(s) >> 16) / 32768.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (compression_code == 3) {
|
||||||
|
if (format_bits == 32) {
|
||||||
|
for (int i = 0; i < frames * format_channels; i++) {
|
||||||
|
//32 bit IEEE Float
|
||||||
|
|
||||||
|
data.write[i] = file->get_float();
|
||||||
|
}
|
||||||
|
} else if (format_bits == 64) {
|
||||||
|
for (int i = 0; i < frames * format_channels; i++) {
|
||||||
|
//64 bit IEEE Float
|
||||||
|
|
||||||
|
data.write[i] = file->get_double();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (file->eof_reached()) {
|
if (file->eof_reached()) {
|
||||||
ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Premature end of file.");
|
ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Premature end of file.");
|
||||||
|
|
Loading…
Reference in New Issue