From fc04db759656d9d19fceb54398cf7d48855463e5 Mon Sep 17 00:00:00 2001 From: nmzik Date: Wed, 23 Sep 2026 19:06:16 +0400 Subject: [PATCH] NGS2: preserve ATRAC9 config word byte order --- src/libs/ngs2.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libs/ngs2.cpp b/src/libs/ngs2.cpp index d61158147..fffe4416e 100644 --- a/src/libs/ngs2.cpp +++ b/src/libs/ngs2.cpp @@ -440,8 +440,12 @@ struct Ngs2VoiceInternal { if (format.waveform_type == NGS2_WAVEFORM_TYPE_ATRAC9) { decoder = std::make_unique(channels, format.sample_rate, Ajm::AjmSampleEncoding::Float, 0); - const auto result = - decoder->Initialize(&format.config_data, sizeof(format.config_data)); + const std::array config = { + static_cast(format.config_data >> 24u), + static_cast(format.config_data >> 16u), + static_cast(format.config_data >> 8u), + static_cast(format.config_data)}; + const auto result = decoder->Initialize(config.data(), config.size()); EXIT_NOT_IMPLEMENTED(result.result != OK); EXIT_NOT_IMPLEMENTED(result.format.channel_num != channels || result.format.sampling_frequency != format.sample_rate); @@ -1553,7 +1557,9 @@ static int Ngs2ParseAtrac9Riff(const void* data, size_t data_size, Ngs2WaveformI info->format.waveform_type = NGS2_WAVEFORM_TYPE_ATRAC9; info->format.num_channels = static_cast(codec.channels); info->format.sample_rate = static_cast(codec.samplingRate); - std::memcpy(&info->format.config_data, config.data(), config.size()); + info->format.config_data = (static_cast(config[0]) << 24u) | + (static_cast(config[1]) << 16u) | + (static_cast(config[2]) << 8u) | config[3]; info->data_offset = static_cast(waveform_offset); info->data_size = waveform_size; info->num_samples = Ngs2ReadLe32(fact);