OSDN Git Service

[VM][CMT] Align endianess around loading/saving WAV.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc8201 / cmt.cpp
index 3b320b2..1fcf514 100644 (file)
@@ -131,20 +131,40 @@ void CMT::close_tape()
                        wav_header_t wav_header;
                        wav_chunk_t wav_chunk;
                        
+                       pair_t __riff_chunk_size;
+                       pair_t __fmt_chunk_size;
+                       pair_t __wav_chunk_size;
+                       pair16_t __fmt_id;
+                       pair16_t __channels;
+                       pair_t __sample_rate;
+                       pair16_t __block_size;
+                       pair16_t __sample_bits;
+
+                       __riff_chunk_size.d = length - 8;
+                       __fmt_chunk_size.d = 16;
+                       __fmt_id.w = 1;
+                       __channels.w = 1;
+                       __sample_rate.d = SAMPLE_RATE;
+                       __block_size.w = 1;
+                       __sample_bits.w = 8;
+       
                        memcpy(wav_header.riff_chunk.id, "RIFF", 4);
-                       wav_header.riff_chunk.size = length - 8;
+                       wav_header.riff_chunk.size = __riff_chunk_size.get_4bytes_le_to();
+       
                        memcpy(wav_header.wave, "WAVE", 4);
                        memcpy(wav_header.fmt_chunk.id, "fmt ", 4);
-                       wav_header.fmt_chunk.size = 16;
-                       wav_header.format_id = 1;
-                       wav_header.channels = 1;
-                       wav_header.sample_rate = SAMPLE_RATE;
-                       wav_header.data_speed = SAMPLE_RATE;
-                       wav_header.block_size = 1;
-                       wav_header.sample_bits = 8;
-                       
+                       wav_header.fmt_chunk.size = __riff_chunk_size.get_4bytes_le_to();
+                       wav_header.format_id = __fmt_id.get_2bytes_le_to();
+                       wav_header.channels = __channels.get_2byte_le_to();
+                       wav_header.sample_rate = __sample_rate.get_4bytes_le_to();
+                       wav_header.data_speed =  __sample_rate.get_4bytes_le_to();
+                       wav_header.block_size = __block_size.get_2bytes_le_to();
+                       wav_header.sample_bits = __sample_bits_get_2bytes_le_to();
+       
                        memcpy(wav_chunk.id, "data", 4);
-                       wav_chunk.size = length - sizeof(wav_header) - sizeof(wav_chunk);
+                       __wav_chunk_size.d = length - sizeof(wav_header) - sizeof(wav_chunk);
+                       wav_chunk.size = __wav_chunk_size.get_4bytes_le_to();
+
                        
                        fio->Fseek(0, FILEIO_SEEK_SET);
                        fio->Fwrite(&wav_header, sizeof(wav_header), 1);