|
15 | 15 | # SkoolKit. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 |
|
17 | 17 | from math import ceil, floor |
| 18 | +from struct import pack |
18 | 19 |
|
19 | 20 | CLOCK_SPEED = 'ClockSpeed' |
20 | 21 | CONTENTION_BEGIN = 'ContentionBegin' |
@@ -187,25 +188,22 @@ def _delays_to_samples(self, delays, options): |
187 | 188 | t += sample_delay |
188 | 189 | return samples |
189 | 190 |
|
190 | | - def _to_int32(self, num): |
191 | | - return (num & 255, (num >> 8) & 255, (num >> 16) & 255, num >> 24) |
192 | | - |
193 | 191 | def _write_wav(self, audio_file, samples, options): |
194 | 192 | sample_rate = options[SAMPLE_RATE] |
195 | 193 | data_length = 2 * len(samples) |
196 | 194 | header = bytearray() |
197 | 195 | header.extend(b'RIFF') |
198 | | - header.extend(self._to_int32(36 + data_length)) |
| 196 | + header.extend(pack('<I', 36 + data_length)) |
199 | 197 | header.extend(b'WAVEfmt ') |
200 | | - header.extend(self._to_int32(16)) # length of fmt chunk |
| 198 | + header.extend(pack('<I', 16)) # length of fmt chunk |
201 | 199 | header.extend((1, 0)) # format (1=PCM) |
202 | 200 | header.extend((1, 0)) # channels |
203 | | - header.extend(self._to_int32(sample_rate)) # sample rate |
204 | | - header.extend(self._to_int32(sample_rate * 2)) # byte rate |
| 201 | + header.extend(pack('<I', sample_rate)) # sample rate |
| 202 | + header.extend(pack('<I', sample_rate * 2)) # byte rate |
205 | 203 | header.extend((2, 0)) # bytes per sample |
206 | 204 | header.extend((16, 0)) # bits per sample |
207 | 205 | header.extend(b'data') |
208 | | - header.extend(self._to_int32(data_length)) # length of data chunk |
| 206 | + header.extend(pack('<I', data_length)) # length of data chunk |
209 | 207 | audio_file.write(header) |
210 | 208 | for sample in samples: |
211 | 209 | audio_file.write(bytes((sample & 255, sample // 256))) |
0 commit comments