Stereo "Tongenerator" für Linux?


13

Gibt es so etwas wie einen Stereo-Klangerzeuger (linker und rechter Kanal getrennt) für Linux? Hier können Sie Lautstärke und Tonhöhe für jeden Kanal einstellen und vorzugsweise auch die Wellenform (Sinus, Quadrat, Sägezahn, ...) einstellen und einen Kanal invertieren (im Gegensatz zum anderen).

Wenn nicht, Ideen für einen guten Ort, um einen zu machen? Ich denke, das einfachste wäre, vorhandene Programme wie Synthesizer anzupassen ... Aber wenn das schlecht funktioniert, gibt es Bibliotheken (wie SDL?), Die als Basis für ein solches Programm verwendet werden können?


Möglicherweise können Sie es mit sox erledigen.
Renan

Antworten:


15

Es hört sich so an, als würden Sie nach Audacity suchen einem plattformübergreifenden Open-Source-Audio-Editor. Eine der Funktionen ist, dass Sie Töne erzeugen können. Es ist ein mehrspuriger Audio-Editor, mit dem Sie problemlos einen Stereoton erstellen können.

Unter dem GenerateMenü können Sie Sinus-, Sägezahn- und Rechteckwellenformtöne mit beliebiger Frequenz, Amplitude und Länge erstellen, ohne dass zusätzliche Eingabedateien aufgezeichnet oder benötigt werden.


Aber kann es Töne "aus dem Nichts" erzeugen? Und ich habe nicht die Absicht, irgendetwas aufzunehmen und wiederzugeben, sondern nur zwei leicht unterschiedliche Töne (einen für jeden Kanal) "für die Ewigkeit" zu erzeugen.
Baard Kopperud

1
@BaardKopperud Ja, ich habe meine Antwort aktualisiert, um dies zu klären.
J883376

8

Vielleicht schaust du dir an speaker-test, welche (auf einem Arch-Rechner) ich im alsa-utils-Paket finde.

speaker-test -c2 -t sinelief von einem xterm, gab mir eine 440 Hz Sinuswelle für jeweils ca. 6 Sekunden, abwechselnd linken und rechten Lautsprecher. Im xterm gab es einige Informationen darüber, welchen Lautsprecher es zu verwenden glaubte.

Laut Manpage kann es Sinuswellen beliebiger Frequenz und rosa Rauschen erzeugen.


1
speaker-test -c2 -t sine -f 440wird Ihr Beispiel durch Angabe des Frequenzparameters ergänzen. Danke.
Christian

4

Das siggenProgramm sollte den Trick machen.

Screenshot von Siggen

Es hat zwei Kanäle mit unabhängigen Signalen und einer Phase zwischen ihnen. Jeder Kanal kann diese Signaltypen ausführen:

  • Sinus
  • Kosinus
  • Platz
  • Dreieck
  • Sägezahn
  • Impuls
  • Lärm

Sie können es im Stereomodus wie folgt ausführen:

$ siggen -2

Da /dev/dspes in den meisten modernen Linux-Distributionen veraltet ist, müssen Sie wahrscheinlich eine Kompatibilitätsbibliothek installieren. Installieren Sie das Paket auf Debian-basierten Distributionenalsa-oss und führen Sie es folgendermaßen aus:

$ aoss siggen -2

Sie können es auch mit dem PulseAudio OSS Wrapper versuchen:

$ padsp siggen -2

Ich erhalte: [siggen] Eingabe / Ausgabe-Fehler: / dev / dsp
Ole Tange

Hm. Hilft der PulseAudio OSS-Wrapper überhaupt?
Nathaniel M. Beaver

Ja. Es funktionierte.
Ole Tange

1

Das saugns- Programm kann das auch. (Es handelt sich um einen Befehlszeilen-Audiogenerator, der (derzeit) 8 Wellentypen und FM / PM / AM-Modulationstechniken unterstützt.)

Um zwei in Stereo getrennte 100-Hz-Wellen zu erzeugen, eine mit Sinus und eine mit Dreieck sowie eine mit invertierter Amplitude, kann das folgende Skript in eine Datei eingefügt und durch das Programm ausgeführt werden (wie in ./saugns filename):

Osin f100 a0.5 t2 P0
Otri f100 a(-0.5) t2 P1

Die ts geben die Zeit in Sekunden an.

Die Ps sind für das Schwenken pro Stimme (0,0 = links, 1,0 = rechts). Dies kann zu etwas anderem als Pin zukünftigen Versionen geändert werden ; Die README-Datei beschreibt die aktuelle Syntax.

