aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2017-08-28 19:26:17 +0200
committerReiner Herrmann <reiner@reiner-h.de>2017-08-29 15:56:08 +0200
commit27738b6b1987862bad62b27e49954481b3db246e (patch)
treeccc4ba715fa348a8f43bb60311128eb824307b09
parentf63ce92e6009801e545d3f2d3c4c9e90acd1b491 (diff)
Add wav header to output
-rwxr-xr-xloopertrx.py (renamed from looper.py)22
1 files changed, 18 insertions, 4 deletions
diff --git a/looper.py b/loopertrx.py
index f2f2749..ec1d8a8 100755
--- a/looper.py
+++ b/loopertrx.py
@@ -16,7 +16,7 @@ COMMAND_SIZE = 0xfe
COMMAND_DATA = 0xff
def mass_storage_header(data_len, cdb_len):
- header = bytes([ord('U'), ord('S'), ord('B'), ord('C')])
+ header = "USBC".encode('ascii')
tag = random.randint(0, 1<<32 - 1)
flags = 0x80
target = 0x00
@@ -58,8 +58,22 @@ def send_data(dev, data):
def send_stop(dev):
header = command_header(COMMAND_SIZE, 5, 0x00, 0x00)
-def write_wav_header(outfile):
- pass
+def write_wav_header(outfile, data_size):
+ header_size = 44
+ header = "RIFF".encode('ascii')
+ header += struct.pack('<i', data_size + header_size - 8)
+ header += "WAVE".encode('ascii')
+ header += "fmt ".encode('ascii')
+ fmt = 0x01 # PCM
+ nchan = 1
+ rate = 48000
+ fsize = 3
+ bps = rate * fsize
+ bits = 24
+ header += struct.pack('<ihhiihh', 16, fmt, nchan, rate, bps, fsize, bits)
+ header += "data".encode('ascii')
+ header += struct.pack('<i', data_size)
+ outfile.write(header)
dev = usb.core.find(idVendor=LOOPER_VID, idProduct=LOOPER_PID)
if not dev:
@@ -75,7 +89,7 @@ if size == 0:
sys.exit(0)
with open("/tmp/dump.wav", 'wb') as outfile:
- write_wav_header(outfile)
+ write_wav_header(outfile, size)
print("Receiving ", end='', flush=True)
while size > 0:
bufsize = (size >= 65536) and 65536 or size