def testGetRealizedA(self): from music21 import volume, dynamics v1 = volume.Volume(velocity=64) self.assertEqual(v1.getRealizedStr(), '0.5') d1 = dynamics.Dynamic('p') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '0.35') d1 = dynamics.Dynamic('ppp') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '0.15') d1 = dynamics.Dynamic('fff') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '0.91') # if vel is at max, can scale down with a dynamic v1 = volume.Volume(velocity=127) d1 = dynamics.Dynamic('fff') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '1.0') d1 = dynamics.Dynamic('ppp') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '0.3') d1 = dynamics.Dynamic('mp') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '0.9') d1 = dynamics.Dynamic('p') self.assertEqual(v1.getRealizedStr(useDynamicContext=d1), '0.7')
def write_song(chords, off=0.0): #mod_chs = [chord.Chord(ch) for ch in chords] from music21 import chord, harmony, interval #Chord/Music Theory parsing from music21 import midi, volume, stream #Music Generation print(chords) # chords = [int(c) for c in chords] mod_chs = [] for ch in chords: print(ch) try: mod_chs.append(chord.Chord(ch)) except: print("failed...") pass for note in mod_chs: note.volume = volume.Volume(velocity=90) note.volume.velocityIsRelative = False note.offset = off off += 1.2 s = stream.Stream(mod_chs) print("Moving chords to stream, memory alloc {}".format(s)) mf = midi.translate.streamToMidiFile(s) #fname = '{}.midi'.format(time.strftime("%Y%m%d-%H%M%S")) fname = "output.midi" mf.open(fname, 'wb') mf.write() mf.close() print('done writing midi file') return fname
def testBasic(self): from music21 import volume, note n1 = note.Note() v = volume.Volume(client=n1) self.assertEqual(v.client, n1) del n1 # weak ref does not exist self.assertEqual(v.client, None)
def testDeepCopyA(self): import copy from music21 import volume, note n1 = note.Note() v1 = volume.Volume() v1.velocity = 111 v1.client = n1 v1Copy = copy.deepcopy(v1) self.assertEqual(v1.velocity, 111) self.assertEqual(v1Copy.velocity, 111) self.assertEqual(v1.client, n1) self.assertEqual(v1Copy.client, n1)
def testGetContextSearchA(self): from music21 import stream, note, volume, dynamics s = stream.Stream() d1 = dynamics.Dynamic('mf') s.insert(0, d1) d2 = dynamics.Dynamic('f') s.insert(2, d2) n1 = note.Note('g') v1 = volume.Volume(client=n1) s.insert(4, n1) # can get dynamics from volume object self.assertEqual(v1.client.getContextByClass('Dynamic'), d2) self.assertEqual(v1.getDynamicContext(), d2)
if __name__ == '__main__': from music21 import corpus, converter, note, base, volume, duration, stream, environment p = converter.parse('tinynotation: 3/4 c4 d4 e4 f4 g4 a4').makeMeasures() s = stream.Score() s.insert(0, p) p2 = converter.parse('tinynotation: 3/4 A4 B4 c d e f').makeMeasures() s.insert(0, p2) s = corpus.parse('bwv66.6') n = note.Note() #s = stream.Stream() b = base.Music21Object() v = volume.Volume() d = duration.Duration() dataStr = fillTemplate(s) environLocal = environment.Environment() ext = '.html' fp = environLocal.getTempFile(ext) f = open(fp, 'w') f.write(dataStr) f.close() environLocal.launch(ext, fp) #### # eof