Edit: Ich bin in der Tat der Entwickler des Programms.

Eine alternative Möglichkeit, die Amplitude umzudrehen (für einige Wellentypen, z. B. sinaber nicht saw), besteht darin, die Phase mit einem Kleinbuchstaben einzustellen p. Das Hinzufügen p0.5setzt die Phase auf 50% des Wellenzyklus (negative Hälfte). Da es keinen benannten Cosinustyp gibt, p0.25können Sie Sinus in Cosinus (oder p0.75für negativen Cosinus) umwandeln.


Hallo Joel. Willkommen bei Unix & Linux . Ich habe Ihre Antwort positiv bewertet, da es ein großartiger erster Beitrag ist. Ich dachte, ich würde erwähnen, dass es üblich ist, diese Informationen offenzulegen, wenn Sie ein Projekt betreuen oder entwickeln. Unix.stackexchange.com/help/promotion ist für die GPL-Software zwar kein wirkliches Problem, es lohnt sich jedoch, sich darüber im Klaren zu sein. Für nützliche Free / Libre-Software würde ich mir vorstellen, dass Sie auf dieser Website mit größerer Wahrscheinlichkeit aufgerüstet werden, wenn die Benutzer dies wissen Sie sind einer der Entwickler hinter dem Projekt.
Anthony G - Gerechtigkeit für Monica

1

ffmpeg

ffmpeg kann es wie gewohnt.

Erstellen Sie eine 5-Sekunden-Mono-1000-Hz-Sinus-Sounddatei out.wav:

sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" out.wav

Stereo statt:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 out.wav

Die Datei wird 2x so groß sein und ffprobewird sagen, dass es hat2 channels statt 1 channel.

Spielen Sie den Ton 5 Sekunden lang ab, ohne eine Datei zu erstellen:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

Spiele für immer, bis du verrückt wirst:

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

Dokumentation:

Die anderen Abschnitt Sunder Audio Quellen dokumentieren andere nützliche Klangerzeugungsalgorithmen zusätzlich zu sine, zum Beispiel:

  • anoisesrc: Geräusche verschiedener Farben, z. B. Weiß, Rosa, Braun
  • aevalsrc Nimmt beliebige mathematische Ausdrücke an und sollte daher in der Lage sein, dreieckige Wellenformen zu erzeugen (TODO-Ausdruck)

Literaturverzeichnis:

Getestet in Ubuntu 18.04, ffmpeg 3.4.6.

Beispiel für minimale C-Audioerzeugung ohne zusätzliche Bibliotheken

Nur zum Spaß: /programming/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894



0

Mit SoX können Sie ganz einfach Töne synthetisieren. Es gab einige Stolpersteine, aber ich konnte es schließlich herausfinden.

Ich hatte Probleme, SoX mit PulseAudio zu verbinden, sodass ich nur soxRohdaten einspeisepaplay .

Die Pipeline ist mühsam, daher habe ich ein Skript erstellt:

$ cat sox-paplay
#!/bin/bash
: ${HZ:=44100}
: ${NCHAN:=6}
: ${SINK:=mysink}
sox -c $NCHAN -n -t raw -r $HZ -L -b 16 - "$@" | paplay --no-remix --no-remap --raw -v -p --rate $HZ -d $SINK --channels $NCHAN

z.B

sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0

Das remix Effekt wird nur verwendet, um das Ergebnis an einen bestimmten Kanal zu senden. Es ist viel leistungsfähiger, aber wir verwenden hier nur die grundlegenden Funktionen. In diesem Beispiel haben wir ein Sechs-Kanal-Gerät und wir senden einen Ton an den dritten Kanal.

Ich habe ursprünglich ein ALSA-Gerät erstellt, das das PulseAudio-Gerät umhüllt, aber dann stellte ich fest, dass es unmöglich ist, die Kanalzuordnung mit ALSA zu steuern, und daher wurden zufällige Kanäle gemischt, je nachdem, wie sich meine benutzerdefinierte Kanalzuordnung von der ALSA-Standardeinstellung unterschied. Aus diesem Grund habe ich --no-remix --no-remapin paplayoben; Ich möchte nur die Reihenfolge der Rohkanäle für den Befehl sox.

Ich wünschte, Audiomaterial unter Linux hätte eine bessere Dokumentation und Fehlerberichterstattung.

Möglicherweise interessiert Sie eine Antwort, die ich kürzlich gepostet habe und die zeigt, wie Sie den PulseAudio Equalizer über die Befehlszeile einstellen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.