Autor Thema: Midi-Kanäle für Voices?  (Gelesen 4166 mal)

rJazz

  • Member
Midi-Kanäle für Voices?
« am: Sonntag, 6. September 2015, 21:28 »
Hallo,

ich möchte gern Bigband-Arrangements mit Lilypond schreiben.

Es wäre dafür nützlich, Midi-Channels für Voices festzulegen.

Gefunden habe ich dies als Midi-Konfiguration:
\midi {
   
    \context {
      \Staff
      \remove "Staff_performer"
    }
    \context {
      \Voice
      \consists "Staff_performer"
    }
    \tempo 4 = 115
  }

für Voices, die z.B. so definiert sind:
trumpet = \new Voice \relative c' {
  \key bes \major
\set midiInstrument = #"Trumpet"
\voiceOne
 r1 -"trumpet"
 r2~r4.
 <c c c' c>8
}
 

Das funktionerit, es werden aber nur Midi-Instrumente gesetzt,
und manchmal (so mein Eindruck) nicht
auf die richtigen GM-Instrumente, auch wenn
der GM-Modus am externen MIDI-Gerät aktiviert ist.

Ich würde daher gern mit Lilypond einfach verschiedene (feste)Midi-Kanäle für die Voices
vergeben, statt Midi-Instrumente.

Ist das irgendwie möglich?

Danke für jede Hilfe!

Ralf

fugenkomponist

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #1 am: Montag, 7. September 2015, 00:29 »
Ich habe so gut wie überhaupt keine Ahnung von MIDI und LilyPonds Umgang damit (und weiß z. B. schon nicht, was GM ist …). Aber da ich nicht weiß, wo du deine Information her hast und ob du die Dokumentation so weit kennst, verweise ich mal auf das Snippet am Ende dieses Abschnittes, vielleicht hilft dir das ja schon weiter.

Das einzige Problem, was ich mal mit MIDI hatte (was auch zu falschen Instrumentenzuordnungen geführt hat): Es gibt ja nur 16 Kanäle (bzw. LilyPond kann nur 16); wenn man jetzt mehr Stimmen hat, werden die Noten vom 17. Kanal in den 1. mit reingestopft, ohne das Instrument zu ändern, die vom 18. in den 2. usw. Wenn du also jetzt von einer Standard-Bigband-Besetzung redest, gehts ja schon um 13 Bläser + Klavier + Gitarre + Drumset + Bass, du bist also schon knapp über 16 und der Bass würde nen Alt-Sax-Sound kriegen. Und größere Besetzungen gibts ja auch noch.

Falls das wirklich das Problem ist, würde ich zwei \score-Blöcke anlegen: Einer für die Partitur und einer nur mit einem \midi-Block, da kannst du dann Sachen schreiben wie\new Staff \with { midiInstrument = "trumpet " } <<
  \trumpetI \trumpetII \trumpetIII \trumpetIV
>>
Damit wird für alle Trompeten zusammen nur ein einziger Kanal verbraucht.

Vielleicht weißt du das alles schon, aber vielleicht ist ja auch was hilfreiches dabei ;)

Edit: Willkommen im Forum! Bitte gib bei deinen Beiträgen nach Möglichkeit immer deine LilyPond-Version an und zeig mit einem kompilierbaren (Minimal-/möglichst kleinen)Beispielcode dein Problem. Dann müssen potenzielle Helfer weniger raten/selber Code zusammenbauen. In diesem Fall ist das noch nicht so tragisch, aber vielleicht würde ein Beispiel ja schon die Vermutung mit den >16 Kanälen bestätigen oder irgendwas anderes würde Leuten auffallen, die sich mit MIDI besser auskennen als ich ;)
« Letzte Änderung: Montag, 7. September 2015, 00:34 von fugenkomponist »

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #2 am: Montag, 7. September 2015, 01:03 »
Danke. Du hast das schön beschreiben: die Zuordnung der Midi-Kanäle ist genau der Punkt!
Lass mich Dein  Beispiel mal erweitern:


staffI = \new Staff \with { midiInstrument = "trumpet " } <<
  \trumpetI \trumpetII \trumpetIII \trumpetIV
>>
staffII = \new Staff \with { midiInstrument = "altosax " } <<
  \altoI \altoII
>>

