KAWAI K5000W

Ein Neuer hat sich in meinem Studio dazugesellt. Ein KAWAI K5000W, ein additiver Synthesizer, erzeugt praktisch alles Denkbare an Sounds, vor allem atmosphärische Sachen. Allerdings ist das Teil jetzt gut 20 Jahre alt, da hat man an ausgefeilte Bedienkonzepte noch nicht gedacht. Insofern ist die Bedienung was für einen Studenten der Elektrotechnik. Aber ich werde mich definitiv damit auseinandersetzen.

Und so sieht der Gute aus:

k5000

Hier ein Beispiel einer Editiermaske, in diesem Falle die Harmonischen:

k5000_display

Dumm nur, wenn man dann feststellt, daß die Kopfhörerbuchse nicht funktioniert, dann muss man den alten Herrn nämlich mal aufschrauben...

k5000_open

...und stellt fest, daß sich die Leiterbahnen auf der Kopfhörerplatine gelöst haben. Also werden kurzerhand mit Geduld und Spucke ein paar Drahtbrücken aufgelötet, wofür ist man schliesslich Radio- und Fernsehtechniker?

k5000_headphones

Jetzt kann man sich wieder wunderbar das Gehör massieren, ohne die Nachbarn zu stören. Ihr werdet das Teil mit ziemlicher Sicherheit in einer der nächsten Produktionen zu hören bekommen.

Ein Wermutstropfen bleibt allerdings: Eine Spule im Netzteil verursacht ein störendes Pfeifen. Kurz oder lang werde ich das auch noch austauschen müssen.


TRIO VST/AU SYNTHESIZER Teil 4

So langsam wird es richtig interessant, die GUI ist fast vollständig.

Neu hinzugekommen sind nun die Oberfläche für die Modulationsmatrix, ein Patchbrowser, sowie ein Konfigurationspanel.

 

DIe Modulationsmatrix ist echt praktisch und die Architektur erlaubt es nun prinzipiell alles überallhin zu routen. So kann man beispielsweise den Filter Cutoff mt einem LFO modulieren und dessen Frequenz wiederum durch einen weiteren LFO. Ausserdem habe ich es jetzt so angelegt, daß sich theoretisch beliebig viele LFOs und Hüllkurven anlegen lassen. Das UI gibt das allerdings im Moment nicht her. Natürlich kann man auch alle Modulationsziele mit dem Sequenzer modulieren. EIn programmiertes Sample und Hold ist also auch machbar.

Einstellungen

Klangbeispiele gibt es leider immer noch keine, ich bin noch zu sehr mit Bugfixing beschäftigt. Es dauert aber nicht mehr lange.

Die aktualisierte Feature Liste:

3 Oszillatoren : Sägezahn, Sinus, Rechteck und Rauschen mit Hard-Sync
2 LFOs mit 3 Wellenformen, freilaufend und Host-Sync
12/24 dB Moog Tiefpass Emulation
4 Hüllkurvengeneratoren
16-Step Sequenzer (auch als Modulator) freilaufend oder Host-Sync
6-Fach Modulationsmatrix
- Quellen : LFO1, LFO2, Hüllkurven 1-4, Sequenzer
- Ziele : Filter Cutoff, Oszillator 1-3 Pitch, LFO1+2 Rate
Flexibles MIDI Controller Routing
Einfacher Faltungshall
Stereo Delay, freilaufend und Host-Sync

Zur Fertigstellung fehlen mir noch:
-Stereo Chorus
-Sample und Hold für die LFOs
-Die Implementierung des Controller Routings

Gerne würde ich auch das Routing der Effekte grafisch verändern können, derzeit ist es fix verdrahtet.

Hier das (derzeit fix verdrahtete) interne Routing der Module:


TRIO VST/AU SYNTHESIZER Teil 3

Ich habe munter am Trio Synthesizer weitercodiert. Im folgenden Bild gibt es die Effektansicht zu sehen.

