-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontroller.py
More file actions
58 lines (45 loc) · 1.83 KB
/
controller.py
File metadata and controls
58 lines (45 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import logging
from diquencer import Sequencer
from diquencer.events import MuteEvent, PatternEvent
from diquencer.models import Pattern
from diquencer.sequence import Sequence
from audio_recorder import AudioRecorder
class WrongChannelError(Exception):
pass
class PatternDumpController:
def __init__(self):
self._audio_recorder = AudioRecorder()
self._sequencer = Sequencer(start_callback=self._audio_recorder.start)
def get_output_ports(self):
return self._sequencer.get_output_ports()
def set_output_port(self, port):
self._sequencer.set_output_port(port)
def get_audio_devices(self):
return self._audio_recorder.get_audio_devices()
def set_audio_device(self, device, samplerate, bitrate):
self._audio_recorder.set_audio_device(device)
self._audio_recorder.samplerate = samplerate
self._audio_recorder.bitrate = bitrate
def set_midi_channel(self, channel: int) -> None:
if not (channel > 0 and channel <= 16):
raise WrongChannelError
self._sequencer.set_midi_channel(channel)
def dump_pattern(
self,
tempo: int,
pattern: int,
bank: str,
length: int
) -> None:
pattern_event = PatternEvent(0, Pattern(pattern, bank, length), 1)
for track in range(1, 9):
logging.info(f'Recording track {track}')
mute_event = MuteEvent(0, (track, ))
events = [pattern_event, mute_event]
sequence = Sequence(tempo, events)
self._audio_recorder.filename = f'track{track}.wav'
self._audio_recorder.prepare_recording()
self._sequencer.set_sequence(sequence)
self._sequencer.start(blocking=True)
self._audio_recorder.stop()
logging.info('All tracks recorded')