9 Commits
dev ... v1.1.1

Author SHA1 Message Date
Thomas Herrmann
a4e87e4bbf Ch 8 fix for win exectuable V1.1.1 2022-04-15 17:09:08 +02:00
Thomas Herrmann
a162d06a62 Fixed Channel 8 bug 2022-04-15 17:02:47 +02:00
Thomas Herrmann
5141d3e324 Brought linux version to 1.1 2022-04-13 22:35:42 +02:00
Thomas Herrmann
f0c438d7fa update mac version 2022-04-13 10:40:00 -07:00
Thomas Herrmann
815354f4e6 mac-executable 2022-04-13 10:28:31 -07:00
Thomas Herrmann
27718f3e29 added 1.1 win executable 2022-04-13 11:30:12 +02:00
Thomas Herrmann
85c7df594b Create FUNDING.yml 2022-04-13 11:11:03 +02:00
Thomas Herrmann
ebc097d901 Update README.md
Extended Mac description
2022-04-13 10:33:37 +02:00
Thomas Herrmann
28f4ef3334 Merge pull request #10 from BKLronin/dev
Changed "architecture" to Class
2022-04-08 11:22:18 -07:00
7 changed files with 37 additions and 20 deletions

13
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
# These are supported funding model platforms
github: BKLronin # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -5,16 +5,19 @@
## Description ## Description
- Exports patterns and projects individual audio tracks to seperate folders for use in your DAW. - Exports patterns and projects individual audio tracks to seperate folders for use in your DAW.
- Python cross plattform with single file binary for x86 linux. - Python cross plattform with single file binary for x86 linux Windows and Mac.
## Using Packaged single file Binarys _(The easy way)_ ## Using Packaged single file Binarys _(The easy way)_
- Executables reside in the folder `/dist/` - Executables reside in the folder `/dist/` or in the release tab.
- on Windows - on Windows
`underbridge.exe` ``underbridge.exe``
- On Linux: - On Linux:
``./underbridge`` ``./underbridge``
- on Mac
Open terminal and change directory to where the underbridge_mac file is located and execute:
``chmod 755 underbridge_mac``
``./underbridge_mac`` or ``open underbridge_mac``
Underbridge_alt was packaged on a different system. Might help if you run into problems. (Outdated) Underbridge_alt was packaged on a different system. Might help if you run into problems. (Outdated)
@@ -23,13 +26,13 @@ Underbridge_alt was packaged on a different system. Might help if you run into p
### Windows ### Windows
- Install Python 3.9 if not already, 3.10 seems to cause problems. - Install Python 3.9 if not already, 3.10 seems to cause problems.
- install portaudio_dev : `apt install portaudio19-dev`
- install mido : `pip install mido` - install mido : `pip install mido`
- install rt-midi: `pip isntall rt-midi` - install rt-midi: `pip isntall rt-midi`
- install pipwin: `pip install pipwin` - install pipwin: `pip install pipwin`
- install pyaudio `pipwin install pyaudio` - install pyaudio `pipwin install pyaudio`
**Activate OP-Z device input in sound settings of windows and make it default** **- Activate OP-Z device input in sound settings of windows and make it default (Should detect automatically just to be sure. **
**- Close all other Applications that might use any audio source like your Browser etc **
- run `python underbridge.py` - run `python underbridge.py`
@@ -85,3 +88,4 @@ open terminal and type: `python3 underbridge.py` to start
### Troubleshooting ### Troubleshooting
- When the recorded audio contains buzzing or other artifacts try disabling the USB charging with "display" and "bottom right key" to disable. - When the recorded audio contains buzzing or other artifacts try disabling the USB charging with "display" and "bottom right key" to disable.
- If the playback of the OP-Z starts correctly but no tracks are muted check that MIDI IN in the OP-Z app or via combo is enabled.

BIN
dist/underbridge vendored

Binary file not shown.

BIN
dist/underbridge.exe vendored

Binary file not shown.

BIN
dist/underbridge_lin vendored Executable file

Binary file not shown.

BIN
dist/underbridge_mac vendored

Binary file not shown.

View File

@@ -133,7 +133,7 @@ class Midirecorder:
try: try:
self.op_device = list(filter(lambda x: 'OP-Z' in x, device_list)) self.op_device = list(filter(lambda x: 'OP-Z' in x, device_list))
self.op_device = self.op_device[0] self.op_device = self.op_device[0]
print (self.op_device) #print (self.op_device)
self.displaymsg.set("OP-Z found") self.displaymsg.set("OP-Z found")
except: except:
self.displaymsg.set("Can´t find OP-Z : MIDI Error.") self.displaymsg.set("Can´t find OP-Z : MIDI Error.")
@@ -196,7 +196,7 @@ class Midirecorder:
#global op_device #global op_device
self.outport= mido.open_output(self.op_device) self.outport= mido.open_output(self.op_device)
#displaymsg.set("OP-Z MIDI not connected :(") #displaymsg.set("OP-Z MIDI not connected :(")
print(self.outport) #print(self.outport)
def setProject(self,projnr): def setProject(self,projnr):
msg= mido.Message('program_change',song= self.projnr, program = 1) msg= mido.Message('program_change',song= self.projnr, program = 1)
@@ -204,19 +204,19 @@ class Midirecorder:
def muteAll(self): def muteAll(self):
checkbutton_name = 0 checkbutton_name = 0
print(self.mute_list) #print(self.mute_list)
for j in range (0,7): for j in range (0,8):
self.mute_list[j] = 1 self.mute_list[j] = 1
for i in range (1,6): for i in range (1,7):
checkbutton_name = 'self.modifier{}_value'.format(i) #checkbutton 1- 6 checkbutton_name = 'self.modifier{}_value'.format(i) #checkbutton 1- 6
self.mute_list[i+7] = eval(checkbutton_name).get() #9th position in mute list self.mute_list[i+7] = eval(checkbutton_name).get() #9th position in mute list
for k in range (0,13): for k in range (0,14):
msg = mido.Message('control_change',control= 53, channel= k, value= self.mute_list[k]) msg = mido.Message('control_change',control= 53, channel= k, value= self.mute_list[k])
self.outport.send(msg) self.outport.send(msg)
print("Muted Channels",self.mute_list) #print("Muted Channels",self.mute_list)
def setSolo(self,chn): def setSolo(self,chn):
msg = mido.Message('control_change',control= 53, channel= chn, value=0) msg = mido.Message('control_change',control= 53, channel= chn, value=0)
@@ -226,7 +226,7 @@ class Midirecorder:
msg = mido.Message('start') msg = mido.Message('start')
self.outport.send(msg) self.outport.send(msg)
self.displaymsg.set("Playback started") self.displaymsg.set("Playback started")
print("midi") #print("midi")
def stop_MIDI(self): def stop_MIDI(self):
msg = mido.Message('stop') msg = mido.Message('stop')
@@ -278,16 +278,16 @@ class Midirecorder:
#print(projectpath) #print(projectpath)
def start_Rec(self): def start_Rec(self):
print("record") #print("record")
self.displaymsg.set("Recording...") self.displaymsg.set("Recording...")
CHUNK = 128 CHUNK = 128
FORMAT = pyaudio.paInt16 FORMAT = pyaudio.paInt16
CHANNELS = 2 CHANNELS = 2
RECORD_SECONDS= self.loop_time RECORD_SECONDS= self.loop_time
print("record") #print("record")
WAVE_OUTPUT_FILENAME = self.name_input.get() + "_" + "track" + str(self.j+1) + ".wav" WAVE_OUTPUT_FILENAME = self.name_input.get() + "_" + "track" + str(self.j+1) + ".wav"
print(WAVE_OUTPUT_FILENAME) #print(WAVE_OUTPUT_FILENAME)
p = pyaudio.PyAudio() p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, stream = p.open(format=FORMAT,
channels=CHANNELS, channels=CHANNELS,
@@ -297,7 +297,7 @@ class Midirecorder:
frames_per_buffer=CHUNK frames_per_buffer=CHUNK
) )
print("* recording") #print("* recording")
frames = [] frames = []
self.start_MIDI() self.start_MIDI()