fx_panel

Neu hinzugekommen ist ein kleiner 16-Step Sequenzer mit dem sich einfache Patterns programmieren lassen, die synchron zum Host laufen. Es gibt jetzt auch einen Verzerrer und wie man sehen kann, ist auf dem Panel noch ein wenig Platz, hier liegt noch viel Arbeit vor mir. Der Code wird allerdings langsam unübersichtlich. Ich muss langsam mal das Refactoring in Angriff nehmen.

Leider habe ich immer noch keinen Song damit gebastelt, die Entwicklung verschlingt fast meine ganze Zeit.

 


Virus B und die Patchnamen

Der gute alte Virus B - Das Elektronik Arbeitstier schlechthin. Er ist immer noch in sehr vielen Produktionen zu hören und klingt meines Erachtens immer noch viel fetter als die meisten virtuellen Synths.

virus_b

Neulich stand ich vor dem Problem, daß ich in Logic gerne die Namen aller meiner Patches zur Verfügung haben wollte. Das ist leichter gesagt als getan. Nachdem ich kein Werkzeug für diese Aufgabe gefunden habe, entschloss ich mich dazu, mal die MIDI Spezifikation von dem Burschen zu wälzen und bin zu einer einfachen Lösung gekommen:

Hierzu muss man Logic das Environment öffnen und ein neues Instrument anlegen und dann für jede Bank einen Sysex Dump durchführen (Handbuch!)

Dann folgendes Java Progamm anlegen:

package de.pueski.sysex;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

public class SysexNameDump {

   private static final String basePath = "/Library/Application Support/Mystery Islands Music/VirusHC Editor/Patches/MP Bank H.syx"; 
   
   public static void main(String[] args) throws Exception {

      Path path = Paths.get(basePath);
      byte[] data = Files.readAllBytes(path);

      for (int i = 0; i < data.length; i += 267) {

         byte[] patch = Arrays.copyOfRange(data, i, i + 267);
         byte[] patchNameData = Arrays.copyOfRange(patch, 249, 259);

         String patchName = new String(patchNameData);
         System.out.println(patchName);

      }

   }
}
  1. In den basePath den vollständigen Pfad zur jeweiligen Bank einsetzen
  2. Programm ausführen
  3. Die Konsolenausgabe dann in die Zwischenablage kopieren
  4. Im Environment Instrument doppelklicken
  5. Optionen anklicken
  6. Alle Namen einfügen
  7. Fertig!

So einfach kann das Leben sein!


TRIO VST/AU SYNTHESIZER

So, ich bin etwas weitergekommen. Die GUI wurde komplett überarbeitet, ausserdem ist eine Effektsektion dazugekommen.

trio_v0-1

 

Die Parameter lassen sich jetzt deutlich besser ablesen, wie ich finde.

Wie bereits angekündigt, habe ich nun folgende Baustellen abgeschlossen:

  •  Sinus und Rechteck Oszillator
  •  Die restlichen LFOS
  • Verdrahten der Modulationsmatrix

Ausserdem sind hinzugekommen in der Effektsektion:

  • Einfacher Hall
  • Stereo Delay

Als nächstes kommen:

  • Die fehlenden Wellenformen der LFOs
  • Distortion
  • Chorus
  • Flanger
  • Patch Browser

Es steckt doch wesentlich mehr Aufwand dahinter, als ich anfangs dachte. Klangbeispiele folgen.

 


Trio VST/AU Synthesizer

Bald ist es soweit, ein lang ersehnter Wunsch von mir wird Wirklichkeit: Mein erster selbstgeschriebener Softwaresynthesizer.

Ich habe ihn "Trio" getauft, weil er mit drei Oszillatoren daherkommt. Im Moment gibt es den Synth nur als AU, geplant sind noch VST und evtl. LADSPA für Linux.

