aboutsummaryrefslogtreecommitdiff
path: root/looper.py
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 /looper.py
parentf63ce92e6009801e545d3f2d3c4c9e90acd1b491 (diff)
Add wav header to output
Diffstat (limited to 'looper.py')
-rwxr-xr-xlooper.py88
1 files changed, 0 insertions, 88 deletions
diff --git a/looper.py b/looper.py
deleted file mode 100755
index f2f2749..0000000
--- a/looper.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python3
-
-import random
-import struct
-import sys
-import usb.core
-import usb.util
-
-LOOPER_VID = 0x0483
-LOOPER_PID = 0x572a
-
-ENDPOINT_IN = 0x81
-ENDPOINT_OUT = 0x01
-
-COMMAND_SIZE = 0xfe
-COMMAND_DATA = 0xff
-
-def mass_storage_header(data_len, cdb_len):
- header = bytes([ord('U'), ord('S'), ord('B'), ord('C')])
- tag = random.randint(0, 1<<32 - 1)
- flags = 0x80
- target = 0x00
- header += struct.pack('<iiBBB', tag, data_len, flags, target, cdb_len)
- return header
-
-def command_header(command, data_len, flag1, flag2):
- cdb = bytes([0xcb, command, flag1, 0x00, flag2, 0x00, 0x00, 0x00, 0x00, 0x00])
- header = mass_storage_header(data_len, len(cdb)) + cdb
- header += bytes([0x00 for padding in range(31-len(header))])
- return header
-
-def ack_data(dev):
- dev.read(ENDPOINT_IN, 32)
-
-def get_size(dev):
- header = command_header(COMMAND_SIZE, 5, 0x00, 0x01)
- dev.write(ENDPOINT_OUT, header)
- length = dev.read(ENDPOINT_IN, 100)
- ack_data(dev)
- if length[0] == 1:
- return 0
- return length[1] + (length[2] << 8) + (length[3] << 16) + (length[4] << 24)
-
-def get_data(dev, nbytes):
- header = command_header(COMMAND_DATA, nbytes, 0x01, 0x01)
- dev.write(ENDPOINT_OUT, header)
- buf = dev.read(ENDPOINT_IN, nbytes)
- ack_data(dev)
- print('.', end='', flush=True),
- return buf
-
-def send_data(dev, data):
- header = command_header(COMMAND_DATA, len(data), 0x01, 0x00)
- dev.write(ENDPOINT_OUT, header)
- #dev.read(ENDPOINT_IN, 100)
- dev.write(ENDPOINT_OUT, data)
-
-def send_stop(dev):
- header = command_header(COMMAND_SIZE, 5, 0x00, 0x00)
-
-def write_wav_header(outfile):
- pass
-
-dev = usb.core.find(idVendor=LOOPER_VID, idProduct=LOOPER_PID)
-if not dev:
- print("Device not found.")
- sys.exit(1)
-if dev.is_kernel_driver_active(0):
- dev.detach_kernel_driver(0)
-dev.set_configuration()
-
-size = get_size(dev)
-if size == 0:
- print("No data available.")
- sys.exit(0)
-
-with open("/tmp/dump.wav", 'wb') as outfile:
- write_wav_header(outfile)
- print("Receiving ", end='', flush=True)
- while size > 0:
- bufsize = (size >= 65536) and 65536 or size
- # data needs to be transferred in multiples of 1k blocks
- padding = (1024 - (bufsize % 1024)) % 1024
-
- buf = get_data(dev, bufsize + padding)
- outfile.write(buf[:bufsize])
- size -= bufsize
- print(" Done.")