Audio-Programmierung unter OpenBSD

Baseballbatboy

Cpt. Baseballbatboy
Moin zusammen,

ich entwickele seit ein paar Wochen ein open-source Lautsprecher-Messprogramm (bin E-Techniker mit persönlichem Schwerpunkt in der HiFI-Ecke), welches vor allem auf "alternativen" Betriebssystemene laufen soll - also nicht nur unter Windows, wie die restlichen für teuer Geld verfügbaren Programme. Das Projekt ist bei BERLIOS gehostet: http://esweep.berlios.de *
Entschuldigt die fehlende Webseite, ich hoffe das kommt noch. Wer sich für die Technik dahinter interessiert, kann einen Blick in den zugehörigen Thread im Hifi-Forum werfen: http://www.hifi-forum.de/index.php?action=browseT&forum_id=137&thread=49

Bisher läuft es nur unter FreeBSD mit Hilfe von Portaudio, ich hatte noch keinen Nerv es unter Windows zu aktivieren. Linux gibt es hier bei mir nicht, vielleicht findet sich ja wer der das darauf portiert, sollte nicht kompliziert sein.

Aber bei mir läuft OpenBSD, auf meinem Tablet-PC (aufmerksame Forum-Leser erinnern sich). Und genau auf den würde ich das Programm gerne portiert bekommen, um ihn als mobile Messstation zu missbrauchen. Denn man mag es kaum glauben, das Ding hat einen richtig guten Soundchip drin, zumindest im Hörtest macht er meine Soundkarte im großen dicken Hauptrechner platt.

Doch: es klappt nicht.

Erst habe ich es mit Portaudio probiert, auch wenn es keine Version dafür gibt. Hab mich ein wenig daran versucht, aber ich habe, ganz ehrlich gesagt, Null Ahnung vom Thread-Programmieren und habe deswegen ein wenig im Nebel gestochert.

Dann habe ich die native Audio-Schnittstelle von OpenBSD ausprobiert. Die ist wirklich klasse, die bietet viel mehr Möglichkeiten als OSS, das unter FreeBSD läuft (zumindest die API ist gleich, ist das wirklcih OSS?). Nur funktioniert es bei mir nicht. Nur knacken, aber ein cat /dev/urandom > /dev/audio brachte herrliches Rauschen hervor.

Nach diesem erfolglosem Versuch wandte ich mich ARTS zu, weil bei mir die KDE als Desktop läuft - ich wollte wenigstens mal einen Ton herausbekommen. Ging auch nicht; kompilieren ja, ausführen nein, weil er mir etliche "unresolved symbols" aus mir völlig unbekannten Bibliotheken um die Ohren schmiss.

Nungut, ARTS habe ich vorerst an die Seite gelegt, es benutzt ja auch nicht jeder KDE unter OpenBSD. Also wieder die native Schnittstelle.

Da habe ich alle mögliche gelesen: die man-page, die kurze Anleitung zur Portierung von Audio-Programmen ( http://www.openbsd.org/audio-port.html ), und etliches anderes.

Und nun steh da wie ein Tor, weiß so viel wie nie zuvor, aber der Affe spricht nicht. Bullshit.

Ich hänge einfach mal die wichtigen Dateien an (sound_openbsd.h und sound_openbsd.c) und hoffe, dass mir irgendwer laut ins Ohr flüster, was ich falsch mache**.

Gruß
Baseballbatboy

* hat vielleicht wer Lust mitzumachen?

** gegen andere Einflüsterungen was meinen Programmierstil oder allgemeine Verbesserungen angeht habe ich ebenfalls nichts einzuwenden; bin schließlich kein Profi
 

Anhänge

  • sound_openbsd.h.txt
    2 KB · Aufrufe: 587
  • sound_openbsd.c.txt
    6 KB · Aufrufe: 422
Zuletzt bearbeitet:
Doch: es klappt nicht.

Only failure makes us experts ([tm] art@) :>

Sprich mal jason@ bzw espie@ an. Jason hat's mehr auf der Kernel/Treiber
Seite, Marc Espie mehr vom Userland her. Und das sieht mir mehr nach Userland
aus. Aber schreib mal beide an - ggfs. koennen die Dir auch weitere contacts
vermitteln. Audio-Coding ist sonst nicht so meine Welt :)

Keep us posted. Ich find's gut, wenn sich mal mehr Leute um Audio in OpenBSD
kuemmern.
 
Nun ist es offiziell: ich bin ein Vollidiot.

Man sollte natürlich, bevor man die in double erzeugten Samples auf short castet, vorher passend skalieren, sonst hat man nur sagenhafte Stille.

Schön dämlich.

Gruß
Baseballbatboy
 