Ein paar technische Daten:

  • 3 Oszillatoren : Sägezahn, Sinus, Rechteck
  • 2 LFOs mit 3 Wellenformen
  • 12/24 dB Tiefpass Filter
  • 2 ADSR (Filter/Amp)
  • 2 Fach Modulatiosmatrix mit LFO->Osc Pitch, LFO->Filter Cutoff, LFO -> Filter Resonanz

Hier ein erstes Klangbeispiel:

Aktuell funktioniert schon fast alles:

- Parameter lassen sich alle voll automatisieren und per MIDI-Learn ansprechen
- Patches können gespeichert und geladen werden
- Mehrere Instanzen kommen sich nicht mehr ins Gehege

Als nächstes steht an:

- Sinus und Rechteck Oszillator
- Die restlichen LFOS
- Verdrahten der Modulationsmatrix

Als Schmankerl zum Schluss werde ich dann noch einen schönen Patch Browser bauen.

Ein paar Glitches habe ich auch noch:

- Tiefe Töne erzeugen noch Aliasing Artefakte
- Die Wertebereiche der Envelopes sind noch nicht handlich genug
- Memory leaks

Immerhin kann man damit schon spielen und Musik machen:

TRIO in der DAW

TRIO in der DAW

Innerhalb der nächsten zwei Wochen werde ich wohl zum Alpha Stadium kommen. Das UI ist auch noch nicht final, da werde ich noch die ein oder andere Stunde drüber hirnen müssen. 😉


Support your local dealer - Nur wofür?

Die Frage stelle ich mir gerade ernsthaft.

Ich habe mich letzte Woche dazu hinreissen lassen, mir neue Studiomonitore zu kaufen. Nach ausgiebigen Recherchen habe ich mich für die Adam A3X entschieden, aber das soll nicht das Thema dieses Beitrages sein. Vielmehr soll es um die Frage gehen, ob es sich lohnt, beim Händler vor Ort zu kaufen.

Die Boxen habe ich, wie gesagt, letzte Woche erworben. Ich bin höchstpersönlich in Freiburgs einzigen Musikfachhandel gefahren, wer das ist, könnt Ihr ja gerne selber googeln. Ich halte mich an dieser Stelle mit Namensnennung mal zurück. Natürlich habe ich ausgepackte Ware bekommen, also genau die, die als Vorführgerät im Vorführraum stand. Der Boden war leicht zerkratzt vom Herumschieben. Also dachte ich, es gäbe zumindest ein wenig Rabatt, oder wenigstens ein Kabel dazu. Am Ende habe ich für Vorführware auch noch 20 Euro mehr bezahlt als bei Thomann. Dafür konnte ich die Dinger wenigstens gleich mitnehmen. Dazu habe ich noch ein paar völlig überteuerte Kabel mitgenommen. Wenigstens habe ich den Unterschied zwischen unsymmetrischen und symmetrischen Leitungen gelernt. Ach und die netten Leute vom Fachhandel haben mir auch noch 8 Schaumstofffüße zum Aufkleben mitgegeben, ist das nicht reizend?

Ansonsten fing alles gut an, die Boxen klangen erwartungsgemäß großartig. Leider habe ich nach kurzer Zeit feststellen müssen, daß eine der beiden Boxen stark rauscht. Später kamen auch noch Störgeräusche hinzu. Was folgt, ist klar: Boxen wieder einpacken, zum Händler bringen und einschicken lassen. Prima!

Ich hätte an dieser Stelle zumindest erwartet, daß ich ein leihweise ein Ersatzgerät mitnehmen kann, von mir aus auch gegen Gebühr. Pustekuchen, der arme Händler hat nichtmal irgendwelche gebrauchten Studiomonitore rumstehen, die er bei Bedarf an Kunden verleihen kann. Irgendwas haben die da nicht ganz richtig verstanden. Bin gespannt, wann ich die defekte Box wieder abholen kann. Meint doch der Mann im Laden ernsthaft, mit einer Box käme man ja auch ganz gut aus. Aha.

