working dos vga writes!
This commit is contained in:
1 parent
5789cafd4e
commit
55ac075e4d
25 files changed
+454
-149
No files matched your search
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python3
|
||||
# Compression testing for sound sample data for expected cases of ours.
|
||||
|
||||
# TODO: Implement our own CLI tool that uses our LZW implementation, as it differs.
|
||||
|
||||
import ncompress
|
||||
import sys
|
||||
import wave
|
||||
import audioop
|
||||
import numpy as np
|
||||
import array
|
||||
|
||||
with wave.open(sys.argv[1], 'rb') as wf:
|
||||
channels = wf.getnchannels()
|
||||
samplerate = wf.getframerate()
|
||||
frames = wf.getnframes()
|
||||
uncompressed = wf.readframes(frames)
|
||||
depth = wf.getsampwidth()
|
||||
|
||||
compressed = ncompress.compress(uncompressed)
|
||||
print("Uncompressed:", len(uncompressed))
|
||||
print("Compressed:", len(compressed), len(compressed) / len(uncompressed))
|
||||
|
||||
delta = bytearray(uncompressed[0].to_bytes(2, signed=False))
|
||||
for i in range(len(uncompressed)-1):
|
||||
delta += (uncompressed[i+1] - uncompressed[i]).to_bytes(2, signed=True)
|
||||
|
||||
dtcompressed = ncompress.compress(bytes(delta))
|
||||
print("Delta:", len(dtcompressed), len(dtcompressed) / len(uncompressed))
|
||||
assert(len(delta) == len(uncompressed)*2)
|
||||
|
||||
ulaw = audioop.lin2ulaw(uncompressed, depth)
|
||||
ulawcompressed = ncompress.compress(ulaw)
|
||||
print("Ulaw:", len(ulawcompressed), len(ulawcompressed) / len(uncompressed))
|
||||
|
||||
absfold = bytearray()
|
||||
for i in range(len(uncompressed)):
|
||||
absfold.append(uncompressed[i] - 128 if uncompressed[i] >= 128 else uncompressed[i])
|
||||
absfoldulaw = audioop.lin2ulaw(absfold, depth)
|
||||
absfoldulawcompressed = ncompress.compress(absfoldulaw)
|
||||
print("Ulawabs:", len(absfoldulawcompressed), len(absfoldulawcompressed) / len(absfold))
|
||||
|
||||
with open(sys.argv[1] + ".ulaw", "wb") as file:
|
||||
file.write(audioop.ulaw2lin(ulaw, depth))
|
||||
Reference in new issue
Block a user