staffIII = \new Staff \with { midiInstrument = "trombone" } <<
  \tromboneI \tromboneII
>>


Dann möchte ich das einmal so abspielen:
\score {
<<
\staffI
\staffII
\staffIII
>>

Das würde funktionieren, wenn ich an meinem MIDI-Synth.
die Program-Change-Befehle ausstelle und
Trompeten auf Kanal 1, Alt-Sax auf Kanal 2
und Posaunen auf Kanal 3 fest einstelle.

Wenn ich mir das jetzt aber mal ohne
Saxophone anhören will:

\score {
<<
\staffI
\staffIII
>>

gibt es aber ein Problem, weil nun StaffIII
auf Kanal 2 landet und damit statt Posaunen
wieder Saxophone zu hören sind.

Es wäre also wünschenswert, die Midi-Kanäle
den Staffs (oder noch besser den  Voices) fest
zuzuordnen.

Die Frage wäre also, wie das geht.

fugenkomponist

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #3 am: Montag, 7. September 2015, 07:54 »
Ok, das erklärt dein Problem schon etwas besser ;)

Es gab mal einen feature request, sieht aber nicht so aus, als wär was draus geworden (ich hab allerdings jetzt nicht die ganze Diskussion durchgelesen). Vor ein paar Jahren hat jemand eine Lösung gefunden und auf der englischen Liste gepostet. Dafür muss allerdings der C++-Code bearbeitet und LilyPond neu kompiliert werden. Gleichzeitig sieht aber der Code so aus, als wäre eine Lösung in Scheme nicht möglich, für den Otto-Normal-Verbraucher (d. h. per Scheme) ist die Channelverteilung anscheinend nicht zugänglich.

Ich bin jetzt weg für eine Woche, aber im Contributors Guide findest du eine Anleitung zum Kompilieren von LilyPond und hier und auf der englischen Mailingliste gibt es auch andere Leute, die dir damit garantiert helfen können.
« Letzte Änderung: Montag, 7. September 2015, 07:57 von fugenkomponist »

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #4 am: Dienstag, 8. September 2015, 19:40 »
Oh, das ist klasse!

Ich werde das in jedem Fall ausprobieren, lilypond selbst zu kompilieren,
wenn das damit klappt, wäre es toll.

Danke für die Hilfe!

ingmar

  • Member
re: Midi-Kanäle für Voices?
« Antwort #5 am: Dienstag, 8. September 2015, 20:43 »
hallo,

wenn ich richtig verstehe, kannst du nicht
\score {<<
    \staffI
%   \staffII
    \staffIII
>>}
..das zweite System einfach auskommentieren, weil dann das darauffolgende System den MIDI-Channel der zweiten erhalten würde. Offenbar zählt Lilypond die Staffs und vergibt die MIDI-Channels der Reihe nach.

Abgesehen davon, dass es Lilypond sicher besser zu Gesicht stände, wenn man Kanal (und Programmwechsel) ausdrücklich codieren könnte (beispielsweise sowas wie \new Staff \with { \midichannel = 1}), kannst du dir doch vielleicht einfach so helfen, dass du dir einen Staff namens \MUTE anlegst, der nur einen einzigen superkurzen, superleisen Ton und supertiefen Ton in Takt 10000 enthält. Und statt oben \staffII auszukommentieren, ersetzt du ihn durch diesen \MUTE. Würde so ein Workaround nicht funktionieren?

--ingmar

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #6 am: Dienstag, 8. September 2015, 21:34 »
Das habe ich auch schon mal probiert.

Das Problem ist aber anscheinend, dass die Kanäle doch nicht einfach nur aufsteigend vergeben werden.

Es scheint auch was damit zu tun zu haben, ob midiInstrument für voices gesetzt ist
und vielleicht auch noch von weiteren Faktoren.
Ich probiere das alles mit Frescobaldi, vielleicht überlagert das auch nochmal die Midi-Outputs.

Bei Recherchieren habe ich gesehen, dass es auch Variablen
midichannel und  midiChannelMapping gibt:
http://www.lilypond.org/doc/v2.19/Documentation/notation/midi-channel-mapping

Wie die allerdings zu verwenden sind, habe ich noch nicht verstanden.


mgd

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #7 am: Mittwoch, 9. September 2015, 12:31 »
Hallo rJazz,

auch von mir ein willkommen im Forum :)

