Exemple #1
0
 def setUp(self):
     self.i = Instrument()
     self.p = Piano()
     self.g = Guitar()
     self.notes = NoteContainer(["A", "B", "C", "D", "E"])
     self.noteslow = NoteContainer(["C-0", "D-0", "E-0"])
     self.noteshigh = NoteContainer(["A-12", "B-12", "C-12", "D-12", "E-12"])
 def setUp(self):
     self.i = Instrument()
     self.p = Piano()
     self.g = Guitar()
     self.notes = NoteContainer(['A', 'B', 'C', 'D', 'E'])
     self.noteslow = NoteContainer(['C-0', 'D-0', 'E-0'])
     self.noteshigh = NoteContainer(
         ['A-12', 'B-12', 'C-12', 'D-12', 'E-12'])
Exemple #3
0
class test_Instrument(unittest.TestCase):
    def setUp(self):
        self.i = Instrument()
        self.p = Piano()
        self.g = Guitar()
        self.notes = NoteContainer(["A", "B", "C", "D", "E"])
        self.noteslow = NoteContainer(["C-0", "D-0", "E-0"])
        self.noteshigh = NoteContainer(
            ["A-12", "B-12", "C-12", "D-12", "E-12"])

    def test_note_in_range(self):
        for x in self.notes:
            self.assertTrue(self.i.note_in_range(x))
            self.assertTrue(self.p.note_in_range(x))
            self.assertTrue(self.g.note_in_range(x))
        for x in self.noteslow + self.noteshigh:
            self.assertEqual(
                False,
                self.p.note_in_range(x),
                "%s should not be able to be played by a Piano" % x,
            )
            self.assertEqual(
                False,
                self.g.note_in_range(x),
                "%s should not be able to be played by a Guitar" % x,
            )

    def test_can_play_notes(self):
        self.assertTrue(self.i.can_play_notes(self.notes))
        self.assertTrue(self.p.can_play_notes(self.notes))
        self.assertTrue(self.g.can_play_notes(self.notes))
        self.assertEqual(False, self.p.can_play_notes(self.noteslow))
        self.assertEqual(False, self.g.can_play_notes(self.noteslow))
        self.assertEqual(False, self.p.can_play_notes(self.noteshigh))
        self.assertEqual(False, self.g.can_play_notes(self.noteshigh))
        self.assertEqual(
            False,
            self.g.can_play_notes(
                NoteContainer([
                    "A",
                    "B",
                    "C",
                    "D",
                    "E",
                    "F",
                    "G",
                ])),
        )
 def setUp(self):
     self.i = Instrument()
     self.p = Piano()
     self.g = Guitar()
     self.notes = NoteContainer(['A', 'B', 'C', 'D', 'E'])
     self.noteslow = NoteContainer(['C-0', 'D-0', 'E-0'])
     self.noteshigh = NoteContainer(['A-12', 'B-12', 'C-12', 'D-12', 'E-12'])
class test_Instrument(unittest.TestCase):
    def setUp(self):
        self.i = Instrument()
        self.p = Piano()
        self.g = Guitar()
        self.notes = NoteContainer(['A', 'B', 'C', 'D', 'E'])
        self.noteslow = NoteContainer(['C-0', 'D-0', 'E-0'])
        self.noteshigh = NoteContainer(
            ['A-12', 'B-12', 'C-12', 'D-12', 'E-12'])

    def test_note_in_range(self):
        for x in self.notes:
            self.assert_(self.i.note_in_range(x))
            self.assert_(self.p.note_in_range(x))
            self.assert_(self.g.note_in_range(x))
        for x in self.noteslow + self.noteshigh:
            self.assertEqual(
                False, self.p.note_in_range(x),
                '%s should not be able to be played by a Piano' % x)
            self.assertEqual(
                False, self.g.note_in_range(x),
                '%s should not be able to be played by a Guitar' % x)

    def test_can_play_notes(self):
        self.assert_(self.i.can_play_notes(self.notes))
        self.assert_(self.p.can_play_notes(self.notes))
        self.assert_(self.g.can_play_notes(self.notes))
        self.assertEqual(False, self.p.can_play_notes(self.noteslow))
        self.assertEqual(False, self.g.can_play_notes(self.noteslow))
        self.assertEqual(False, self.p.can_play_notes(self.noteshigh))
        self.assertEqual(False, self.g.can_play_notes(self.noteshigh))
        self.assertEqual(
            False,
            self.g.can_play_notes(
                NoteContainer([
                    'A',
                    'B',
                    'C',
                    'D',
                    'E',
                    'F',
                    'G',
                ])))
class test_Instrument(unittest.TestCase):

    def setUp(self):
        self.i = Instrument()
        self.p = Piano()
        self.g = Guitar()
        self.notes = NoteContainer(['A', 'B', 'C', 'D', 'E'])
        self.noteslow = NoteContainer(['C-0', 'D-0', 'E-0'])
        self.noteshigh = NoteContainer(['A-12', 'B-12', 'C-12', 'D-12', 'E-12'])

    def test_note_in_range(self):
        for x in self.notes:
            self.assert_(self.i.note_in_range(x))
            self.assert_(self.p.note_in_range(x))
            self.assert_(self.g.note_in_range(x))
        for x in self.noteslow + self.noteshigh:
            self.assertEqual(False, self.p.note_in_range(x),
                             '%s should not be able to be played by a Piano'
                              % x)
            self.assertEqual(False, self.g.note_in_range(x),
                             '%s should not be able to be played by a Guitar'
                              % x)

    def test_can_play_notes(self):
        self.assert_(self.i.can_play_notes(self.notes))
        self.assert_(self.p.can_play_notes(self.notes))
        self.assert_(self.g.can_play_notes(self.notes))
        self.assertEqual(False, self.p.can_play_notes(self.noteslow))
        self.assertEqual(False, self.g.can_play_notes(self.noteslow))
        self.assertEqual(False, self.p.can_play_notes(self.noteshigh))
        self.assertEqual(False, self.g.can_play_notes(self.noteshigh))
        self.assertEqual(False, self.g.can_play_notes(NoteContainer([
            'A',
            'B',
            'C',
            'D',
            'E',
            'F',
            'G',
            ])))
