Synthetisierung von Audio und MIDI Referent Sebastian Frielitz Themen Überblick Synthetisieren von Musik MIDI Beispiel Synthetisieren von Musik Stückbasierte Soundformate Notenbasierte Soundformate Notenbasierte Soundformate Bedeutet: das Musikstück wird Notenweise gespeichert Motivation: Leichter zu editieren, da Instrumente isolieren möglich Leicht auf Computerspielverlauf abzustimmen Schmaleres Datenformat (weniger Speicher nötig) Musik Programmieren Was wird benötigt? Instrumente Noten Objektorientierter Ansatz Abstrakte Klasse Instrument Methode NewNote() Abstrakte Klasse Note Nur von Instrument aus zu instanziieren Kann sich selber in Puffer spielen Restart() – Ton halten Pitch(x) – Frequenz des Tones (Pitch(440) = 440 Hz) Volume(x) – Lautstärke Instrumente Synthetisieren Ansatz 1 Ein existierendes Instrument duplizieren Ansatz 2 Sound mit musikalischer Qualität kreieren Instrument duplizieren Mehrere Samples von original Instrument erstellen Pitch shifting Ein Sample pro Oktave Ton mit Pitch(x) Methode variieren Amplitudensteuerung Ton eines physischen Instruments ist nicht gleichbleibend Amplitudensteuerung ADSR - Envelope Attack, Decay, Sustain, Release Envelope Umsetzung z.B. durch Synthesizer Hardware mit eigenem Volumecontrol für Noten Andere Envelope Control Formen Trompeten, Violinen halten den Ton oft länger Geigen spielen einen Tremolo oder Vibrato MIDI Musical Instrument Digital Interface MIDI Manufacturer‘s Association MMA spezifiziert Speicherung von MIDI Für Kompatibilität General MIDI mit 175 Standard Instrumenten Organisation von MIDI Files Besteht aus Reihe von Chunks (RIFF Format) Chunk beginnt mit 4 Char MIDI Header Chunk 2 Byte Datei Typ 2 Byte Anzahl der Tracks 2 Byte Zeit Format MIDI Track Chunk Track Daten Pro Track ein Instrument MIDI Datei Typen Typ Null Typ Eins Datei enthält nur einen Track Mehrere Tracks, simultan abgespielt Typ Zwei Mehrere Tracks, ohne Zusammenhang Header Chunk- MIDI Standard Header Chunk Track Chunk- MIDI Standard Track Chunk MIDI - Tracks Liste von MIDI Events vorangestellt ein Zeitintervall (delta time) Delta Time: Zeit bis Eventauslösung Einlesen der Track Chunks: Chunklänge lesen und beachten Events in in-Memory-Eventliste einfügen General MIDI - Events Erste Byte: Status Byte, gibt Eventtyp an Zweites Byte: Channel Byte Folgende Bytes: Daten Bytes Status Bytes beginnen immer mit high Bit =1 Daten Bytes beginnen immer mit high Bit = 0 Channels von 1 bis 16 (Code 0-15) Instrumente von 1 bis 128 (Code 0-127) Ton spielen- MIDI Standard Ton spielen Ton spielen- MIDI Standard Ton spielen Ton spielen- MIDI Standard Ton spielen Integer variabler Länge Kleine Zahlen passen in ein Byte Jedes Byte 7 Bit Msb 1 – es folgen noch Bytes Msb 0 – letztes Byte des Integer Integer variabler Länge 88 00 8 8 1000 1000 msb 0 0 0000 0000 msb X000 1000 X000 0000 = 2^10 = 1024 MIDI – Events verwalten Events sind zeitlich sortiert Bei Typ Eins MIDI Dateien Vor abspielen Events aller Tracks in gemeinsamen Speicher Running Status Zur Effizienssteigerung von MIDI wire protocol Auf Daten eines Events folgen wieder Daten Wire protocol benutzt dann den vorherigen Status weiter MIDI - Events Standard MIDI Events Sysex Events Noten spielen System exclusive Message Meta Events Key signatures Copyright notices Meta Event – Time Signature Typ 88 (Hex 58) 4 Bytes Daten Ersten 2 Byte: ¾ Takt = 3 und 2 Drittes Byte: MIDI Ticks pro Metronom Klick Viertes Byte: Anzahl 32stel Noten in einer MIDI viertel Note Track Chunk Track Chunk- MIDI Standard Track Chunk Zwei Arten von MIDI General MIDI Standard Format MIDI wire protocol Zur Übertragung von MIDI Daten über langsame Netze Real Time Events Verwendet bei MIDI wire protocol Unterteilung in real-time Events und non real-time Events Real-time Events Müssen an bestimmter stelle erscheinen um gewünschten Effekt zu haben Synchronisations Events: start, continue Non real-time Events Nicht zeitkritisch, werden geladen und später interpretiert Instrument change MIDI - Timing Delta time tick counts festelegen Zwei Techniken: SMPTE Musical Tempo MIDI Timing - SMPTE Society of Motion Picture and Television Engineers Time format Code im Header negativ Video und Audio synchronisation Teile von Stunden, Minuten, Sekunden und Frames Kinoqualität 24 Frames pro Sekunde PAL, SECAM Fernsehen 25 Frames pro Sekunde NTSC schwarz-weiß Fernsehen 30 Frames pro Sekunde MIDI Timing – Tempo-Based Time Format Kode im Header positiv Beats per minute (bpm) Im Header als Ticks pro Beat 80 bpm – 200 bpm (MIDI Standard: 120 bpm) General MIDI Channels 1 – 9 und 11-16 melody channels Channel 10 rhythm channel (47 Rhythmusinstrumente) 16 simultane Noten auf melody channel 8 simultane Noten auf rhythm channel 175 Instrumente Unterstützt werden: unter anderem Kontroller für Modulation, Lautstärke, Sustain, Reset all Parameter: Pitch Bend, Sensitivity Base / Extended MIDI Base Multitimbral Synthesizer Base MIDI 6 simultane Melodie Noten auf 3 Instrumenten 3 simultane Rhythmus Noten auf 3 Instrumenten Extended Multitimbral Synthesizer Extended MIDI 16 simultane Melodie Noten auf 9 Instrumenten 16 simultane Rhythmus Noten auf 9 Instrumenten Track Chunk Track Chunk Track Chunk Track Chunk- MIDI Standard Track Chunk Track Chunk- MIDI Standard Track Chunk Track Chunk- MIDI Standard Track Chunk