Nun, ein Ton kommt heraus. Aber an der Aufnahme hapert es.

Erstmal musste ich feststellen, dass KMix nicht viel taugt, ich muss von Hand (mixerctl) auf das richtige Aufnahmegerät stellen (Kabelarm: mixerout).

Die Aufnahme ist dann aber abgehackt, also mal nimmt er was auf, mal nicht.

Ich habe den Verdacht, dass ein

Code:
read(...);
write(...);

direkt aufeinanderfolgend einfach nicht taugt. Mit OSS ging das aber einwandfrei.

Hat da jemand einen Vorschlag?

Eventuell muss ich mich wohl doch noch an die Kavallerie (jason@ espie@) wenden.

Gruß
Baseballbatboy
 
Zuletzt bearbeitet:
Nach nem knappen Monat bin ich dazu gekommen, wieder etwas gezielter an dem Projekt zu arbeiten. Inzwischen hatte ich auch auf einem alten Rechner OpenBSD installiert. In den habe ich heute mal meine Großrechner-Soundkarte eingebaut und mit dem Programm getestet -> es geht!

Ich bekam, zumindest als Textdatei, einen schönen Frequenzgang geliefert, der so aussah wie er sollte. Auch die Verzerrungen lagen auf dem bekannten Niveau.

Das bedeutet: die Soundkarte in meinem Tablet, so gut die Ausgabeseite auch ist, kann kein full-duplex, obwohl sie das von sich behauptet. Frechheit! ;)

Vielleicht werde ich mir mal die Mobile Pre USB von M-Audio zulegen, hab mich drüber informiert und die scheint mit OpenBSD sehr gut zu laufen. Leider auch ein bisschen teuer, 160¬ sind nich wenig.

Gruß
Baseballbatboy
 
Moin,

zwecks Diplomarbeit musste ich die Arbeit an diesem Projekt etwas zurückstellen, aber in den letzten Tagen ist eine Menge passiert. Und vielleicht ist das ja für den einen oder anderen interessant.

Ich habe ein Bedienkonzept erarbeitet, dass sich auf einfache Skriptsteuerung stützt. Ein GUI ist nicht vorgesehen. Dazu ist das Programm in mehrere Teile gespalten worden, die jeweils spezielle Funktionen übernehmen. Die Darstellung der Daten übernimmt Gnuplot (oder ein ähnliches Plotprogramm).

Was besonders für dieses Forum interessant sein dürfte ist, dass die Entwicklung fast komplett unter OpenBSD abläuft und somit dieses Betriebssystem als Referenz gilt. Erst wenn eine Funktion da läuft, werden andere OS berücksichtigt. Wobei das meiste sehr plattformunabhängig geschrieben ist, also leicht zu portieren ist.

Der aktuelle CVS-Tree kompiliert ohne weiteres unter OpenBSD, Linux (getestet mit Ubuntu) und Windows (bei den letzten beiden das richtige Makefile vorausgesetzt, ich habe erstmal auf autoconf verzichtet).

Vermutlich lässt sich das Programm (oder besser: das gesamte System, es sind mehrere Programme) auch unter NetBSD (die Schnittstellen sind zumindest identisch zu OpenBSD), FreeBSD und MacOS bauen. Für sowohl die letzten beiden als auch Windows und Linux wird portaudio benötigt. Windows ist ein wenig komplizierter, wer es sich da unbedingt kompilieren will, bitte mit mir Rücksprache halten. Ich versuche, ständig ein aktuelles Binary bereitzustellen.

Eine Windowsversion mit Beispielskript lässt sich hier herunterladen (93kB): http://141.30.146.61/skvf/speaker/messprogramm/

Eine kurze Anleitung zur Installation ist hier zu finden: http://www.hifi-forum.de/index.php?action=browseT&forum_id=137&thread=49&postID=93#93

Ein paar Beiträge später eine etwas detailliertere Kurzanleitung zu den einzelnen Programmen: http://www.hifi-forum.de/index.php?action=browseT&forum_id=137&thread=49&postID=96#96

Ich würde mich über etwas Feedback freuen.

Gruß
Baseballbatboy
 
Moin,

heute habe ich eine neue Version dieses Programms veröffentlicht. Die wichtigste Neuerung ist der Umstieg auf Tcl als Skriptsprache. Ich biete lediglich ein Modul für Tcl an.

Hier gibt es nähere Informationen: http://esweep.berlios.de

Die Anleitung ist noch nicht berauschend, leider bin ich ein wenig unter Zeitdruck geraten. Glaubt mir, das wurmt mich am meisten. Wer fragen hat möge sich direkt an mich wenden.

Gruß
Baseballbatboy
 
Zurück
Oben