Ich habe gerade deine Frage gelesen und sehe, du bist dank der hilfreichen Kommentare von fugenkomponist und ingmar ziemlich dicht am Ziel.

Was ich noch nicht verstanden habe ist, wieso du meinst, du müsstest Program-Change-Befehle ausstellen. Wenn du einem Staff ein       midiInstrument = "trumpet" mit gibst, dann erzeugt LP die notwendigen Program-Change-Befehle und gibt sie in die Ausgabedatei aus (habe es jetzt aktuell nicht überprüft, hatte es aber vor einigen Monaten im Rahmen eines damals aufgekommenen MIDI Schnipsel Problems gesehen).

Im übrigen kennt LP kein GM und schon gar nicht irgendwelche Erweiterungen von GM. Auch SYSEX Befehle kannst du getrost vergessen.
Und ja, MIDI erlaubt exakt 16 Kanäle und keinen mehr. Alle Setups, die mehr Kanäle verwenden, verwenden mehrere MIDI Geräte (von denen jedes max. 16 Kanäle hat; SYSEX Spielereien mal außen vor gelassen). M.W existiert in LP keine Infrastruktur zur Verwaltung mehrerer MIDI Geräte.

Wenn die Verwaltung von vielen MIDI Kanälen für dich relevant ist, dann empfehle ich unter Linux Rosegarden. Auf dem Mac ist IMO Logic die erste Wahl. Unter Windows habe ich seit Ewigkeiten nicht mehr mit MIDI gearbeitet, aber Cubase (einschließlich der diversen Light Versionen, die quasi überall dazu gepackt werden) sollte hier alles können, was du brauchst. Es gibt sicher noch diverse andere Programme, die ich aber nie (ernsthaft) verwendet habe.

Der Partitur Assistent von Frescobaldi erzeugt eine recht clevere Infrastruktur, um für alle Einzelstimmen separate Übedateien zu generieren. Seit ich den kenne, rufe ich zu diesem Zweck nur noch in seltenen komplexen Fällen Logic auf.

Ich bin nicht sicher, ob dir meine Kommentare wirklich weiterhelfen, aber vllt erhellen sie die eine oder andere bisher unklare Ecke ;)

Liebe Grüße,
Michael

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #8 am: Mittwoch, 9. September 2015, 16:46 »
LP erzeugt zwar PC-Befehle. ich habe aber im externen Synthesizer keine GM-Instrumente eingestellt, sondern eigene,
feste Sounds (z.B. Kanal 1  = Alto, Kanal 2 = Tenor-Sax, Kanal 3 = Trumpets).
Die entsprechen nicht de GM-Sounds und reagieren auch nicht korrekt auf die Program-Change-Befehle.
Deshalb habe ich an dem Keyboard auch den MIDI-Filter auf Ignorieren der Program-Change-Befehle gesetzt.
Ideal wäre daher, wenn ich für jede Staff den Kanal fest vorgeben könnte. Dann wäre es egal,
welche Staffs ich gearde aktivert habe, sie würde über den festen Kanal imemr auf dem richtigen Instrument landen.
Dann bräuchte ich nicht mehr in ein anderes Sequenzer-Programm beim Komponieren
(ich will ja auch nicht immer MIDI-Dateien hin-und her importieren/exportieren, sondern gleich
abhören können, was ich in lilypond schreibe: ich finde das schreiben in lilypond sehr angenehm,
deswegen will icn nicht unbedingt erst  in einem anderen Sequenzer anfangen).

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #9 am: Mittwoch, 9. September 2015, 16:50 »
Habe heute auch probiert, lilypond vom source zu übersetzen.
Das ist allerdings alles andere als einfach.

Am Ende (nach 10 Minuten Übersetzung) kommt eine Fehlermeldung:

No rule to make target `../flower/./out/library.a', needed by `out/lilypond'.  Stop.
make[1]: Leaving directory `/home/lxuser/Dokumente/lilypond/lilypond-2.18.2/build/lily'
make: *** [install] Fehler 2

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #10 am: Mittwoch, 9. September 2015, 17:17 »
Habe es nochmal probiert.
Eigentlich gibt es schon im ersten Schritt Probleme:

./autogen.sh --noconfigure
gibt eine Fehlemeldung:

processing .
Running autoconf ...
./autogen.sh: 17: ./autogen.sh: autoconf: not found

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #11 am: Mittwoch, 9. September 2015, 18:02 »
Beim dritten Versuch hat das Compilieren anscheinend geklappt
(das Zauberwort unter ubuntu ist ja "sudo" vor jedem Befehl, das
hat erst gefehlt).

Das :
  http://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00809.html
klappt aber noch nicht.

Wenn ich das eingebe:

staffBass = \new Staff {   
  \set midiChannel = 3
  \clef "bass"
<<
  \cbass
>>
}

kriege ich eine Fehlermeldung:

warning: cannot find property type-check for `midiChannel' (translation-type?).  perhaps a typing error?
warning: skipping assignment

Insofern wird der code aus dem Link wohl gar nicht ausgeführt.

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #12 am: Mittwoch, 9. September 2015, 18:24 »
Noch eine gute Nachricht:

nachdem ich die Variable in
  define-context-properties.scm
auch noch definiert habe,
wird sie erkannt und vewendet!

WOW!!!

Allerdings sollten alle midiInstrument-Definitionen
entfernt werden, sonst gibt es Durcheinanender.

mgd

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #13 am: Mittwoch, 9. September 2015, 18:35 »
Hallo rJazz,

sudo als Zauberwort zu bezeichnen und es dann vor jeden Befehl zu setzen ist ein krasser Missbrauch der diversen Schutzmechanismen. Zum Bilden eines Programms gehört es definitiv überhaupt gar nicht verwendet. Wenn es nötig sein sollte, dann wäre dein System völlig misskonfiguriert. Davon abgesehen bezweifle ich stark, dass sudo deine Buildprobleme ursächlich lösen kann. Aber es ist dein System und damit nicht meine Baustelle.

Ich baue mein LP regelmäßig aus der git Version selbst. Der Befehl lautet entweder./autogen.sh oder ./autogen.sh --noconfigure
./configure
Du kannst auch die folgende Befehlsfolge erwägen:mkdir build
cd build
../autogen.sh --noconfigure
../configure [liste aller ev. benötigten optionen]
Speziell im ausgecheckten git bevorzuge ich die letzte Variante, aber grundsätzlich funktionieren sollten alle genannten.

Wenn das bei dir nicht der Fall ist, dann hast du vermutlich einige notwendige Packete nicht installiert oder sie heißen anders.

Davon abgesehen ist mir nicht klar, warum du LP selbst übersetzen willst...

Aber zurück zu deinem Problem:
Ich habe verstanden, du hast deinen Synth umprogrammiert. Du kannst dann sehr einfach LP dazu bringen, deine umprogrammierten Sounds so zu verwenden, wie du das möchtest. Vorab eine Klarstellung (falls dir das sowieso klar ist, ignoriere es einfach, aber ich möchte sicher sein, dass wir von den gleichen Dingen reden).

Die Angabe midiInstrument = "trumpet " bedeutet übersetzt:
"Erzeuge ein Programchange 57" (das ist trumpet in GM). Es bedeutet jedoch nicht "Stelle am Synth den Sound für Trompete ein".

Wenn du nun deinen Synth so programmiert hast, dass der gewünschte Trompetensound auf Programm 17 liegt, dann müsstest du midiInstrument = "Drawbar Organ" angeben und LP würde ein entsprechendes Programchange 17 erzeugen.

Mit anderen Worten:
Wenn dein Synth nicht GM Sounds hat, dann brauchst du lediglich "händisch" ein Mapping der GM Soundnamen auf deine Sounds vorzunehmen (bzw. umgekehrt) und die von LP erzeugten MIDI Dateien klingen auf deinem Synth so, wie du das möchtest.

Ich hoffe, ich habe mich verständlich ausgedrückt.

Der MIDI Support in LP lässt zwar sicher einige Wünsche offen, aber er ist sehr weit davon weg, nicht brauchbar zu sein.

HTH,
Michael

rJazz

  • Member
Re: Midi-Kanäle für Voices?
« Antwort #14 am: Freitag, 11. September 2015, 09:30 »
Ich hatte ja diesen Befehl eingegeben:

./autogen.sh --noconfigure

und dabei wie beschrieben gleich diese Fehlermeldung bekommen:


processing .
Running autoconf ...
./autogen.sh: 17: ./autogen.sh: autoconf: not found