Um das Mal zusammenzurechnen:

  • 2 Boxen, das Stück 269 Euro
  • 2 Kabel jeweils 1,5m XLR auf Klinke Symmetrisch, Stück 19 Euro
  • 3 x hin und zurück von Waldkirch nach Freiburg, entsprechend 3 x 44km mit 33cent pro km, also knapp 44 Euro.

In Summe sind das 620 Euro. Meine Fahrtzeit und die Zeit die man im Laden rumstehen muss, weil die Bude chronisch unterbesetzt ist, nicht mit eingerechnet. Was hätte mich das Ganze nun gekostet, wenn ich gleich bei Thomann bestellt hätte?

  • 2 Boxen, das Stück 259 Euro
  • 2 Kabel jeweils 1,5m XLR auf Klinke Symmetrisch, Stück 13,50 Euro

Das sind zusammen 545 Euro. Und falls die Dinger kaputt gewesen wären, hätte ich sie kostenlos bei der nächsten Postfiliale wieder abgeben können.

Ich habe also für weniger Service, einen deutlich höheren Zeitaufwand und ganz viel Ärger 75 Euro mehr bezahlt. Wie blöd muss man eigentlich sein???

Und Ihr liebe Inhaber des nicht näher genannten Fachhandels seht mich nur noch einmal, nämlich genau dann, wenn ich die hoffentlich reparierte Box wieder abhole.


Kapazität messen mit dem Arduino

In dieser Folge beschäftigen wir uns mit dem Messen von Kondensatoren, also Kapazitäten mit dem Arduino. Ich experimentiere schon seit einiger Zeit damit herum und habe vor ein paar Wochen günstige Arduino-Nano Clones aus China bekommen, mit denen ich nun ein kleines Projekt realisieren wollte.

title_image

Das Messen von Kapazitäten ist hierfür geradezu ideal. Nur wie misst man diese eigentlich? Dazu benötigen wir zunächst ein wenig Theorie, aber keine Angst, es hält sich in Grenzen.

Legt man an an einen Kondensator über einen Vorwiderstand eine Gleichspannung an, so lädt sich dieser nach einer bestimmten Zeit fast vollständig auf die angelegte Spannung auf. Gleichzeitig bezeichnet man diese Art der Schaltung schon als RC-Glied, oder Tiefpass. Die Eigenschaften als Tiefpass wollen uns an dieser Stelle aber nicht weiter interessieren.

RC-Glied

RC-Glied

Nun können wir einige Überlegungen anstellen.

Aus der Elektrotechnik wissen wir schon etwas über die Zeitkonstante "Tau", diese berechnet sich folgendermaßen:

tau = R*C

Diese Zeitkonstante besagt nach welcher Zeit sich der Kondensator auf ca. 63% der angelegten Spannung aufgeladen hat, das können wir also gut gebrauchen. Wie kommen wir denn aber nun auf die Einheit Sekunden? Ganz einfach, die Kapazität in Farad gemessen lässt sich auch schreiben als:

F = frac{A * s}{V}

Und der Widerstand in Omega gemessen ist natürlich laut dem Ohm'schen Gesetz frac{U}{I} also in Einheiten ausgedrückt frac{V}{A}.

Wir erhalten also die Einheit für R*C:

R * C = frac{A * s * V}{V * A}

Ampere(A) und Volt(V) kürzen sich raus und es bleibt nur noch die Sekunde, so ein Zufall!

Rein interessehalber schauen wir uns noch die vollständige Formel an, nach der sich die Spannung U an einem Kondensator zu einem beliebigen Zeitpunkt berechnen lässt, sozusagen die Ladekennlinie des Kondensators:

U(t) = U_{rm max} cdot (1 - e^{-frac{t}{tau}})

Das können wir uns auch mal als Grafik ausgeben, dann wird der Zusammenhang gleich viel klarer (Klicken zum Vergößern).

