Letzte Woche habe ich
darüber gesprochen, wie Yandex.Stations per Sound aktiviert werden. Es stellte sich heraus, dass das WiFi-Passwort im Klartext übertragen wird. Ich fragte mich, warum es notwendig war, die Aktivierung auf diese Weise und nicht auf eine debuggte Weise durchzuführen.
Infolgedessen kam ich zu dem Schluss, dass die Show in diesem Prozess wichtig ist. Was passiert jedoch, wenn wir ein Datenübertragungsprotokoll erstellen, das sich vollständig auf die Benutzererfahrung konzentriert? So entstand das Octave-Projekt - für die melodische Datenübertragung.

Unter dem Schnitt werde ich Ihnen erzählen, wie der Prototyp hergestellt wurde, und einen Link zur Demo geben. Sie können hören, wie jede Nachricht klingt :)
Zusammenfassung des vorherigen Artikels
Ich habe den Ton aufgenommen, mit dem die Station aktiviert wird, die Visualisierung der sich bewegenden Fourier-Transformation betrachtet und festgestellt, wie das Signal angeordnet ist und wo das WLAN-Passwort im Klartext liegt.

Es wird eine Hex-Zeichenfolge übertragen, bei der für jedes Zeichen 0 - F eine Frequenz von 1 kHz - 4,6 kHz mit einem Schritt von 240 Hz vorliegt. Ich fragte mich, warum es notwendig war, die Aktivierung auf diese Weise und nicht über Bluetooth durchzuführen, wie zum Beispiel bei chinesischen Staubsaugerrobotern, und kam zu dem Schluss, dass in diesem Fall Effizienz wichtiger ist als Sicherheit oder Geschwindigkeit.
Inspiration
Wirklich! Schließlich ist das Kommunikationsprotokoll immer ein Kompromiss zwischen Reichweite, Geschwindigkeit und Zuverlässigkeit. Was aber, wenn all diese Eigenschaften in den Hintergrund treten und der entscheidende Faktor der Eindrucksfaktor für den Benutzer ist?
Ich mochte die einfache Idee der Yandex-Entwickler, wie ein Hammer, 16 Frequenzen auszuwählen: eine für jedes Hex-Symbol. Und ich hatte auch einen Signalempfänger aus einer früheren Studie, also beschloss ich, diese Idee zu entwickeln und nicht alles von Grund auf neu zu erfinden.
Zwei Verbesserungen
Phasenunterbrechung entfernen
Erstens war ich bei der Analyse des Aktivierungssignals der Station durch Rauschen bei allen Frequenzen zum Zeitpunkt des Umschaltens des Symbols verwirrt. Dies sind die vertikalen Balken im Spektrogramm:

In diesen Momenten sind Klicks zu hören. Der Grund für diesen Effekt ist eine Phasenlücke zwischen den Zeichen. Tatsache ist, dass die Länge eines Symbols nicht zu einer ganzzahligen Anzahl von Schallschwingungsperioden passt. Daher ändert sich zum Zeitpunkt des Umschaltens der Frequenz die Signalamplitude dramatisch. Ungefähr so:

Es gibt verschiedene Methoden im Radio, um diesen Effekt zu vermeiden. Ich habe mich entschlossen, die Amplitude des Signals zum Zeitpunkt des Umschaltens der Frequenz sanft zu reduzieren und dann sanft aufzubauen - es klingt weicher. Es sieht so aus:

Vielleicht waren die Klicks kein Bug, sondern Features und gaben einen "futuristischeren" Sound, aber ich mag es besser ohne sie :)
Musik hinzufügen
Wir übertragen Daten durch Ton. Warum nicht dafür Notenfrequenzen verwenden? Ich habe verschiedene Optionen ausprobiert und am Ende 16 Noten ausgewählt, beginnend mit Vor der ersten Oktave.

Wenn Sie höhere Noten verwenden, fühlen sich Ihre Ohren weniger wohl. Und tiefere Noten werden aufgrund der Eigenschaften des Frequenzgangs von Lautsprechern und Mikrofonen schlechter übertragen. Außerdem sind die Frequenzen tiefer Töne näher beieinander, was sich auf den Empfang auswirkt.
Es stellte sich eine Art Musikfrequenzmodulation heraus. Nennen wir es "Croup-Modulation" :)
Wir starten
Wie klingt das? Damit Sie es direkt im Browser versuchen können, habe ich den Krup-modulierten Sender von Python auf js umgeschrieben und eine einfache Oberfläche erstellt.
Ich nutze diese Gelegenheit, um Hallo zu sagen:
Ich benutze utf-8, was bedeutet, dass kyrillische Zeichen und sogar Emojis übertragen werden können. Pakete mit ihnen sind länger, da jedes dieser Zeichen mehr als 1 Byte hat.
Es klingt etwas weniger angenehm als Latein, da jedes kyrillische Zeichen dasselbe Adressbyte enthält. Aber immer noch interessant :)
Sie können
hier beliebige Sätze ausprobieren. (Duplizieren am Ende des Artikels)
Aber was ist mit dem Empfänger?
Natürlich macht es Spaß, zufällige Töne basierend auf Text zu hören, aber die Datenübertragung kann nur aufgerufen werden, wenn das Signal empfangen, demoduliert und decodiert wird.
Ich habe einen Prototyp eines Python-Empfängers als Proof of Concept erstellt. So funktioniert es:
Sie sehen, die Datenübertragung erfolgt wie durch Notizen! Natürlich ist von einer Produktion derzeit keine Rede. Es gibt keine Synchronisation, fehlerkorrigierende Codierung und Integritätskontrolle. Aber wenn die Community Interesse zeigt und einige Optionen für den praktischen Gebrauch bietet, kann ich die oben genannten Funktionen implementieren und in eine normale Bibliothek einbinden :)
Zusammenfassend
Es war ein interessantes Projekt für ein paar Abende mit einem ziemlich spektakulären Ergebnis. Eine solche Datenübertragung kann beispielsweise als „Sound-QR-Code“ verwendet werden, um ein Konto von einem Telefon auf eine Website usw. zu teilen.
Alternativ können Sie damit Klingeltöne für Marken erstellen. Hier
klingt zum Beispiel
nach habr .
Alle aktuellen Entwicklungen sind auf dem
Github verfügbar - Sie können versuchen, das Projekt selbst zu entwickeln.
Duplizieren Sie den
Link zur Demo, die im Browser ausgeführt wird.Danke fürs Lesen! Ich hoffe du warst interessiert.
Viel Glück!