Форум сайта python.su
3
Мысль такая: трансформировать миди-файл в кривую безье. На русском ничего не нашёл. Модули, работающие с миди есть, но, как ими пользоваться я не разобрался, потому что не знаю английский. Может, кто-то знает, как перевести миди в текст? Имея текст я уж соображу, как составить из него кривую.
Офлайн
0
я не совсем хорошо представляю что такое кривая безье, но как мне показалось тебе нужно получить массив из миди файла. я сталкивался с подобной задачей, однако для wav файла. думаю тебе может помочь следующий код:
#!/usr/bin/env python # -*- coding: utf-8 -*- import wave import numpy as np np.set_printoptions(threshold=np.nan) types = { 1: np.int8, 2: np.int16, 4: np.int32 } wav = wave.open("record.wav", mode="r") (nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams() content = wav.readframes(nframes) samples = np.fromstring(content, dtype=types[sampwidth]) p=samples.reshape(-1, 2) gool=str(p) z=gool.translate(None, '[]') f = open('record.txt', 'w') f.write(z) wav.close() f.close() print u"* файл перекодирован"
Офлайн
1
попробуйте Python Midi, может чего получится)
Они уверяют, что:
It's just as easy to load your MIDI file from disk.
>>> z = midi.read_midifile("d:\\Python\\Pypi\\mics\\midi\\mary.mid") >>> z.textdump() >>> #что вроде как правда, но textdump у меня выдал AttributeError... >>> #однако, можно просто написать >>> print z midi.Pattern(format=1, resolution=220, tracks=\ [[midi.TimeSignatureEvent(tick=0, data=[4, 2, 24, 8]), midi.KeySignatureEvent(tick=0, data=[0, 0]), midi.EndOfTrackEvent(tick=1, data=[])], [midi.ControlChangeEvent(tick=0, channel=0, data=[91, 58]), midi.ControlChangeEvent(tick=0, channel=0, data=[10, 69]), midi.ControlChangeEvent(tick=0, channel=0, data=[0, 0]), midi.ControlChangeEvent(tick=0, channel=0, data=[32, 0]), midi.ProgramChangeEvent(tick=0, channel=0, data=[24]),
midi.NoteOnEvent(tick=974, channel=0, data=[60, 0]), midi.NoteOnEvent(tick=0, channel=0, data=[52, 0]), midi.EndOfTrackEvent(tick=1, data=[])]])
Отредактировано gisolog (Июль 1, 2012 12:01:40)
Офлайн
3
Спасибо! :)
Офлайн
3
MIDI слишком сложен для разбора.
Удобнее работать с форматом MusicXML MusicXML.
Еще удобный формат для разбора - LilyPond.
Конвертировать MIDI в MusicXML или LilyPond можно с помощю бесплатной программы MuseScore.
Офлайн
3
vkopey
MIDI слишком сложен для разбора.
Удобнее работать с форматом MusicXML MusicXML.
Еще удобный формат для разбора - LilyPond.
Конвертировать MIDI в MusicXML или LilyPond можно с помощю бесплатной программы MuseScore.
Офлайн
0
Здравствуйте, leonid_10.
Можете подробней рассказать, как собираетесь трансформировать миди-файл в кривую Безье?
Количество дорожек - степень кривой или она у вас линейная?
Расстояние между опорными точками зависит от размера (длины?) ноты?
Какие миди-элементы определяете за опорные точки?
————-
Если не серкет: используете для анализа звуковых файлов или просто для создания визуализации?
- тема просто интересна 
Офлайн
3
Duck-Pagan
Здравствуйте, leonid_10.
Можете подробней рассказать, как собираетесь трансформировать миди-файл в кривую Безье?
Количество дорожек - степень кривой или она у вас линейная?
Расстояние между опорными точками зависит от размера (длины?) ноты?
Какие миди-элементы определяете за опорные точки?
————-
Если не серкет: используете для анализа звуковых файлов или просто для создания визуализации?
- тема просто интересна
Офлайн
0
Понятно. Python хороший инструмент для подобного рода заданий.
Удачи!
Офлайн