RC-Glied

RC-Glied

Die beiden gestrichelten Linien zeigen den Punkt an dem sich der Kondensator auf 63% der angelegten Spannung aufgeladen hat, also genau nach 1*Tau (reimt sich).

Natürlich verhält sich ein RC Glied in der Realität fast genauso. Im folgenden Bild habe ich ein RC-Glied mit 100nF und 1kOhm an eine Rechteckspannung mit ca. 250HZ angeschlossen und die Spannung am Kondensator gemessen, hier lässt sich der Lade -und Entladevorgang sehr gut beobachten:

RC-Glied an 250Hz

RC-Glied an 250Hz

Jetzt haben wir unser Handwerkszeug zusammen und können unsere Schaltung entwerfen.

Grundsätzlich müssen wir also einen Kondensator über einen Vorwiderstand aufladen und die Zeit messen, die benötigt wird, um den Kondensator aufzuladen. Weiterhin müssen wir den Kondensator auch entladen können. Also benötigen wir einen Widerstand zum Laden und einen zum Entladen, weiterhin müssen wir den ADC des Arduino bemühen, um die Spannung am Kondensator zu messen. Diese kann natürlich niemals höher als die Betriebssspannung des Arduino werden.

Um die ganze Sache abzurunden, benötigen wir ein Display, in diesem Falle ein HD44780 kompatibles 16x2, um die Messung anzuzeigen und einen Taster, um den Messvorgang starten zu können.

Das führt uns dann zu folgender Schaltung:

Schaltplan für den Kapazitätsmesser

Schaltplan für den Kapazitätsmesser

Der Arduino lädt nun über Pin D13 den Kondensator und misst die Zeit, die dafür benötigt wird. Die Messung der Spannung erfolgt am Pin A0 und die Entladung wird über Pin D10 vorgenommen. An JP3 wird dann der Taster zum Starten der Messung angeschlossen. JP2 dient der Spannungsversorgung, hier werden 5V angeschlossen. Alternativ kann die Schaltung auch über die USB-Buchse des Arduino versorgt werden.

Auf dem Steckbrett aufgebaut könnte das so aussehen:

Schaltung auf dem Steckbrett

Schaltung auf dem Steckbrett

Die eigentliche Messroutine ist erschreckend einfach:

	digitalWrite(chargePin, HIGH);  // set chargePin HIGH and capacitor charging
	startTime = millis();

	/* Measure Capacity */
	while (analogRead(analogPin) < 648){       // 647 = 63.2% of 1023, which corresponds to full-scale voltage 
	}

	elapsedTime = millis() - startTime;
	if (elapsedTime > 1) {  //output only if time was measured

		// convert milliseconds to seconds ( 10^-3 ) and Farads to microFarads ( 10^6 ),  net 10^3 (1000)  
		microFarads = ((float)elapsedTime / resistorValue) * 1000;
        }

Hier wird der Ladepin (D13) auf High Pegel, also 5V gesetzt. Wir starten die Zeitmessung und der Ladevorgang beginnt. Der ADC vom Arduino hat eine Auflösung von 10 Bit, also 1024 Schritte. Somit entsprechen 63.2% etwa frac{5V * 0.632}{5V / 1024} = 647 Schritten.

Warten wir also so lange, bis dieser Wert am ADC erreicht ist, können wir anschliessend die Ladezeit ablesen und unsere Kapazität berechnen (Zeile 12). Dann kann der ermittelte Wert auf dem Display ausgegeben werden.

Der ursprüngliche Source Code stammt von Paul Badger, wurde vom Make Magazin erweitert und von mir noch für das LCD und die Tastensteuerung modifiziert,

Das ist eigentlich auch schon die ganze Zauberei. Natürlich kann man die Schaltung noch verbessern, so lassen sich mit dem 10k Ladewiderstand keine kleinen Kapazitäten < 1µF messen. Hier wäre es wünschenswert die noch freien Pins zu verwenden und den Ladewiderstand automatisch umzuschalten.

