Brauche Hilfe bei Audio Processing Programmierung

InsaneAC

InsaneAC

Registriert
17.03.11
Beiträge
141
Reaktionen
38
Punkte
270
Moin moin!

Ich habe eine spezielle Frage: Und zwar möchte ich für ein selbst programmiertes Spiel eine Spielsteuerung bauen, die per Lautstärke funktioniert. Konkret möchte ich zwei Mikrofone am Rechner anschließen und deren Signale dann einlesen. Ich brauche erst mal nur den Pegel, später vielleicht auch die Frequenz. Die eingelesenen Signale möchte ich dann in einfach zu verarbeitende Werte umwandeln, also zum Beispiel irgendwas zwischen 0 und 1.
Ich bewege mich gerade im C++-Umfeld und bin studierter Informatiker, bin aber in der Audioprogrammierung selbst noch sehr neu, es scheitert also gerade nicht an der Programmierung an sich, sondern an der Auswahl der richtigen Library bzw des richtigen Frameworks. Ich möchte jetzt nicht unbedingt so mega low levelig schreiben, ein passendes Framework wäre also schick, weil ich wie gesagt nicht vorhabe eine performante DAW oder so zu bauen, sondern nur die eingehenden Signale verarbeiten will.^^
Daher eine generelle Frage: Kennt ihr ein relativ leicht zu benutzendes Framework, das mir die Arbeit da erleichtert? Gerne auch mit integrierter Frequenzanalyse, muss aber nicht sein.

Ich habe es schon mit OpenAL probiert, aber da komme ich zum Beispiel nicht an die beiden Signale einzeln heran, sondern bekomme nur ein Gesamtsignal aus meiner Soundkarte. Und sowas wie JACK Audio erscheint mir sehr overkillig zu sein.^^
Zur Not geht das auch in Java, obwohl C/C++ schon optimal wäre, damit ich keine extra Schnittstelle bauen muss.

Schon mal vielen Dank im Voraus! :)
 
Hi,

kannst dir ja mal JUCE ansehen, das ist ziemlicher Industrie-Standard bei Audio-/plugin-Programmierung.

https://www.juce.com/

Kostet aber bzw. ist mit Einschränkungen verbunden, wenn du nicht GPL / open source machen willst.
https://www.juce.com/get-juce

Bei der JUCE demo app ist sogar schon 'Recording' Beispiel-code dabei (was ja im Prinzip das ist, was du machen willst, wenn ich's richtig verstanden habe, also das Einlesen ?)

9CHHZIs.jpg


edit::

Evtl. auch ineterssant: WDL-OL bzw. IPlug-Youlean

https://github.com/olilarkin/wdl-ol
https://github.com/Youlean/IPlug-Youlean

Kostenlos und freiere Lizenz, aber keine Dokumentation, nur Forum:
https://forum.cockos.com/showthread.php?t=91811
https://forum.cockos.com/showthread.php?t=189266

JUCE dagegen hat ne sehr gute doc:
https://www.juce.com/doc/classes
 
Zuletzt bearbeitet:
aber da komme ich zum Beispiel nicht an die beiden Signale einzeln heran, sondern bekomme nur ein Gesamtsignal aus meiner Soundkarte.

Ohne mich auch nur ansatzweise mit Programmierung auszukennen, kann ich mir vorstellen, dass das schwierig werden könnte, da Windows nur Stereo-Signalwege kennt.
 
Natürlich kann man innerhalb eines Programs auf die samples von linken und rechten Kanal getrennt zugreifen, zumindest mit den genannten frameworks.

Sollte aber bei OpenAl auch gehen würde ich annehmen, bei kurzem Blick ins manual.
Stereo data is expressed, in interleaved format, left channel first.

Bei den frameworks ist es so, dass man die samples im buffer iteriert.
Beispiel: simple Lautstärkeregelung für links und rechts getrennt:

// inBufferLeft, inBufferRight: pointer to input buffer, outBufferLeft, outBufferRight: pointer to output buffer
for (int sample = 0; sample < blocksize; ++sample, ++inBufferLeft, ++inBufferRight, ++outBufferLeft, ++outBufferRight)
{
*outBufferLeft = *inBufferLeft * gainLeft;
*outBufferRight = *inBufferRight * gainRight;
}

Da liegen l / r aber als eigene Kanäle vor, bei interleaved müsstest du dann vermutlich sowas wie
left = samples 1,3,5...
right = samples 2,4,6...

machen.

Vielleicht hilft das schon weiter ?
 
Zuletzt bearbeitet:
Ohne mich auch nur ansatzweise mit Programmierung auszukennen, kann ich mir vorstellen, dass das schwierig werden könnte, da Windows nur Stereo-Signalwege kennt.

Ja gut, unter Windows direkt, ja. Aber der ASIO Treiber mogelt sich ja zum Beispiel auch am Betriebssystem vorbei. Sonst würden DAWs doch auch nicht so richtig unter Windows funktionieren. Ich hatte halt gehofft, dass es ein schickes Framework gibt, das einen ähnlichen Weg geht.^^
 
@suboptional: Die Frameworks schaue ich mir mal an, vielen lieben Dank! :)

Ah, ich sehe auch gerade, dass es wohl doch in OpenAL möglich zu sein scheint, durch die angeschlossenen Devices durch zu iterieren und sich damit theoretisch alle Eingänge rauszusuchen. Vielleicht geht es doch. Zur Not probier ich es tatsächlich mal über das Stereosignal. Mehr als zwei brauche ich ja theoretisch für den Anfang nicht. :)
 
Mal so gefragt : in welchem framework hattest du denn vor das Spiel zu schreiben? SDL sollte diese Aufgabe auch erledigen können.
 
Mal so gefragt : in welchem framework hattest du denn vor das Spiel zu schreiben? SDL sollte diese Aufgabe auch erledigen können.

Ich wollte es mit der Godot Engine schreiben, da dort C++ Plugins recht simpel einzubauen sind.

SDL wäre auch eine Möglichkeit. Momentan schaue ich mir auch noch etwas tiefer liegende Frameworks an, wie etwa libsoundio.
 

Ähnliche Themen

Bill_Presston
    • Danke
  • Artikel
Antworten
1
Aufrufe
22K
Kuno
Kuno
A
Antworten
15
Aufrufe
4K
A-jay
A
M
  • Artikel
Antworten
1
Aufrufe
30K
gebjoernt
G

Oft gelesene Themen

Zurück
Oben