Skip to content

Commit c2a3888

Browse files
committed
Use struct.pack() in AudioWriter._write_wav()
1 parent eeb64ad commit c2a3888

1 file changed

Lines changed: 6 additions & 8 deletions

File tree

skoolkit/audio.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
# SkoolKit. If not, see <http://www.gnu.org/licenses/>.
1616

1717
from math import ceil, floor
18+
from struct import pack
1819

1920
CLOCK_SPEED = 'ClockSpeed'
2021
CONTENTION_BEGIN = 'ContentionBegin'
@@ -187,25 +188,22 @@ def _delays_to_samples(self, delays, options):
187188
t += sample_delay
188189
return samples
189190

190-
def _to_int32(self, num):
191-
return (num & 255, (num >> 8) & 255, (num >> 16) & 255, num >> 24)
192-
193191
def _write_wav(self, audio_file, samples, options):
194192
sample_rate = options[SAMPLE_RATE]
195193
data_length = 2 * len(samples)
196194
header = bytearray()
197195
header.extend(b'RIFF')
198-
header.extend(self._to_int32(36 + data_length))
196+
header.extend(pack('<I', 36 + data_length))
199197
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
201199
header.extend((1, 0)) # format (1=PCM)
202200
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
205203
header.extend((2, 0)) # bytes per sample
206204
header.extend((16, 0)) # bits per sample
207205
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
209207
audio_file.write(header)
210208
for sample in samples:
211209
audio_file.write(bytes((sample & 255, sample // 256)))

0 commit comments

Comments
 (0)