kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Verwendung eines Soft Sequencers

(EN google-translate)

(PL google-translate)

MIDI ist ein Datenprotokoll für den Datenaustausch zwischen elektronischen Musikinstrumenten. Es ist bereits relativ alt. Heute würde man statt dessen eher OSC verwenden. Jedoch ist es sehr sehr verbreitet. In der vorliegenden Linux Distribution ist es möglich einen Soft Sequencer zu starten, der über MIDI Befehle von Processing aus gesteuert werden kann. Der Sequencer kann mit verschiedenen verschiedenen Soundfonts gestartet werden. Die Soundfonts beinhalten Klänge echter Musikinstrumente als Samples.

Für das weiter gehende Studium der MIDI Befehle sei hier auf andere Webseiten verwiesen:

https://www.hdm-stuttgart.de/~curdt/MIDI_Smierzewski.pdf
https://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface

Im Zusammenhang des Kurses ist wichtig folgendes zu wissen:

Der Note-On Befehl

Die verschiedenen verfügbaren Klänge sind mit verschiedenen Kanälen verknüpft. Eine Übersicht über die Abfolge der Klänge eines Soundfonts kann man sich am besten mit MuseScore verschaffen, indem man dort eine Mididatei öffnet und dazu einen Soundfont (Synthesizer). Dann kann man über den Mixer die vorliegende Komposition mit den verschiedenen Klängen spielen lassen.

Neben dem Klang kann noch die Tonhöhe und die Lautstärke festgelegt werden. Beide können Werte zwischen 0 und 127 annehmen. Dabei steht 60 für die Tonhöhe c1. Die Zahlen entsprechen ansonsten Halbtonschritten in der temperierten Tonskala. Nicht alle Tonhöhen können bei jedem Soundfont-Kanal gespielt werden. Jedes reale Musikinstrument hat einen begrenzten Tonumfang.

Vor- und Nachteile

Der Vorteil bei der Verwendung des Soft Sequencers liegt in der Einfachheit der Befehle, über den er von Processing aus gesteuert werden kann.

Nachteilig gegenüber den bisher eingeführten Klangerzeugungsmethoden ist, dass diese Technik nur auf dem PC funktioniert und nicht auf einem Android Gerät.

Ein Nachteil ist auch, dass die Übertragung von Midi Befehlen häufig fehlerhaft erfolgt. Dies führt dann unter anderem dazu, dass ein angespielter Ton nicht mehr ausgeschaltet wird.

Ein einfaches Experiment

Ein Soft Sequencer wird mit einem Soundfont als Service gestartet und einige Töne werden damit von einem Processing Programm aus gespielt.

1) Starten des Soft Sequencers FLUIDSYNTH

1-1 Öffnen Sie ein Terminal und geben Sie nacheinander die folgenden Befehle ein. Beenden Sie jeden Befehl mit ENTER: (Sie können die Befehle einfach von dieser Seite kopieren und in die Konsole einfügen.)

  • sudo modprobe snd-virmidi
  • sudo fluidsynth -is -a alsa -m alsa_seq -r 48000 "/home/fhbstud/system/soundfonts/schlagphon.sf2"

1-2 Kontrolle: Öffnen Sie ein zweites Terminal und geben Sie dort ein:

  • aconnect -o

Folgendes sollte zu sehen sein:

client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 24: 'Virtual Raw MIDI 2-0' [type=kernel]
    0 'VirMIDI 2-0     '
client 25: 'Virtual Raw MIDI 2-1' [type=kernel]
    0 'VirMIDI 2-1     '
client 26: 'Virtual Raw MIDI 2-2' [type=kernel]
    0 'VirMIDI 2-2     '
client 27: 'Virtual Raw MIDI 2-3' [type=kernel]
    0 'VirMIDI 2-3     '
client 128: 'TiMidity' [type=user]
    0 'TiMidity port 0 '
    1 'TiMidity port 1 '
    2 'TiMidity port 2 '
    3 'TiMidity port 3 '
client 129: 'FLUID Synth (2988)' [type=user]
    0 'Synth input port (2988:0)'

Code 0-1: Result on Terminal

1-3 Geben Sie nun in dem zuletzt geöffneten Terminal folgenden Befehl ein:

  • sudo aconnect 24:0 129:0

129 ist dabei der Port von Fluidsynth. Er wird mit dem kleinsten virtuellen Midi Port verbunden, hier 24.

1-4 Verwenden Sie am besten Kopfhörer. Gehen Sie auf das Lautsprechersymbol und öffnen Sie Sound settings. Drehen Sie bei Output Devices die Lautstärke hoch.

Verwendung von Capella

Auch von Capella aus kann der Soft Sequencer jetzt verwendet werden. Wichtig ist dabei bei Optionen->Ausgabe "Synth input port (2988:0)" zu verwenden:

Fluidsynth und Capella.

Bild 0-1: Fluidsynth und Capella.

2) Entwurf und Start eines einfachen Processing Programms

Es wird die Bibliothek TheMidibus in Processing verwendet. Anhand der mitgelieferten Beispiele und der Referenz kann man die Möglichkeiten von TheMidibus kennen lernen. Das nachfolgende Beispiel ist eine angepaßte Version eines solchen Beispiels:

ACHTUNG: Schon bei der Programmierung sollte man, wie hier über das Drücken der SPACE Taste, eine Möglichkeit einbauen, um alle Stimmen auszuschalten. Erst danach sollte man das Programm anhalten, um zu vermeiden, dass Töne eingeschaltet bleiben. Wird dies nicht beachtet, kann es sein, dass nur noch ein Neustart des Computers hilft. Auch eine zu rasche Folge an Tönen oder das Setzen zu vieler Töne gleichzeitig, kann zu fehlerhaften Midiübertragungen führen.

import themidibus.*; //Import the library

MidiBus myBus; // The MidiBus

boolean ACTIVE = true;

void setup() 
{
  size(400, 400);
  background(0);

  MidiBus.list(); // List all available Midi devices on STDOUT. This will show each device's index and name.

  // Either you can
  //                   Parent In Out
  //                     |    |  |
  myBus = new MidiBus(this,  -1, 1); // Create a new MidiBus using the device index to select the Midi input and output devices respectively.
}

//Again: Chaos function ;-)
float r = 3.94;
float y_old = 0.56;
float y_new = 0.0;
int value=0;

public int nextValue()
{
  y_new = r*y_old*(1.0 - y_old);
  y_old = y_new;
  return (int)(100.0*y_new);    
}

void draw() 
{
  
  
  if(ACTIVE==false)
  {
      myBus.clearAll();
      background(0,255,0);
      return;
  }
  background(255,0,0);
  
  int channel = nextValue()%5;
  int pitch = 48 + nextValue()%49;
  int velocity = 50 + 10*(nextValue()%5);

  myBus.sendNoteOn(channel, pitch, velocity); // Send a Midi noteOn
  delay(100);
  myBus.sendNoteOff(channel, pitch, velocity); // Send a Midi nodeOff
  delay(100);
}

void delay(int time) 
{
  int current = millis();
  while(millis () < current+time)
  {
      Thread.yield();
  }    
}

void keyPressed() 
{
  if (key == ' ') 
  {
      ACTIVE = false;
  }
}

Code 0-2: miditest

miditest.zip -- sketch folder
Übung

Versuchen Sie auf der Grundlage des obigen Midi Programms eine algorithmische Komposition umzusetzen, die das Prinzip von drumming 4 von Steve Reich umsetzt. Berücksichtigen Sie dabei auch Kontrapunkt Regeln.

https://www.youtube.com/watch?v=rwrboGBPSc4