Typ "double" ist rechnerisch notwendig, da z.B. die Sinusfunktion dezimale Werte zw. -1 und +1 liefert die konvertiert zu "short" immer 0 oder +-1 liefern würden.
Die Ausgabe meines Codeschnipsels liefert ebenda solche dezimalen Werte zw. -1 und +1 (xRotated, yRotated), die noch auf das Grid des Displays mit entsprechendem Faktor (z.B. 100) skaliert werden müssen. Das Wertepaar 0, 0 sollte dann idealerweise genau in der Mitte des anzuzeigenden Feldes (z.B. x = 120, y = 160) liegen.
Beispiel: uint xKoordinate = 120 + 120 * xRotated; uint yKoordinate = 120 + 120 * yRotated;
Die Bézier-Kurve kann nun entweder als Punkt (mit "point") oder als Linie (mit "line") der verbundenen Punkte dargestellt werden.
Entweder sind die Samples "Müll" oder der Audio-Kanal des AudioShields ist massiv übersteuert.
Ich vermute die, Samples sind in den Queues nicht ganz synchron. Werde heute nachmittag testen. Bei einem Sinus-Mono sollte die Differenz der Samples (L-R) 0 ergeben. Wenn dem nicht so ist , .........
Beiträge: 1.615
Themen: 17
Thanks Received: 5.409 in 915 posts
Thanks Given: 27.970
Registriert seit: Oct 2013
Bewertung:
20
Beiträge: 1.796
Themen: 17
Thanks Received: 7.366 in 1.036 posts
Thanks Given: 2.927
Registriert seit: May 2013
Bewertung:
6
(11.09.2020, 08:43)DIYLAB schrieb: Auch das sagte ich schon - die Samples sind MÜLL!
Irgendwelche Ideen?
Lass es weg, es muss ja nicht zwingend alles was grundsätzlich möglich ist auch implementiert werden.
Vor allem, wer braucht das letztlich um seine BM ordentlich auszusteuern.
Gruß Detlef
Sodale. Funzt.
Funktioniert soweit bis auf die Skalierung. Mono: 0° Strich, Mono Links: -45° Strich, Mono Rechts: 45° Strich. Das Audio-Signal darf nicht zu stark sein.
3 Mitglieder sagen Danke an für diesen Beitrag:3 Mitglieder sagen Danke an für diesen Beitrag
• dedefr, bornemju, havox
Die Punkte muss man nur chronologisch verbinden, dann ergibt sich die Kurve von selbst.
PS: Die Samples stimmen exakt. Kann auch mehr Buffer verwenden. War nur ein Test um Speicherprobleme auszuschließen.
(11.09.2020, 19:06)DIYLAB schrieb: (11.09.2020, 19:04)gogosch schrieb: Die Punkte muss man nur verbinden.....
Der war gut .
Ist das Dein Ernst?
Na, Kurven lassen sich nicht zeichnen und bestehen immer aus geraden Teilstücken.
Ich bin raus.
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
11.09.2020, 22:04
(Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2020, 23:51 von bornemju.)
Hallo Freunde.
Gogosch und Bruno,
leider hatte ich heute beruflich bedingt bis jetzt keine Zeit in das Projekt zu schauen. Morgen sieht das zeitlich besser aus.
ABER... das Projekt hat sich bis auf dieses Problemchen bestens entwickelt. Da werden wir doch kurz vor dem Ziel nicht aufgeben und alles vor die Wand fahren. Lasst uns alle mal runterfahren, Abstand nehmen und neu nachdenken. Die Lösung wird sich schon finden lassen. Wenn es eine nicht funktionierende Hardware wäre, würde ich sie aus dem Fenster schmeißen und danach wieder rein holen und erneut testen. Das hat tatsächlich schon zweimal in meinem Entwicklerleben funktioniert. Der Fehler wurde allerdings nie lokalisiert, weil danach alles problemlos funktionierte.
Hat mir doch keine Ruhe gelassen. Habe den Bruno-Code aus #693 auf den Teensy übertragen.
Als erstes fällt das Gesprattel im Leerlauf (kein Audiosignal anliegend) auf. Das könnte wieder das gleiche Problem sein, das auch in der Korrelationsanzeige war und mit der Hysterese behoben wurde. Das ist aber z.Z. wohl das kleinste Problem.
Zweitens habe ich einmal ein nicht so lautes Signal eingespeist. Was dabei herauskommt, ist zumindest eine Anzeige, die aber noch nicht unseren Vorstellungen entspricht. Aber, das Problem lösen wir. Wäre doch gelacht.
Gute N8 zusammen
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
Moin zusammen,
Zunächst einmal sollte man nicht Nachts etwas machen, wenn man zu müde ist. Ich bin leider mit viel zu hohem Studiopegel an den Teensy gegangen, weshalb der Audiostream übersteuert war.
Heute morgen ist mir das durch den Kopf geschossen und ich bin einmal auf -20dB Pegel gegangen. Siehe da, das Gonio funktioniert einwandfrei, bis auf die saubere Bezierdarstellung.
Wollte ich nur schnell mitteilen. Werde jetzt erst einmal frühstücken. Danach mache ich noch ein Foto.
Ich habe auch mehr in C programmiert. C++ ist auch nicht so mein Spezialgebiet. Montag beginnt wieder das Wintersemester und da werde ich mich mal bei einigen Studies umhören, die professionell programmieren. Vielleicht finde ich da einen für die notwendige Lösung.
Bis später.
Grüße, Jürgen
2 Mitglieder sagen Danke an bornemju für diesen Beitrag:2 Mitglieder sagen Danke an bornemju für diesen Beitrag
• , havox
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
12.09.2020, 12:36
(Dieser Beitrag wurde zuletzt bearbeitet: 12.09.2020, 12:54 von bornemju.)
Hallo Bruno,
könnte das ein Ansatz fürs weiterkommen sein:
https://xoax.net/cpp/ref/gdi_plus/incl/bezier/
Dieser Link könnte auch interessant sein. Eine Bibliothek der versch. Audio-Testsysteme:
https://github.com/x42/meters.lv2
Gruß, Jürgen
Code im Post #694
Kann mit folgenden YT-Video getestet werden:
Für mich ist der Drops gelutscht!
2 Mitglieder sagen Danke an für diesen Beitrag:2 Mitglieder sagen Danke an für diesen Beitrag
• bornemju, havox
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
Hi Gogosch,
Habe deinen Code gerade auf den Teensy geladen. Funktioniert mit angepasstem Pegel einwandfrei. Müsste nur noch von Bruno integriert und skaliert werden. Dann wären wir in der Tat mit dem Projekt durch.
Habe ein Stereosignal im Beispielvideo eingespielt. Dann einmal das Panorama nach Links und nach Rechts gedreht, auf Mono geschaltet und zum Schluß die Phase gedreht. Lediglich links und rechts sind falsch rum. PAN-Pot auf links, dann geht Gonio nach Rechts und umgekehrt. Ansonsten sieht alles perfekt aus.
Aus meiner Sicht wüsste ich jetzt nichts, was gegen eine Codeimplementierung sprechen sollte. Mehr Aufwand scheint mir nicht notwendig.
Beste Grüße
Jürgen
3 Mitglieder sagen Danke an bornemju für diesen Beitrag:3 Mitglieder sagen Danke an bornemju für diesen Beitrag
• dedefr, stephan1892, havox
(12.09.2020, 21:36)bornemju schrieb: Lediglich links und rechts sind falsch rum.
Moin,
hier mein Stand von heute.
Da ist es andersrum.
Ich tue mich aber schwer damit, die Punkte einfach zu verbinden, das ist mir teilweise zu zackig und man sieht immer die langen Linien, z.B. beim Kreis (ich meine bei Test mit dem Pilzvideo ).
Also habe ich es erst mal bei der Pixelwolke belassen, sieht auch ganz nett aus beim Pilz-Testvideo aus Beitrag #705.
Mal gucken, ob Spline noch implementierbar wäre.
Gute N8
Code: #include <Wire.h>
#include "SPI.h"
#include <Audio.h>
#include <ILI9341_t3n.h>
short samplesLeft[1024] = { 0 };
short samplesRight[1024] = { 0 };
const float sin45 = 0.7071067812;
const float cos45 = 0.7071067812;
const float sqr2 = 1.414213562;
float xL, xR, xNorm;
float yL, yR, yNorm;
float normL, normR;
ILI9341_t3n tft = ILI9341_t3n(10, 9, -1);
// GUItool: begin automatically generated code
AudioInputI2S i2s1; //xy=414,328
AudioRecordQueue queue2; //xy=610,376
AudioOutputI2S i2s2; //xy=611,328
AudioRecordQueue queue1; //xy=612,280
AudioConnection patchCord1(i2s1, 0, i2s2, 0);
AudioConnection patchCord2(i2s1, 0, queue1, 0);
AudioConnection patchCord3(i2s1, 1, i2s2, 1);
AudioConnection patchCord4(i2s1, 1, queue2, 0);
AudioControlSGTL5000 sgtl5000_1; //xy=275,329
// GUItool: end automatically generated code
void setup() {
// Audio
AudioMemory(1024);
sgtl5000_1.enable();
sgtl5000_1.inputSelect(AUDIO_INPUT_LINEIN);
sgtl5000_1.volume(.5);
sgtl5000_1.lineInLevel(4); // Level can be 0 to 15 (5 is the Teensy Audio Library's default).
queue1.begin();
queue2.begin();
// Display
tft.begin(50000000);
tft.setRotation(2);
tft.fillScreen(ILI9341_BLACK);
}
void loop() {
if (queue1.available() >= 8 && queue2.available() >= 8) {
for (byte i = 0; i < 8; i++) {
memcpy(&samplesLeft[128 * i], queue1.readBuffer(), 256);
queue1.freeBuffer();
memcpy(&samplesRight[128 * i], queue2.readBuffer(), 256);
queue2.freeBuffer();
}
}
drawGonio();
}
void drawGonio() {
uint16_t matrix[76800] = { 0 };
// Cross
for (byte i = 10; i < 230; i++) {
matrix[i + 160 * 240] = 0x4208;
}
for (uint16_t i = 10; i < 310; i++) {
matrix[120 + i * 240] = 0x4208;
}
// Gonio
for (uint16_t i = 0; i < 1024; i++) {
normL = (samplesLeft[i] / 32767.) * 2.;
xL = normL * cos45;
yL = normL * sin45;
normR = (samplesRight[i] / 32767.) * 2.;
xR = normR * cos45;
yR = normR * sin45;
xL *= cos45;
yL *= sin45;
xR *= cos45;
yR *= sin45;
xNorm = (xR - xL) / sqr2;
yNorm = (yR + yL) / sqr2;
int16_t x = 120. + (xNorm * 120.);
int16_t y = 160. - (yNorm * 120.);
uint32_t mVector = x + y * 240;
if (mVector <= 76800) matrix[mVector] = 0x05FF;
}
tft.writeRect(0, 0, 240, 320, matrix);
}
Frage an die C-Experten:
Man kann doch sicher diese beiden Schleifen in C++ auch vereinfachen, also das Ganze ohne Schleife realisieren (matrix ist ein Array)?
Code: // Cross
for (byte i = 10; i < 230; i++) {
matrix[i + 160 * 240] = 0x4208;
}
for (uint16_t i = 10; i < 310; i++) {
matrix[120 + i * 240] = 0x4208;
}
2 Mitglieder sagen Danke an für diesen Beitrag:2 Mitglieder sagen Danke an für diesen Beitrag
• havox, bornemju
(12.09.2020, 21:36)bornemju schrieb: Hi Gogosch,
Habe deinen Code gerade auf den Teensy geladen. Funktioniert mit angepasstem Pegel einwandfrei. Müsste nur noch von Bruno integriert und skaliert werden. Dann wären wir in der Tat mit dem Projekt durch.
Habe ein Stereosignal im Beispielvideo eingespielt. Dann einmal das Panorama nach Links und nach Rechts gedreht, auf Mono geschaltet und zum Schluß die Phase gedreht. Lediglich links und rechts sind falsch rum. PAN-Pot auf links, dann geht Gonio nach Rechts und umgekehrt. Ansonsten sieht alles perfekt aus.
Aus meiner Sicht wüsste ich jetzt nichts, was gegen eine Codeimplementierung sprechen sollte. Mehr Aufwand scheint mir nicht notwendig.
Beste Grüße
Jürgen
L/R vertauscht: einfach tft.SetRotation(2) auf tft.SetRotation(0) ändern. Manche Displays (so wie meines) sind um 180° gedreht. Hab den Sketch im Post 694 aktualisiert.
edit: 11:00 optionale Normalisierung auf gesamte Azeigefläche hinzugefügt.
Edit: Kanäle korrigiert.
2 Mitglieder sagen Danke an für diesen Beitrag:2 Mitglieder sagen Danke an für diesen Beitrag
• bornemju, dedefr
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
13.09.2020, 10:45
(Dieser Beitrag wurde zuletzt bearbeitet: 13.09.2020, 10:48 von bornemju.)
(12.09.2020, 23:25)DIYLAB schrieb: (12.09.2020, 21:36)bornemju schrieb: Lediglich links und rechts sind falsch rum.
Moin,
hier mein Stand von heute.
Moin Bruno,
ich habe soeben deine aktuelle Version auf den Teensy portiert. Funktioniert ebenfalls einwandfrei. Muss erst noch etwas erledigen, dann mache ich ein kleines Funktionsvideo.
Was deine beiden Schleifen angeht, so hätte ich eine spontane Idee. Es gibt doch sicher eine Vektor-Grafik-Bibliothek für Arduino mit einer Linien-Funktion, wo man nur Start- und Endkoordinaten, Farbe und Linienstärke übergeben muss. Ich würde dann einfach eine Horizontale und vertikale Linie zeichnen.
Ganz oben sollte noch die Beschriftung: L M R stehen. An der horizontalen Achse sollte links +S und rechts -S stehen.
Unten sollte dann wie in der Windowsversion noch der Korrelationsgradmesser angezeigt werden.
Bis gleich
Jürgen
(13.09.2020, 07:09)gogosch schrieb: L/R vertauscht: einfach tft.SetRotation(2) auf tft.SetRotation(0) ändern. Manche Displays (so wie meines) sind um 180° gedreht. Hab den Sketch im Post 694 aktualisiert.
edit: 11:00 optionale Normalisierung auf gesamte Azeigefläche hinzugefügt.
Moin Gogosch,
danke für die schnelle Umsetzung. Ich werde gleich den Code portieren und testen. Danach gebe ich eine entsprechende Rückmeldung.
Grüße
Jürgen
1 Mitglied sagt Danke an bornemju für diesen Beitrag:1 Mitglied sagt Danke an bornemju für diesen Beitrag
•
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
So, ich habe einmal Bruno's und Gogosch's aktuelle Versionen auf den Teensy portiert und getestet. Der Vergleich ist interessant und kann von euch entsprechend bewertet werden.
Bruno's Version:
[color=var(--ytcp-link-color)]https://youtu.be/OWerywcR-vM[/color]
Gogosch's Version:
[color=var(--ytcp-link-color)]https://youtu.be/BWW2jecbypw[/color]
Ich finde, dass wir jetzt Gonio-Versionen haben, die beide noch nicht 100%ig optimal sind, aber man sollte jetzt erst einmal das Gesamtprojekt mit allen Optionen fertigstellen, damit diejenigen, die es implementieren möchten, dies auch möglichst zeitnah durchführen können. Zumal die Gonio-Funktion sicherlich nicht von allen Anwendern benötigt wird. Diejenigen, die das Gonio benötigen können mit den vorliegenden Versionen sicherlich leben, da sie ja grundsätzlich funktionieren und nur die Darstellung noch etwas Optimierung bedarf.
Danach ist dann genügend Zeit, um das Gonio weiter zu optimieren und zusätzliche Softwarefunktionen zu entwickeln oder zu optimieren. Das kann ja dann in einem späteren Release veröffentlicht werden, was doch eine übliche Vorgehensweise im Softwareengineering ist.
Liebe Grüße
Jürgen
1 Mitglied sagt Danke an bornemju für diesen Beitrag:1 Mitglied sagt Danke an bornemju für diesen Beitrag
• dedefr
Beiträge: 95
Themen: 0
Thanks Received: 47 in 28 posts
Thanks Given: 90
Registriert seit: Jul 2020
Bewertung:
0
Gogosch,
eine Änderung des Parameters von 2 auf 0 für die Rotation bringt nichts. In beiden Fällen bleibt L und R vertauscht. Habe ich jetzt mehrfach gewechselt und jeweils auf den Teensy portiert. Es funktioniert leider noch nicht.
Gruß
Jürgen
(13.09.2020, 12:37)bornemju schrieb: Gogosch,
eine Änderung des Parameters von 2 auf 0 für die Rotation bringt nichts. In beiden Fällen bleibt L und R vertauscht. Habe ich jetzt mehrfach gewechselt und jeweils auf den Teensy portiert. Es funktioniert leider noch nicht.
Gruß
Jürgen
Hast Du auch die letzte Version? Bei mir funktioniert es nun.
1 Mitglied sagt Danke an für diesen Beitrag:1 Mitglied sagt Danke an für diesen Beitrag
• bornemju
Beiträge: 1.615
Themen: 17
Thanks Received: 5.409 in 915 posts
Thanks Given: 27.970
Registriert seit: Oct 2013
Bewertung:
20
3 Mitglieder sagen Danke an dedefr für diesen Beitrag:3 Mitglieder sagen Danke an dedefr für diesen Beitrag
• bornemju, , havox
Beiträge: 2.633
Themen: 59
Thanks Received: 10.192 in 1.739 posts
Thanks Given: 16.836
Registriert seit: Nov 2017
Bewertung:
29
Mal kurz einen Blick auf das Ziel werfen
Bei den amtlichen Goniometern sind die Achsen übrigens im 45 Grad Winkel angeordnet, nicht horizontal und vertikal.
Viele Grüße aus Kiel,
Hans-Volker
Es gibt viel zu tun, fangt schon mal an!
2 Mitglieder sagen Danke an havox für diesen Beitrag:2 Mitglieder sagen Danke an havox für diesen Beitrag
• dedefr, bornemju
(13.09.2020, 15:55)havox schrieb: Bei den amtlichen Goniometern sind die Achsen übrigens im 45 Grad Winkel angeordnet, nicht horizontal und vertikal.
... und wo ist da der Unterschied zu unseren Versionen
Oder meins du das Fadenkreuz?
Mono Links:
Mono rechts:
2 Mitglieder sagen Danke an für diesen Beitrag:2 Mitglieder sagen Danke an für diesen Beitrag
• dedefr, bornemju
(13.09.2020, 15:55)havox schrieb: Mal kurz einen Blick auf das Ziel werfen
Kannst Du uns mal bitte den Sound dazu bereitstellen?
(13.09.2020, 15:55)havox schrieb: Bei den amtlichen Goniometern sind die Achsen übrigens im 45 Grad Winkel angeordnet, nicht horizontal und vertikal.
So in etwa:
1 Mitglied sagt Danke an für diesen Beitrag:1 Mitglied sagt Danke an für diesen Beitrag
• dedefr
Beiträge: 2.633
Themen: 59
Thanks Received: 10.192 in 1.739 posts
Thanks Given: 16.836
Registriert seit: Nov 2017
Bewertung:
29
13.09.2020, 17:24
(Dieser Beitrag wurde zuletzt bearbeitet: 13.09.2020, 18:17 von havox.)
Ja, genau so
edit: dann liegt nämlich ein Monosignal, das nur im linken Kanal ist, auf der Koordinate für links. Rechts entsprechend.
Viele Grüße aus Kiel,
Hans-Volker
Es gibt viel zu tun, fangt schon mal an!
2 Mitglieder sagen Danke an havox für diesen Beitrag:2 Mitglieder sagen Danke an havox für diesen Beitrag
• dedefr,
|