Vielleicht schauen wir uns in einer der späteren Folgen an, wie man diese Schaltung auf einer Platine aufbaut und in ein schickes Gehäuse einbaut.

Alle Projektdateien, Quelltexte usw. finden sich hier. Viel Spass beim Nachbauen.


Matlab und das Picoscope

Was tut man, wenn man ein Picoscope 3203D besitzt und Messwerte von dort in Matlab einlesen (und sich deswegen extra die Instruments Toolbox gekauft hat :()möchte?

Die kurze Antwort: das geht so erstmal nicht so einfach, weil dieses Modell zur Zeit (noch) nicht unmittelbar unterstützt wird. Zumindest habe ich es noch nicht zum Laufen bekommen.

Die lange Antwort: Es gibt zum Glück einen einfachen Workaround!

Die Picoscope Software kann zum Glück Messdaten im Matlab Format speichern. Hierzu zeichnet man ganz normal sein Eingangssignal auf und speichert diese Wellenform dann mit "Datei -> Wellenform speichern unter" als Matlab-4 Datei.

Picoscope Triangle

Picoscope Messung mit Dreiecksspannung

Picoscope speichert dann 32 Wellenformen mit jeweils 1000000 Samples. Wir benötigen zum Matlab Import erstmal nur eine davon und kopieren diese in unser Matlab Arbeitsverzeichnis. Nennen wir sie mal "triangle_01.mat".

Jetzt basteln wir uns ein kleines Script, was diese Daten 1 zu 1 ausplottet:

Fs = 500000000;       % Sampling frequency

data = importdata('triangle_01.mat');

T = 1/Fs;             % Sampling period
L = data.Length;      % Length of signal
t = (0:L-1)*T;        % Time vector

G = transpose(data.B);

plot(t,G);
grid on;

print('triangle.eps','-depsc');

Wichtig ist nur, daß man in der ersten Zeile die Sampling Frequenz richtig einstellt, damit später im Plot die Zeitachse richtig beschriftet wird.

Weiterhin ist die Zeile 9 vielleicht verwirrend, diese ist aber nötig, da der Import einen Spaltenvektor erzeugt, der plot Befehl aber einen Zeilenvektor erwartet. Mit transpose drehen wir diesen einfach um. Wenn alles richtig eingegeben ist, erhalten wir einen Plot, der wie folgt aussehen sollte:

Matlab Ausgabe

Matlab Ausgabe

Der Plot wird dann noch zusätzlich im Arbeitsverzeichnis als EPS-Vektordatei ausgegeben, so einfach kann das Leben sein!


Picoscope 3203D im Test

Seit einiger Zeit plagt mich das Thema, welches Oszilloskop ich nun erwerben soll, um mein altes Hameg HM512 zu ersetzen, welches ja nun mittlerweile weit über 40(!) Jahre alt ist.

Ich hatte bereits das "Vergnügen", mit einem Rigol DS1052E und einem DS2072A zu arbeiten. Ich spare mir an dieser Stelle die Details. Nur soviel dazu: Wer keinen Düsenjet auf seinem Schreibtisch stehen haben will, sollte tunlichst die Finger davon lassen! Insgesamt ist alles aus dem Hause Rigol, was ich bisher in den Fingern hatte, als billiger Schrott zu bezeichnen, das schliesst das Tischmultimeter DM3058E und das Labornetzteil DP832 ein. Einzig der Funktionsgenerator DG4102 vermochte zu überzeugen. Alle anderen Geräte scheiden allein wegen der lauten Lüfter aus, die allesamt eine absolute Zumutung sind! Scheinbar sind alle Chinesen taub.

Aber genug davon, wenden wir uns den angenehmen Dingen zu...

(mehr …)


(c) 2016 Matthias Pueski