OSDN Git Service

[VM][CMT] Align endianess around loading/saving WAV.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc6001 / sub.cpp
index da4ad9b..f6a37da 100644 (file)
@@ -292,20 +292,39 @@ void SUB::close_tape()
 #endif
                                uint32_t length = fio->Ftell();
                                
+                               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);