Verstehe nicht, warum du die nicht kriegst (ich nehme
mal nicht an, das es was mit Rechten zu tun hat, dass er die
Datei nicht findet).
Ich habe das Archiv  lilypond-2.18.2.tar.gz
von http://lilypond.org/source.de.html verwendet.

Tatsächlich ist dies das erste Programm, dass ich mit Ubuntu selbst
compiliere und bin auch kein definitiv kein Experte für die Sicherheitstechnologie.
Mir ist nicht klar, warum es ein Problem sein sollte, dieses Programm
als sudo zu übersetzen. Ich dachte eher, wenn ich ein Programm
systemweit laufen lassen will, müsste ich es ohnehin als sudo
installieren (?).

Wenn es also so problematisch ist, bin  ich dankbar für einen
Hinweis, wo die Risiken liegen (sollte der Lilypond.Code potenziell
gefährlich sein?).

Ein mapping am Synth wäre prinzipielleine Alternative, allerdings habe ich bei
meinem Synth keine Möglichkeit gefunden, ein Mapping einzustellen.

Es bleibt die Feststellung, das ich lilypond als sudo compiliert
bekomme, als admin-user nicht.  Die Fehlermeldung hatte ich
ja schon geschrieben.
Wenn Du weißt, was die Fehlermeldung bedeutet und wie
ich sie anders wegkriege, ohne sudo zu verwenden,
dann bin ich sehr dankbar für Hife und probiere
das gern aus.

Bezüglich fehldner Pakete habe ich mich an
dies gehalten
  http://lilypond.org/doc/v2.18/Documentation/topdocs/INSTALL.html#requirements-for-compiling-lilypond
und
Ich hatte ja diesen Befehl eingegeben:

./autogen.sh --noconfigure

und dabei wie beschrieben gleich diese Fehlermeldung bekommen:


processing .
Running autoconf ...
./autogen.sh: 17: ./autogen.sh: autoconf: not found


Verstehe nicht, warum du die nicht kriegst (ich nehme
mal nicht an, das es was mit Rechten zu tun hat, dass er die
Datei nicht findet).

Tatsächlich ist dies eins der ersten Programme, dass ich mit Ubuntu
selbst compiliere und bin auch kein definitiv kein Experte für die
Linux-Sicherheitstechnologie.
Mir ist nicht klar, warum es ein Problem sein sollte, Programme
als sudo zu übersetzen. Ich dachte eher, wenn ich ein Programm
systemweit laufen lassen will, müsste ich es ohnehin als sudo
installieren.

Wenn es also so problematisch ist, bin  ich dankbar für einen
Hinweis, wo die Risiken liegen (sollte der Lilypond-Code potenziell
gefährlich sein?).

Ein mapping wäre eine Alternative, allerdings habe ich bei
meinem Synth noch keine Möglichkeit dafür gefunden.

Es bleibt die Feststellung, das ich lilypond als sudo compiliert
bekomme, als admin-user nicht.  Die Fehlermeldung hatte ich
ja schon geschrieben.
Wenn Du weißt, was die Fehlermeldung bedeutet und wie
ich sie anders wegkriege, ohne sudo zu mißbrauchen,
dann bin ich sehr dankbar für Hife und probiere
das gern aus.

Bezüglich fehlender Pakete habe ich mich an
dies gehalten
  http://lilypond.org/doc/v2.18/Documentation/topdocs/INSTALL.html#requirements-for-compiling-lilypond
und
  sudo apt-get build-dep lilypond
ausgeführt.

ich habe auch

../configure

ausgeführt wie beschrieben (um auf evtl. fehlende
Pakete zu testen), da gabe es keine Fehler,
am Fehlen von Paketen sollte es also eigentlich nicht liegen
(ich habe es ja auch fertig übersetzt bekommen, es läuft auch
problemlos daher sollten alle notwendigen Pakete vorhanden sein).

Nochmal die Fehlermeldung (beim comilieren ohne sudo):

No rule to make target `../flower/./out/library.a', needed by `out/lilypond'.  Stop.
make[1]: Leaving directory `/home/lxuser/Dokumente/lilypond/lilypond-2.18.2/build/lily'
make: *** [install] Fehler 2

« Letzte Änderung: Freitag, 11. September 2015, 09:44 von rJazz »