-
Notifications
You must be signed in to change notification settings - Fork 27
Open
Description
Hi,
I'm trying to modify this example in order to make it compatible with multiprocessing.
Mainly I had to rename some global variables:
#!/usr/bin/env python3
import sys
import threading
import jack
from mido import MidiFile
from multiprocessing import Process
midi_file = '../Musica/Mozart/k265/Zwölf-Variationen.midi'
try:
mid = iter(MidiFile(midi_file))
except Exception as e:
sys.exit(type(e).__name__ + ' while loading MIDI: ' + str(e))
client = jack.Client('Luces')
midi_port = client.midi_outports.register('output')
midi_event = threading.Event()
midi_msg = next(mid)
midi_fs = None # sampling rate
midi_offset = 0
@client.set_process_callback
def process(frames):
global midi_offset
global midi_msg
midi_port.clear_buffer()
while True:
if midi_offset >= frames:
midi_offset -= frames
return # We'll take care of this in the next block ...
# Note: This may raise an exception:
midi_port.write_midi_event(midi_offset, midi_msg.bytes())
try:
midi_msg = next(mid)
except StopIteration:
midi_event.set()
raise jack.CallbackExit
midi_offset += round(midi_msg.time * midi_fs)
@client.set_samplerate_callback
def samplerate(samplerate):
global midi_fs
midi_fs = samplerate
@client.set_shutdown_callback
def shutdown(status, reason):
print('JACK shutdown:', reason, status)
midi_event.set()
def run_midi():
with client:
print('Playing', repr(midi_file), '... press Ctrl+C to stop')
try:
midi_event.wait()
except KeyboardInterrupt:
print('\nInterrupted by user')
if __name__ == "__main__":
processes = [Process(target=run_midi)]
for p in processes:
p.start()
for p in processes:
p.join()
Now I get this error at the end of the execution:
Playing '../Musica/Mozart/k265/Zwölf-Variationen.midi' ... press Ctrl+C to stop
Cannot read socket fd = 5 err = Success
CheckRes error
JackSocketClientChannel read fail
JACK shutdown: JACK server has been closed <jack.Status 0x21: failure, server_error>
How can I fix it?
Thank you!
Carlo
Metadata
Metadata
Assignees
Labels
No labels