In [17]:
import pyrhythmicator
from IPython.display import Audio, display

Define the rhythm synthesizer with 3 voices in 4/4:


In [18]:
pg = pyrhythmicator.PatternGenerator(4,4,['4n','8n','16n',],
                                     metric_factor=[1.,1.,1.,],
                                     syncopate_factor=[0.,1.,1.,],
                                     density=[0.5,0.5,0.9],
                                     dynamic_range_low=[0.8,0.7,0.7])

Generate a 3-voice pattern:


In [19]:
pg.generate_pattern(3)


Using default `self.event_var`
Using default `self.sync_var`
Using default `self.threshold`
Using default `self.weight_minimum`
Using default `self.dynamic_range_high`

Synthesize the pattern given the 3 audio files in tests/data. Output the audio to output_file.wav and the annotation file to output_file.jams:


In [20]:
mix, voices = pg.synthesize('output_file.wav', 
                            output_jams_file='output_file.jams',
                            audio_files=pyrhythmicator.list_audio_files_in_dir('tests/data', prepend_path=True))

print('Mix:')
display(Audio(mix, rate=pg.sample_rate))
for k, voice in enumerate(voices):
    print('Voice {}:'.format(k))
    display(Audio(voice, rate=pg.sample_rate))


Mix:
Voice 0:
Voice 1:
Voice 2:

Synthesize another output file, this time with a duration of 9.7 s:


In [21]:
mix, voices = pg.synthesize('output_file2.wav', 
                            output_jams_file='output_file2.jams',
                            duration_sec=9.7,
                            audio_files=pyrhythmicator.list_audio_files_in_dir('tests/data', prepend_path=True))

display(Audio(mix, rate=pg.sample_rate))


Load a pattern generator and pattern from an annotation file, and synthesize again:


In [22]:
pg = pyrhythmicator.PatternGenerator.from_jams('output_file2.jams')
mix, voices = pg.synthesize('output_file3.wav')

display(Audio(mix, rate=pg.sample_rate))


Generate 5 patterns given the current pattern generator:


In [23]:
import random

for i in range(5):
    idx = random.randint(0,1000)
    pg.generate_pattern(3)
    mix, voices = pg.synthesize('pattern_{}.wav'.format(idx),
                                output_jams_file='pattern_{}.jams'.format(idx),
                                duration_sec=20.4,
                                audio_files=pyrhythmicator.list_audio_files_in_dir('tests/data',prepend_path=True))
    
    print('Pattern {}:'.format(i))
    display(Audio(mix, rate=pg.sample_rate))


Using default `self.event_var`
Using default `self.sync_var`
Pattern 0:
Pattern 1:
Pattern 2:
Pattern 3:
Pattern 4:

In [ ]: