Konwertuj csv do midi

Konwertuj CSV na MIDI

Konwertuj tabele nut muzycznych lub pliki zdarzeń MIDICSV na edytowalne pliki Standard MIDI Files.

Konwertuj pliki CSV online

Nie mamy jeszcze dedykowanego konwertera online dla CSV na MIDI, ale pliki CSV możesz przekonwertować online na te i inne formaty:

Jak konwertować csv do midi

Arkusz kalkulacyjny, program do analizy lub narzędzie do tworzenia kompozycji może eksportować dane nutowe jako CSV, podczas gdy sekwencer, program do zapisu nutowego lub sprzęt MIDI wymaga pliku Standard MIDI File. Konwersja przekształca tabelaryczne zdarzenia muzyczne w edytowalną sekwencję zamiast dźwięku.

Czym jest CSV

CSV (comma-separated values) to zwykły tekst zorganizowany w wiersze i kolumny. Kompozytorzy, badacze muzyki, użytkownicy arkuszy kalkulacyjnych, programów DAW oraz niestandardowych skryptów mogą używać go do przechowywania wysokości dźwięków, czasów rozpoczęcia, czasów trwania, velocity, kanałów, kontrolerów lub danych tempa.

CSV nie ma uniwersalnego schematu muzycznego. Jeden plik może zawierać kolumny takie jak pitch,start,duration; inny może używać nazw nut, sekund, ticków lub jednego wiersza dla każdego zdarzenia MIDI. Separatorem może być przecinek, średnik lub tabulator, a pola ujęte w cudzysłowy mogą zawierać separatory. Przed konwersją określ znaczenie kolumn, jednostki czasu, kodowanie i strukturę nagłówka.

Czym jest MIDI

Standard MIDI File (.mid lub .midi) przechowuje określone w czasie instrukcje muzyczne, w tym zdarzenia nut, velocity, kanałów, zmiany programu, kontrolerów, pitch-bend, tempa, metrum i tonacji. Nie zawiera nagranego dźwięku; syntezator, instrument wirtualny lub urządzenie sprzętowe generuje dźwięk.

Pliki MIDI są zwykle znacznie mniejsze niż pliki audio i umożliwiają niezależną edycję nut, czasu, velocity, instrumentów, tempa oraz danych aranżacji. Można je otwierać w programach MuseScore Studio, Cubase, Logic Pro, Ableton Live, REAPER oraz w sekwencerach sprzętowych, chociaż brzmienie podczas odtwarzania zależy od instrumentów docelowych.

Używanie MIDICSV dla istniejącego schematu zdarzeń MIDI

Narzędzia open source MIDICSV są najbardziej bezpośrednim rozwiązaniem, gdy CSV jest zgodny z formatem zdarzeń MIDICSV. Nie są to ogólne konwertery arkuszy kalkulacyjnych: midicsv eksportuje plik MIDI do zdefiniowanej reprezentacji CSV, a csvmidi konwertuje tę reprezentację z powrotem do pliku MIDI.

  1. Zainstaluj pakiet MIDICSV dla swojego systemu operacyjnego, korzystając z udokumentowanego źródła.
  2. Wyeksportuj plik MIDI za pomocą polecenia midicsv input.mid events.csv.
  3. Edytuj plik events.csv bez zmieniania wymaganych pól ścieżki, czasu, typu zdarzenia i parametrów. Zachowaj zakresy liczbowe oraz wymaganą składnię nagłówka lub zdarzeń.
  4. Skompiluj go za pomocą polecenia csvmidi events.csv output.mid.
  5. Otwórz plik output.mid w edytorze MIDI i sprawdź czas, instrumenty, kontrolery oraz strukturę ścieżek.

Arkusz kalkulacyjny zawierający dowolne kolumny, takie jak start_beat, duration_beat i pitch, nie jest automatycznie zgodny z csvmidi. W przypadku takiego układu użyj niestandardowego parsera.

Konwertowanie pliku CSV z jedną nutą w każdym wierszu za pomocą Python

W przypadku tabeli nut użyj języka Python i biblioteki open source mido. Przygotuj plik notes.csv z jedną nutą w każdym wierszu oraz następującymi kolumnami: start_beat, duration_beat, pitch, velocity i channel. Używaj wartości MIDI wysokości dźwięku od 0 do 127, wartości velocity od 1 do 127, kanałów od 0 do 15 oraz wartości beatów liczonych względem ćwierćnuty.

  1. Zainstaluj zależność za pomocą polecenia python -m pip install mido.
  2. Zapisz ten skrypt jako csv_to_midi.py obok pliku notes.csv:
import csv
from mido import MidiFile, MidiTrack, Message, MetaMessage, bpm2tempo

bpm = 120
midi = MidiFile(ticks_per_beat=480)
track = MidiTrack()
midi.tracks.append(track)
events = [(0, 0, MetaMessage('set_tempo', tempo=bpm2tempo(bpm)))]

with open('notes.csv', newline='', encoding='utf-8-sig') as f:
    for row in csv.DictReader(f):
        start = float(row['start_beat'])
        duration = float(row['duration_beat'])
        pitch = int(row['pitch'])
        velocity = max(1, min(127, int(row.get('velocity') or 80)))
        channel = int(row.get('channel') or 0)
        if duration < 0 or not 0 <= pitch <= 127 or not 0 <= channel <= 15:
            raise ValueError('invalid duration, pitch, or channel')
        start_tick = round(start * midi.ticks_per_beat)
        end_tick = round((start + duration) * midi.ticks_per_beat)
        events.append((start_tick, 1, Message('note_on', note=pitch, velocity=velocity, channel=channel)))
        events.append((end_tick, 0, Message('note_off', note=pitch, velocity=0, channel=channel)))

events.sort(key=lambda item: (item[0], item[1]))
previous = 0
for tick, _, message in events:
    message.time = tick - previous
    track.append(message)
    previous = tick
midi.save('notes.mid')
  1. Uruchom polecenie python csv_to_midi.py. Wynikiem będzie plik notes.mid z 480 tickami na ćwierćnutę i stałym tempem 120 BPM.
  2. Otwórz plik w MuseScore Studio za pomocą opcji File → Open lub zaimportuj go za pomocą polecenia importu MIDI w programie DAW. Dodaj instrumenty, zmiany tempa, metrum, tonacje lub inne dane muzyczne, których nie zawierał plik CSV.

Jeśli czasy źródłowe są podane w sekundach, przelicz je na beaty za pomocą beats = seconds * bpm / 60. Jeśli są podane w tickach MIDI, podziel je przez wartość ticks-per-beat pliku źródłowego. Sekundy, beaty i ticki nie są jednostkami wymiennymi. Jeśli plik CSV zawiera wiersze zdarzeń zamiast wierszy nut, napisz parser mapujący każdy typ zdarzenia na odpowiedni komunikat MIDI, zamiast używać skryptu dla tabeli nut.

Ograniczenia jakości i zgodności

Wynik może zachować wyłącznie dane reprezentowane przez schemat źródłowy i zastosowaną metodę konwersji. Przykład zachowuje wysokość dźwięku, czas rozpoczęcia, czas trwania, velocity i kanał, ale nie zachowuje tekstów utworów, pedału sustain, automatyzacji kontrolerów, zmian programu, zmian tempa, metrum, tonacji, artykulacji ani wielu ścieżek.

Obsługiwane są nakładające się nuty, ale nakładające się nuty o tej samej wysokości dźwięku i na tym samym kanale mogą być niejednoznaczne dla niektórych instrumentów. Numery programów MIDI, działanie kanału perkusyjnego, strojenie, reakcje kontrolerów i brzmienia instrumentów różnią się w zależności od aplikacji i sprzętu. Sprawdź zaimportowany plik w edytorze piano-roll lub edytorze zdarzeń i zwróć uwagę na nieprawidłowe tempo, brakujące nuty, konflikty kanałów oraz skrócone czasy trwania.

Usługi internetowe nadają się do użycia wyłącznie wtedy, gdy dokumentują dokładny układ plików CSV, który akceptują. Ogólne konwertery plików nie potrafią określić, czy kolumna zawiera ticki MIDI, sekundy, beaty, nazwy nut czy typy zdarzeń. W przypadku niestandardowych kompozycji lub prywatnych materiałów lokalna konwersja za pomocą MIDICSV lub Python pozwala uniknąć przesyłania danych i zapewnia powtarzalne ustawienia.

Porównanie formatu CSV z MIDI

Jak formaty CSV i MIDI wypadają w porównaniu pod względem najważniejszych cech dla tej konwersji.

Porównanie formatów plików CSV i MIDI
Cecha .CSV Comma-Separated Values .MIDI MIDI Standard File
Otwarty standard Tak Tak
Kompresja Bez kompresji Bez kompresji
Typowy rozmiar pliku Mały Bardzo mały
Otwiera się w przeglądarce internetowej Tak, natywnie Nie
Dalsza edycja Łatwy Łatwy
Obsługa metadanych Podstawowy Podstawowy
Czytelny tekstowo Tak Nie
Najlepszy do Wymiana danych Muzyka
Wprowadzono — 1983
Twórca — MIDI Manufacturers Association / MIDI Association
Typ MIME text/csv audio/midi