Exemple #7
0
def export(melody_track, chords, key, time_sig, bpm, file):
    i = Instrument()
    i.instrument_nr = 1
    t2 = Track()
    for i in range(0, len(chords)):
        b = Bar(key, time_sig)
        if len(chords[i][0]) > 5:
            b.place_notes(None, 1)
        else:
            b.place_notes(NoteContainer(chords[i]), 1)
        t2 + b

    c = Composition()
    c.add_track(melody_track)
    c.add_track(t2)

    out_dir = 'out'

    if not os.path.exists(out_dir):
        os.makedirs(out_dir)
    mid = file.split('/')[-1]
    if os.path.exists(out_dir + '/' + mid):
        os.remove(out_dir + '/' + mid)
    MidiFileOut.write_Composition(out_dir + '/' + mid, c, bpm)

    file = out_dir + '/' + mid

    sys.argv.append('')
    sys.argv.append('')

    sys.argv[1] = "--midi-file=" + file
    sys.argv[2] = "--out-dir=" + out_dir

    midi.main()
    if os.path.exists(file):
        os.remove(file)
c.augment()  #升半音
c.diminish()  #降半音
c.remove_redundant_accidentals()  #清理多余升降号(只能成对清理,烂)

#谱容器
from mingus.containers import NoteContainer
#创建谱容器对象(继承列表,完全可以按列表操作,不用看下面的)
n = NoteContainer(['A-3', 'C-5', 'B-4'])
n.add_note('F-1')  # 0位加音
n.remove_note('B', 4)  #删音
n.empty()  #清空

#乐器音色
from mingus.containers.instrument import Instrument, Piano, Guitar
#创建乐器对象
i = Instrument()
i.range  #乐器音域
i.set_range((Note('C-2'), Note('E-4')))  #设定音域
i.note_in_range('F-4')  #判断音是否在乐器音域内
#音轨
from mingus.containers import Track
t = Track(i)  #乐器放入音轨容器

#MIDI音乐播放(安装困难)
#from mingus.midi import fluidsynth
#fluidsynth.init("soundfont.SF2")
#fluidsynth.play_Note( Note('C-5') )

from mingus.midi import MidiFileOut
MidiFileOut.write_NoteContainer('test.mid', n)
Exemple #9
0
 def setUp(self):
     self.i = Track(Instrument())
     self.p = Track(Piano())
     self.g = Track(Guitar())
     self.tr = Track()
    def __init__(self, key="C", scale="Major", bpm=120, semitones=()):

        self.bpm = bpm
        print "BPM is: "
        print bpm
        print "scale is: "
        print scale
        print "key is: "
        print key

        self.meter_numerator = 4.0
        self.meter_denominator = 4.0

        self.mapping_dur_vals = [1,2,3,4,8,16]
        self.mapping_dur_max = max(self.mapping_dur_vals)
        self.mapping_dur_min = min(self.mapping_dur_vals)

        self.instrs = [
            {
                "instr"        : Guitar(),
                "mapping_vals" : []
            }
            #,
            #{
            #    "instr" : Guitar(),
            #    "mapping_vals" : []
            #}
        ]

        self.scale = scale
        self.key   = key
        if self.scale == "Diatonic":
            if semitones == None or semitones == () or len(semitones) == 0:
                self.semitones = (3, 7)
            elif len(semitones) != 2:
                raise SemitoneTupleLength('Length of semitone tuple is not 2'
                                          ' or 0 (default semitones)')
            elif len(semitones) == 2:
                self.semitones = semitones

        allowed_scale_names  = []
        scale_names = scales._Scale.__subclasses__()
        for curr_name in scale_names:
            allowed_scale_names.append(curr_name.__name__)

        print "Scale Names are: "
        print allowed_scale_names

        if scale not in allowed_scale_names:
            raise InvalidKey('The specified key is not a valid key')

        for instr in self.instrs:
            vals_to_map = self.gen_scale_mapping(instr)
            instr["mapping_vals"] = vals_to_map

            if not hasattr(self, 'overall_mapping_range_min') or instr["mapping_vals"][0] < self.overall_mapping_range_min:
                self.overall_mapping_range_min = instr["mapping_vals"][0]

            if not hasattr(self, 'overall_mapping_range_max') or instr["mapping_vals"][-1] > self.overall_mapping_range_max:
                self.overall_mapping_range_max = instr["mapping_vals"][-1]

        #set the overall mapping range
        overall_instr = Instrument()
        overall_instr.set_range((Note(self.overall_mapping_range_min),
                                 Note(self.overall_mapping_range_max)))
        self.overall_mapping_vals = self.gen_scale_mapping({"instr" :
                                                            overall_instr})