Appearance
Versuch 4: Plot Panel
In diesem Versuch wird mit einem Plot und Audiowiedergabe gearbeitet.
Ziele
- GridBagLayout anwenden
- Arbeiten mit Arrays
- Model View Controller anwenden
- Selbständiges erstellen einer Applikationsstruktur
Git Projekt
Klonen Sie das Repo git@gitlab.fhnw.ch:oop/oop2-versuche/v03-waveform-player.git
in Ihren Eclipse Workspace und importieren Sie das Projekt.
Aufgabe 1
Erstellen Sie eine Applikation, welche das PlotPanel
instanziert und stellen Sie eine Sinusfunktion dar, wie im Screenshot gezeigt.
- Verwenden Sie ein
GridBagLayout
, da das GUI später erweitert wird. - Schauen Sie sich die Klasse
PlotPanel
an. Wie können Sie die Klasse einbinden und verwenden? PlotPanel
soll mit min, maxInteger.MIN_VALUE
undInteger.MAX_VALUE
initialisiert werden.- Das
PlotPanel
nimmt ein Array von Werten entgegen und plottet diese mit derupdate
Methode. - Erstellen Sie hierzu eine Methode
int generateSin(double t, double freq)
, welche Werte zwischenInteger.MIN_VALUE
undInteger.MAX_VALUE
zurükgibt. - Rufen Sie diese Methode in einem Loop auf, um ein Array mit Werten zu füllen.
Aufgabe 2
Erweitern Sie das GUI gemäss dem Screenshot. Foglende Funktionalität soll erreicht werden:
- Gehen Sie gemäss dem MVC Konzept vor.
- Geplottet wird ein Sinus mit der Frequenz, welche mit dem Slider eingestellt wird.
- Sobald der Slider verschoben wird, soll der Plot neu gerechnet werden.
- Es sollen 44100 Samples gezeichnet werden. Dies entspricht einer Sekunde Audiosamples.
- Das Array
samples
sowie die aktuellefrequency
sollen im Model geführt werden. - Ändert die
frequency
im GUI, so soll das Model die Samples neu berechnen. Controller
ist das Bindeglied von Model und View. Dabei brauchen Sie keinen Observer.Controller
sollView
updaten, sobaldModel
neu gerechnet hat.- Bei hohen Frequenzen ist der Plot schwer lesbar. Ändern Sie die Parameter bei
PlotPanel
so, dass Sie nur ein paar hundert Samples anzeigen. Das Signal ist ja schliesslich periodisch. - Setzen Sie beim
PlotPanel
den Labeltext und geben Sie die Periode in[ms]
an.
Aufgabe 3
Der Play Button soll die geplotteten Samples via Audio abspielen.
- Binden Sie AudioPlayerEngine im Model ein.
- Verwenden Sie die
play
Methode, sobald der User Play drückt.