Sound to light

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Then
Beiträge: 247
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Sound to light

Beitrag von Then »

Hallo zusammen!
Ich möchte meine Lichtanlage passend zum Sound steuern. Jetzt aber nicht manuell (das klappt schon) nee ich möchte eine Light Show automatisch laufen lassen. Also wenn zb ein Klavierintro läuft, dann soll das Programm quasi 1 bestimmtes Licht eines Effektes einschalten usw.
Sicherlich gibt's da Profi Programme für, aber wofür habe ich pb? DMX und ArtNet kann ich mitlerweile ansteuern. Nun habe ich quasi 300 rgb Bälle und 9 LED RGB Stäbe.
Das Programm sollte jetzt entweder die Musik grafisch anzeigen und mir die exakte Position zeigen, So dass ich genau an dieser Stelle eintragen kann , welches Licht angehen soll.
Habe schon versucht die Musik grafisch darzustellen und anhand eines 300Pixel hohen BMPs die jeweiligen leds an der entsprechenden stelle "gemalt". Diese habe ich dann mit Point() per Zeitachse ausgelesen und entsprechend geschaltet - ist aber nicht ganz so übersichtlich...
Hat jemand eine noch komfortablere Idee??
PB 5.62 / Windows 11 64Bit (i5/32GB/240GB-SSD+3TB-HDD/1050GTX4GB) / 27" Multitouch Monitor

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Sound to light

Beitrag von True29 »

hm , also vielleicht benutzt du statt eine bmp datei eine text datei.
könntest diese ja so aufbauen.

zeitleiste: --------_ pause
lichteffekt1: x
lichteffekt2: A A
lichteffekt3: B

als beispiel.
so könntest du auch einen editor bauen der dieses format dann abspeichert.
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Sound to light

Beitrag von DarkSoul »

Musst du das nur einmal machen und sind es nur wenige Punkte?

Dann nimm einfach Audacity:
1. Audio laden
2. Label-Track erstellen und dort die gewünschten Markierungen setzen
3. Label-Track exportieren
4. Die generierte Textdatei verwenden

Möchtest du ein Tool dafür programmieren?

Du könntest die Waveform auf ein Bild ausrendern. (So ähnlich, wie Audacity das macht, nur nicht so exakt, weil du willst den Ton ja nicht bearbeiten).

Das geht ganz leicht:

1. Du schaust, welche Samplerate die WAV hat (sagen wir 44100Hz)

2. Du erstellst ein Image (CreateImage()), das so etwa 512 Pixel hoch ist und so breit, wie 100 * SpieldauerInSekunden

3. Dann baust du eine Schleife, die folgendes kann:
Du liest 441 Samples aus einem der Tonkanäle der Datei (also 1/100tel der Samplerate, Mono reicht ja für die Darstellung).
Du ermittelst aus diesen einmal den positivsten Wert und einmal den negativsten Wert. Die Einzelsamples kannst du jetzt schon verwerfen
Jetzt malst du eine Line() von der Bildmitte nach oben und eine Line() von der Bildmitte nach unten(). Die Länge der Linie so nehmen, wie die ermittelten positiven und negativen "Extrempunkte"

Mit jedem Durchlauf renderst du somit Linie für Line von links nach rechts die Waveform aus. Ich hoffe, du verstehst ungefähr, wie ich meine.

4. Das Image kannst du jetzt in ein CanvasGadget() rendern (oder auch von vornherein dort rendern). Wirst mit Scrollbar arbeiten müssen, da das ganze ziemlich breit wird. Musst bisschen mit der Breite experimentieren (ich weiß ja nicht, auf wie viele ms genau du das brauchst)

Wenn du jetzt mit Klick-Events im CanvasGadget arbeitest, kannst du anhand der Mauskoordinate vom Klickevent ermitteln, welche Position angeklickt wurde (Ein Pixel = 10ms).

An der Waveform kann man Musik gut ablesen. Eine "Zacke" ist immer eine Note.

Du könntest das ganze noch ausschmücken:
- Du baust einfach noch die Features ein, die du brauchst
- Man kann die Datei von der markierten Position aus abspielen bzw. es wird angezeigt, wo man gerade ist (So wie bei Audacity)
- Du kannst versuchen, die BPM (Beats pro Minute) zu ermitteln und somit das ganze zu automatisieren (Wie eine Lichtorgel).
Bild
Antworten