Archiv verlassen und diese Seite im Standarddesign anzeigen : Erfahrungsbericht 8-fach FIR-Weiche
FoLLgoTT
24.07.2015, 14:29
Nach einigen Experimenten mit dem MiniSharc habe ich mich dazu entschlossen, eine FIR-Aktivweiche auf PC-Basis aufzubauen. Es gibt einige Dinge, die mich an dem MiniSharc stören. Z.B. ist die Filterlänge mit 1024 (bzw. 2048) Taps ziemlich gering. Im Bass reicht das für umfangreiche Korrekturen nicht aus. Es gibt stattdessen allerdings die IIR-Sektion, die das übernehmen kann, während man mit FIR nur die Trennfrequenzen realisiert.
Als Basis für meinen Falt-PC kommen ein passives MiniITX-Board mit fest verbautem 4-Kern-Celeron, eine 4 GB SSD und ein sehr leises Netzteil zum Einsatz. Das Audio Interface sollte unbedingt intern sein, da Stabilität und Robustheit für mich sehr weit oben steht. Ein USB-Interface hat immer den Nachteil, dass man es herausziehen kann (Kinder!) und es meist eine externe Stromversorgung benötigt. Das fällt bei einer PCIe-Karte weg.
http://geizhals.at/p/886451.jpg
Ich habe viel abgewogen und habe mich schlussendlich für die Xonar Essence STX II 7.1 (https://www.asus.com/de/Sound_Cards/Essence_STX_II_71/) entschieden. Diese Soundkarte besitzt 8 analoge Ausgänge mit sehr hochwertigen Wandlern. Leider hat sie keinen digitalen Eingang, aber das Abspielen kann der PC auch selbst übernehmen, so dass gar keine A/D-Wandlung mehr stattfindet. Leider sind die Ausgänge nicht symmetrisch ausgeführt, was aber kein großes Manko ist.
Diese Karte ist voll auf Hifi getrimmt mit Jitter-Optimierung, Abschirmung und eigener Stromversorgung für die Wandler (die man theoretisch nach außen legen könnte). Beim Aktivieren der Karte klicken sogar Relais. ;)
Und sie ist mit ca. 240 € deutlich günstiger als professionelle Audio Interfaces.
https://www.asus.com/media/global/products/ud8z2wTATn7tlB1F/P_setting_fff_1_90_end_500.png
Als Betriebssystem habe ich Debian Linux ohne grafische Oberfläche installiert, auf dem MPD und Brutefir laufen. Die Xonar Essence STX II wird erst ab Kernel 3.18 unterstützt, also musste ich auf Stretch (Testing) aktualisieren. Ab da wurde die Karte problemlos erkannt und der ALSA-Mixer bietet alle Einstellungen, die man benötigt.
Achtung: das Erweiterungsboard Xonar H6 besitzt andere Wandler als die Hauptplatine. Dadurch entsteht eine Verzögerung zwischen den ersten beiden und den anderen sechs Kanälen. Die Wandler der Hauptplatine können aber problemlos auf die H6 gelötet werden. Siehe hier (http://www.visaton.de/vb/showthread.php?t=26329).
Als Player benutze ich aktuell MPD, das Brutefir direkt über die Pipe ansteuert. MPD kann z.B. via App im Smartphone gesteuert werden. Sehr komfortabel. Die Lautstärkeregelung nehme ich im Moment auch digital vor.
Im Moment falte ich 8 Kanäle mit Filterlängen von jeweils 65534 und 4 Partitionen. Die CPU-Auslastung ist ein Witz, da geht also noch deutlich mehr. Die Partitionierung ist dafür da, die Latenzen gering zu halten. Für das reine Musikabspielen ist das eigentlich egal, nervt nur beim Springen ein bisschen.
Die Filter habe ich mit dem kosten losen RePhase generiert. Zum Messen benutze ich die beiden Eingangskanäle der Xonar. Das klappt problemlos und die Latenz ist für ARTA kein Problem.
Die ganze Kiste ist im Grunde eine schöne Blackbox. Außer einem Netzwerkkabel brauche ich keine weiteren Anschlüsse. Das Ding ist in 30 s betriebsbereit und fährt in 4 s herunter, wenn man den Einschalter drückt. Sehr problemlos. Und hören tut man das Netzteil im Betrieb wirklich gar nicht. Das ist wirklich extrem leise.
MiniSharc:
- S/R-Abstand: 112 dB
- Filterlänge: 1024 / 2048
- Preis: ca. 600 €
- einfach zu bedienende grafische Oberfläche
Falt-PC:
- S/R-Abstand: 124 dB / 120 dB
- Filterlänge: 262.144
- Preis: ca. 400 €
- nur Konsole, Einrichtungsaufaufwand notwendig
Blaubeere85
24.07.2015, 15:04
Hi!
Das ganze kommt mir bekannt vor :)
Ich habe ebenfalls den Sharc. Benutze ihn jetzt aber für kleine aktive 2 wege Bluetoothlautsprecher. Als Eingang habe ich diese Platine die dann in den Spdif eingang des Sharcs geht.
http://www.ebay.de/itm/TOSLINK-Optical-Input-to-Coaxial-S-PDIF-Module-/330386501621
Als DA Wandler benutze ich diese
http://www.ebay.de/itm/DAC-24192-ULN-24Bit-192KHz-DAC-I2S-Input-Ultra-Low-Noise-Regulator-Circuit-/231052067747
Für die Filter benutze ich ebenfalls Rephase.
Auf meinem Windows HtPC beschäftige ich mich gerade mit JRiver, was einen super Convolver enthält.
Das schöne ist, dass ich das auch für Videos und Filme verwenden kann da Jriver automatisch das Bild verzögert.
Habe ebenfalls eine Soundkarte drinn. Allerdings nur die Asus Xonar DX weil das die einzige im Lowprofile war die reingepasst hat.
Aber vom Klang kann ich da auch nichts schlechtes finden.
CPU ist der kleinste Hasswell I3 der auch die Grafik ausgibt.
Über Wasapi kann ich dann auch externe Quellen Falten.
Leider habe ich es noch nicht geschafft Internetstreams wie z.B. Netflix einzubinden um dort auch das Bild zu verzögern.
An Linux und Brutefir habe ich mich noch nicht rangetraut.
Prozessorlast bei Jriver in Stereo mit Faltung und Bild ca 15 Prozent. was ganz OK ist finde ich.
Finde dein Projekt sehr interessant.
Viele Grüße
Stefan
Hehe,
da verstecken sich die heimlichen Falter ;)
Setup:
Atom D525 mit Delta 1010LT, schnödes Win mit Acourate Convolver.
Linux ist nicht mein Ding :D
Externe Quelle wird 8-kanalig gefaltet.
Proziauslastung ist hart an der Grenze, daher folgt dann hier auch eine Veränderung...
Sehr interessantes Projekt :)
Ich bin gespannt wie es weiter geht, etwas ähnliches hatte ich auch schon vor. Bin aber vor der Einarbeitung der verschiedenen Teilgebiete eingeknickt.
Aber wenn Du das hier freundlicher Weise vorexerzierst, kann ich vielleicht etwas von dem Schwung mitnehmen, quasi im Windschatten mit basteln.
Gruß aus der Nachbarschaft
Patrick
Hallo FoLLgoTT,
wofür nutzt du den miniSHARC, wenn du brutefir hast?
Versteh ich jetzt nicht so recht.
Gruß
FoLLgoTT
24.07.2015, 17:51
Ich bin gespannt wie es weiter geht, etwas ähnliches hatte ich auch schon vor. Bin aber vor der Einarbeitung der verschiedenen Teilgebiete eingeknickt.
Aber wenn Du das hier freundlicher Weise vorexerzierst, kann ich vielleicht etwas von dem Schwung mitnehmen, quasi im Windschatten mit basteln.
Ich habe mich, ehrlich gesagt, auch nur von einer Seite zur anderen gehangelt. ;)
Ein guter Anfang ist aber dieses Dokument (http://www.acourate.com/freedownload/The_Guide_to_VoyageMPD_BruteFIR_and_JACK_v1.6.pdf) . Ich hatte VoyageMPD anfangs installiert, bis ich gemerkt habe, dass der Kernel zu alt für meine Soundkarte ist. Daher würde ich jedem raten, eine der großen Distributionen zu installieren. Ich habe Debian gewählt. Bei der Installation musste ich lediglich beachten, keine Swap-Partition zu benutzen, da meine SSD sehr klein ist und ansonsten habe ich nur das Minimalsystem installiert (ohne X-Server). Danach habe ich auf das aktuelle Testing-Build (Stretch) aktualisiert. Anleitungen gibt es dazu recht viele.
An meiner Brutefir-Config feile ich auch noch ein bisschen. Ganz in Stein gemeißelt ist das noch nicht. Vor allem die Lautstärkeregelung würde ich gerne nach der Faltung durchführen und nicht davor. Da muss ich noch was machen. Digital wird sie aber wohl immer bleiben. Das ist bei internen 32/64 Bit Gleitkomma und geditherten 24 Bit Ausgabe aber auch kein Nachteil.
wofür nutzt du den miniSHARC, wenn du brutefir hast?
Das ist ein Missverständnis. Ich benutze den MiniSharc nicht, ich besitze auch keinen. Ich hatte ihn hier, um ihn mal zu testen. Da mir eben einige Dinge nicht gefallen haben, habe ich mich für den Falt-PC entschieden. Die Auflistung oben soll nur zeigen, dass der Falt-PC günstiger ist und eine bessere Qualität bietet als der MiniSharc. :)
Das ist ein Missverständnis. Ich benutze den MiniSharc nicht, ich besitze auch keinen. Ich hatte ihn hier, um ihn mal zu testen. Da mir eben einige Dinge nicht gefallen haben, habe ich mich für den Falt-PC entschieden. Die Auflistung oben soll nur zeigen, dass der Falt-PC günstiger ist und eine bessere Qualität bietet als der MiniSharc. :)
Dann ist mein Weltbild wieder heil :)
Slaughthammer
24.07.2015, 21:31
MiniSharc:
- S/R-Abstand: 112 dB
- Filterlänge: 1024 / 2048
- Preis: ca. 600 €
- einfach zu bedienende grafische Oberfläche
Falt-PC:
- S/R-Abstand: 124 dB / 120 dB
- Filterlänge: 262.144
- Preis: ca. 400 €
- nur Konsole, Einrichtungsaufaufwand notwendig
Mir fehlt da noch die Latenz in dem Vergleich.
Ich selber fahre ja ein Windows Setup in VST-Umgebung mit FIR-Trennfiltern und IIR EQ, was auch schon zu sehr guten Ergebnissen führt, und vor allem zu einer so geringen Latenz, dass ich die beim Filme gucken nicht kompensieren muss.
Gruß, Onno
FoLLgoTT
24.07.2015, 22:02
Mir fehlt da noch die Latenz in dem Vergleich.
Die Latenz hängt ja maßgeblich von der Filterlänge ab. Daher kann man die nicht pauschal angeben. Die Grundlatenz beider Systeme habe ich nicht gemessen. Ich gehe aber davon aus, dass der MiniSharc von Haus aus weniger stark verzögert, da der PC an diversen Stellen mehr puffert. Da kann man aber wahrscheinlich auch noch optimieren, wenn man das braucht. Vor allem kann Brutefir die Filter partitionieren. Das verringert die Latenz deutlich auf Kosten der Rechenleistung.
Für mich ist die Latenz nicht wichtig, da ich damit nur Musik hören werde.
Ich denke aber auch, dass kurze FIR-Filter + IIR-PEQs der beste Kompromiss sind, wenn die Latenz niedrig sein soll.
....vor allem zu einer so geringen Latenz, dass ich die beim Filme gucken nicht kompensieren muss.
Gruß, Onno
Ich bin direkt neidisch.
Hab schon überlegt, mit einer Kombi aus MiniDSP und Acourate zu arbeiten, weil mir der Zeitversatz einfach zu heftig ist.
Slaughthammer
24.07.2015, 22:39
Braucht man einen Prozessor und Betriebssystem mit AVX-Unterstützung (https://de.wikipedia.org/wiki/Advanced_Vector_Extensions) für...
https://sites.google.com/site/koonaudioprojects/sse-fir-vst-plugin
FoLLgoTT
25.07.2015, 08:10
Ich habe eben mal die Latenz der Xonar mit "arecord | aplay" gemessen. Also den Eingang einfach an den Ausgang ausgegeben. Es sind stolze 390 ms. Mit Brutefir konnte ich auch nicht unter 360 ms kommen (Filterlänge 2048). Anscheinend ist die Karte nicht auf eine geringe Latenz optimiert oder irgendeine Einstellung ist hier noch nicht optimal. Aber es handelt sich ja auch nicht um ein professionelles Audio Interface.
Mich würde mal interessieren, wie eine RME sich da schlägt...
Slaughthammer
25.07.2015, 08:21
Die Latenz hast du mit WMD-Treibern gemessen? Dann wunderts mich nicht. Da kommt man kaum drunter. Mein DSP-System läuft mit Asio4all als Audiotreiber und hat ~20 ms Latenz, incl FIR Bandpässe. Wenn der Rechner nur die Audiowiedergabe und DSP macht, könnte ich das auch noch weiter reduzieren, das gibt dann aber Aussetzer wenn man nebenbei noch was anderes macht. Wenn ich IIR Bandpässe nutze, kann ich die Latenz noch ungefähr halbieren.
FoLLgoTT
25.07.2015, 08:46
Die Latenz hast du mit WMD-Treibern gemessen?
Nein, unter Linux mit ALSA. Da ist keine Abstraktionsschicht dazwischen, also kein Softwaremixer.
FoLLgoTT
25.07.2015, 10:26
Hmm, ich habe noch mal mit "alsaloop" nachgemessen und komme hiermit nur auf ca. 14 ms. Jetzt möchte ich doch mal herausfinden, woher die hohe Latenz mit Brutefir kommt... :denk:
The Alchemist
25.07.2015, 11:52
Wenn man die Latenz der Karte messen möchte muss man über aktiviertes "Loopback" messen, also Loopback im Alsamixer aktivieren und nicht irgendwo in einer Konfigurationsdatei.
Bei meiner Asus D2 heißen die Regler :"S/PDIF L" und "Analog L".
Die Latenz bei Brutefir ist bei der Anzahl von Taps vollkommen normal ca. 400ms hab ich bei Mehrkanal ebenfalls und zwar egal auf welchem Rechner (auch auf dem PI2)
Eventuell kann man noch Entzerrung der Chassis Weiche, und ggf. Raumkorrektur in jeweils ein Filter zusammenfalten, so dass man nur so viele Faltvorgänge hat wie Ausgabekanäle vorhanden sind.
FoLLgoTT
25.07.2015, 13:35
Die Latenz bei Brutefir ist bei der Anzahl von Taps vollkommen normal ca. 400ms hab ich bei Mehrkanal ebenfalls und zwar egal auf welchem Rechner (auch auf dem PI2)
Brutefir erzeugt die Latenz ja nicht, sondern irgendetwas anderes. Ich habe im Moment den Hardware-Puffer der Soundkarte in Verdacht. Den kann man sich anzeigen lassen, während das Audio Interface in Benutzung ist:
cat /proc/asound/card0/pcm0p/sub0/hw_params
Der Puffer ist bei alsaloop relativ niedrig und bei Brutefir sehr hoch.
Und wie gesagt:
arecord | aplay : 340 ms
alsaloop: 14 ms
Die Faltung ist definitiv nicht das Problem. Bei dem ersten Aufruf ist ja Brutefir gar nicht eingeschleift. Und 1024 Taps ohne Partitionierung verzögern laut Brutefir-Homepage gerademal 47 ms. Die extrem hohe Latenz muss einen anderen Grund haben...
The Alchemist
25.07.2015, 14:07
Bei keinem deiner Aufrufe hast Du eine direkte Verbindung von Ein und Ausgang. Die bekommst Du nur über die "Hardwareaktivierung" im Alsamixer.
Da du die die Latenz von arecord | aplay schon gemessen hat müsste man das nochmal mit arecord|brutefir wiederholen und vergleichen
FoLLgoTT
25.07.2015, 14:19
Bei keinem deiner Aufrufe hast Du eine direkte Verbindung von Ein und Ausgang. Die bekommst Du nur über die "Hardwareaktivierung" im Alsamixer.
alsaloop sollte doch genau das machen. Und da ist ja die Latenz sehr niedrig, was die Soundkarte und den Treiber schon mal ausschließt.
Da du die die Latenz von arecord | aplay schon gemessen hat müsste man das nochmal mit arecord|brutefir wiederholen und vergleichen
Mit Brutefir und direkter Ansteuerung von ALSA (Ein- und Ausgänge) sind es ungefähr 360 ms, wenn ich die Partitionierung stark erhöhe. Da arecord | aplay 340 ms erzeugt, brauche ich bei Brutefir gar nicht weiter zu suchen. arecord | brutefir klappt auch gar nicht, weil die Soundkarte nicht zweimal geöffnet werden kann.
The Alchemist
25.07.2015, 14:24
arecord und brutefir klappt selbstverständlich.
FoLLgoTT
25.07.2015, 14:26
arecord und brutefir klappt selbstverständlich.
Dann hatte ich wohl etwas falsch gemacht. Aber wie gesagt, ist der Test sowieso unnötig. arecord | aplay beweist ja, dass die hohe Grundlatenz nicht durch Brutefir entsteht.
SomeDude
25.07.2015, 18:10
Hallo Nils,
schönes Projekt! Hast du den Kernel mit irgendwelchen "low-latency" oder "real-time" Optionen kompiliert? Unter Linux gibt es mehrere Möglichkeiten die Latenzzeit zu verringern zum Bsp. auch mit der Wahl eine anderen Dateisystems (ich gehe davon aus, dass du ext4 benutzt?)
Cheers,
Mike
FoLLgoTT
25.07.2015, 19:07
schönes Projekt!
Danke! :)
Hast du den Kernel mit irgendwelchen "low-latency" oder "real-time" Optionen kompiliert? Unter Linux gibt es mehrere Möglichkeiten die Latenzzeit zu verringern zum Bsp. auch mit der Wahl eine anderen Dateisystems (ich gehe davon aus, dass du ext4 benutzt?)
Ich benutze den Standard-Kernel von Debian. Ich habe über diese Optionen auch gelesen, die reden aber nie von Latenzen im Hundertmillisekundenbereich, sondern immer von viel weniger. Ich kann mir nicht vorstellen, dass es an so einer Optimierung liegt. alsaloop schafft das Durschschleifen ja auch in 14 ms ohne spezielle Einstellungen.
Ansonsten läuft Brutefir in Echtzeitpriorität. Es ist egal, ob ich direkt in Brutefir die ALSA-Ein- und Ausgänge benutze oder Jack. Auch mit MPD über die Pipe nach Brutefir und dann mit ALSA raus gibt es diese große Verzögerung. Die ist ja so hoch, dass man sie richtig spürt und in Arta auch sofort an den Ausschlägen sehen kann. Es handelt sich also nicht um die letzten xx ms, die man noch herauskitzeln möchte, sondern um etwas viel Gröberes.
Ja, als Dateisystem habe ich EXT4, aber die Platte wird ja beim Durchschleifen oder Streamen von Netzwerk gar nicht benutzt.
FoLLgoTT
26.07.2015, 08:46
Ich denke, ich habe ein Teil des Rätsels Lösung. Aufgefallen ist mir, dass Brutefir mit intern generierten Filtern (Dirac Impuls) eine deutlich niedrigere Latenz aufweist (92 ms). Also geht es grundsätzlich. Es sind also meine Filter, die ich mit RePhase generiert habe. Die habe ich mit der Einstellung "Center" gemacht. Stelle ich das um auf z.B. "20ms", dann sinkt die Latenz auf ca. 112 ms bei einer Filterlänge von 65.536 und 32 Partitionen (also 4094,32).
Die Einstellung "20ms" bewirkt aber anscheinend auch, dass das Filter nicht mehr so genau generiert werden kann. Es ist also ein Kompromiss.
PS: Warum arecord|aplay so eine hohe Latenz hat, weiß ich jedoch nicht. Das ist wahrscheinlich ein anderes Problem.
SomeDude
26.07.2015, 12:59
Eines vorweg: Ich habe keinerlei praktische Erfahrung mit Latenzzeiten von Audioanwendungen unter Linux, deswegen kann ich die von dir angegebenen Latenzzeiten nicht bewerten. Ich weiss allerdings, dass es da viele Stellschrauben gibt. Ein Ferndiagnose ist in einem solchen Fall immer sehr "mühsam".
Vielleicht helfen dir ja folgende Links:
http://wiki.linuxaudio.org/wiki/system_configuration
speziell das auf der Seite verlinkte Skript: realTimeConfigQuickScan und die Anwendung latencytop sollten für dich interessant sein und ein eingrenzen der Problematik ermöglichen
Auch nett ist der Eintrag im Arch Linux Wiki zum Thema Pro Audio -> https://wiki.archlinux.org/index.php/Pro_Audio
Falls du die Seiten nicht sowie so schon kennst. Zum Schluss noch zwei Fragen:
Ist BruteFIR eigentlich parallelisiert? Benutzt es openMP oder OpenMPI? Hast du BruteFIR eigentlich selber kompiliert oder über die Paketverwaltung installiert?
Ich finde die Idee einer PC gestützten Weiche auch super, allerdings würde ich gerne auch meinen Plattenspieler anschließen können (der Nostalgie wegen...). Könnte man den Plattenspieler auch an die Soundkarte anschließen? Ein Skript könnte dann die Quellenwahl übernehmen.
FoLLgoTT
26.07.2015, 13:56
Falls du die Seiten nicht sowie so schon kennst.
Bin ich schon mal drüber gestolpert, aber da die Latenz für meine Anwendung ja nicht wichtig ist, habe ich da keine weitere Zeit investiert. Und der Kernel 4, den ich benutze hat diesen RT-Patch schon integriert. Wenn ich mal Zeit habe, schaue ich mir das aber genauer an.
Ist BruteFIR eigentlich parallelisiert? Benutzt es openMP oder OpenMPI? Hast du BruteFIR eigentlich selber kompiliert oder über die Paketverwaltung installiert?
Ja, Brutefir nutzt Threads und startet so viele wie Kerne vorhanden sind. Deswegen habe ich auch extra einen Vierkerner gekauft.
Ich habe Brutefir über die Paketverwaltung installiert. Es ist aber die neueste Version.
Ich finde die Idee einer PC gestützten Weiche auch super, allerdings würde ich gerne auch meinen Plattenspieler anschließen können (der Nostalgie wegen...). Könnte man den Plattenspieler auch an die Soundkarte anschließen? Ein Skript könnte dann die Quellenwahl übernehmen.
Ja, das geht problemlos. :)
Ich schalte die Eingänge immer auf die analogen um, wenn ich die Kiste mit ARTA messe. Im Moment mache ich das noch per Hand in der Config-Datei. Aber das lässt sich alles mit Scripts automatisieren und Brutefir hat auch ein eigenes SSH-Interface. Siehe hier (http://www.ludd.luth.se/~torger/brutefir.html).
Ich hätte da eine Idee, die richtig billig werden könnte.
Neulich habe ich mir einen Odroid XU4 (http://www.pollin.de/shop/dt/MDk1OTgxOTk-/Bausaetze_Module/Entwicklerboards/ODROID_XU4_Einplatinen_Computer_SAMSUNG_Exynos_542 2_2_GB_2x_USB_3_0.html) bestellt und damit ein wenig rumgespielt.
Daran würde ich eine Xonar DX über die SPI (oder I²S) Schnittstelle anschließen. Die Soundkarte habe ich noch nicht, ich weiß zwar, dass der C-Media-Chip diese Schnittstellen hat, aber ich konnte keine Information darüber finden, wie leicht man da ran kommt. Praktisch wäre es, wenn das Layout einen Anschluss bereit hält.
Weiß jemand mehr dazu?
FoLLgoTT
03.08.2015, 11:40
Inzwischen habe ich den PC soweit optimiert, dass möglichst wenig Prozesse laufen, keine Timer starten und keine Festplattenaktivität mehr stattfindet. Zumindest fast, denn die Prozesse kworker und jbd2 schreiben immer noch alle paar Minuten ein paar kB auf die Platte (herausgefunden mit iotop). Bisher konnte ich nicht herausfinden, warum die das tun. Die meisten Threads im Internet haben mir auch keine Antwort geliefert.
Das Booten hat sich auch noch mal ein bisschen beschleunigt (GRUP Timeout und statische IP-Adresse).
Mit MPDroid auf dem Smartphone funktioniert das Abspielen problemlos. Nur die Lautstärkeregelung muss ich noch hinter Brutefir legen bzw. Brutefir selbst machen lassen. Der Nachteil ist aber, dass das dann nicht mehr über die App gesteuert werden kann. Es sei denn, jemand kennt da einen Trick... :)
FoLLgoTT
11.08.2015, 20:05
Ich bin immer noch am Optimieren und heute ist mir eine Merkwürdigkeit an der Xonar aufgefallen. Anscheinend kann der Linuxtreiber die Eingänge nur mit 48 kHz und 16 Bit öffnen. Ich kann zwar arecord mit anderen Sampleraten aufrufen, aber
cat /proc/asound/card0/pcm0c/sub0/hw_params
zeigt mir immer 48 kHz an. Egal, was ich bei arecord angebe.
access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 1024
buffer_size: 16384
Und ich bekomme nur Ton bei S16_LE, auch wenn hier S32_LE angezeigt wird.
Anscheinend findet irgendwo im Treiber ein Resampling statt. Das fiel mir in der Messung auf, die immer einen steilen Tiefpass bei ca. 22 kHz zeigt und schon ab 10 kHz schwach aber deutlich abfällt. Wenn ich arecord direkt mit 48 kHz aufrufe, ist dieser frühe Abfall nicht da (der steile bei 22 kHz bleibt natürlich).
Ausgeben funktioniert aber tadellos mit höheren Sampleraten, das konnte ich mit weißem Rauschen und Realtime Analyzer überprüfen.
Kann das irgendwer nachvollziehen? Wie ist das unter Windows? Ich würde die Karte ungerne ausbauen, um das zu prüfen.
Das Ganze ist für mich jetzt kein Drama. Ich benutze die Eingänge ja sowieso nur zum Messen. Aber auf der Packung steht 192/24 und das möchte ich natürlich auch haben. ;)
The Alchemist
11.08.2015, 20:36
Vermutlich ein Pulse-Audio Fehler.
https://bugs.freedesktop.org/show_bug.cgi?id=66424
Gruß
FoLLgoTT
11.08.2015, 21:33
Danke für die Antwort, aber ich benutze PulseAudio gar nicht. Das Problem tritt schon direkt mit dem ALSA-Recorder auf.
The Alchemist
12.08.2015, 10:19
Pulseaudio wird bei den neuen Linuxen oft einfach als Sound-Server mit installiert und läuft dann immer mit . Selbst wenn man PA von Hand deinstalliert, kann es passieren, dass er sich bei einem Systemupdate wieder mit installiert ....
FoLLgoTT
12.08.2015, 11:43
Pulseaudio wird bei den neuen Linuxen oft einfach als Sound-Server mit installiert und läuft dann immer mit . Selbst wenn man PA von Hand deinstalliert, kann es passieren, dass er sich bei einem Systemupdate wieder mit installiert ....
Bei mir ist es nicht installiert. Das habe ich nachgeprüft. Ich habe sowieso schon alle möglichen Prozesse entfernt, die ich nicht benötige.
FoLLgoTT
14.08.2015, 12:31
Ich habe mir ein kleines Script geschrieben, das über die Tastatur reagiert und die Parameterdatei von VOLRACE (http://frank_l.bitbucket.org/stereoutils/player.html) füllt.
Dabei ist zu beachten, dass nur der erste Parameter dieser Datei geschrieben wird. Es funktioniert also nur die Lautstärkeregelung und nicht der RACE-Algorithmus!
Das Script reagiert auf "+" und "-", sowie "m" für Mute. Es arbeitet komplett in Dezibel, die Lautstärkeänderungen werden also linear wahrgenommen. Die oberen und unteren Limits können festgelegt werden, sowie der Standardwert beim Starten des Scripts. Letzteres ist sinnvoll, um einen definierten Wert beim Einschalten zu erhalten.
Man könnte das Ganze nun mit einer Funk-Tastatur oder mit einer Fernbedienung steuern. Das sollte kein Problem sein.
Die Ausgabe bei Änderungen auf der Konsole ist bezogen auf 0 dB. Das entspricht dem Verstärkungsfaktor 1,0. Lauter als 1,0 geht natürlich auch, ist aber nur sinnvoll, wenn man eine sehr leise Aufnahme hat, die garantiert nicht clippt.
Beispielausgabe:
...
-30.0 dB
-28.0 dB
-26.0 dB
Mute
-26.0 dB
...
#!/bin/bash
# user variables
volFile=/tmp/volume
stepSize=2 # in dB
upperLimit=0 # in dB
lowerLimit=-100 # in dB
defaultVal=-30 # in dB
# converts a given dB value into a amplification factor
function ConvertdBToFactor {
local result=$(echo "scale=20;e(l(10) * $1 / 20)" | bc -l | awk '{printf "%.20f", $1}')
echo "${result}"
}
# intern variables
oldVal=0
oldValMute=""
newVal=$(ConvertdBToFactor $defaultVal)
factor=$(ConvertdBToFactor $stepSize)
upperBound=$(ConvertdBToFactor $upperLimit)
lowerBound=$(ConvertdBToFactor $lowerLimit)
# ouputs new value to console and to volume file
function Output {
if [ $(echo "scale=20;${newVal} == 0" | bc) -eq 1 ]; then
echo "Mute"
else
echo "scale=20;20 * l(${newVal}) / l(10)" | bc -l | awk '{printf "%.1f dB\n", $1}'
fi
echo "${newVal}" > $volFile
}
# set default value
Output
# main loop for key input
while true
do
read -s -n 1 key
case $key in
'-') oldVal=$(cat $volFile)
newVal=$(echo "scale=20;if(${oldVal} / ${factor} < ${lowerBound}) ${lowerBound} else ${oldVal} / ${factor}" | bc | awk '{printf "%.20f", $1}')
Output
;;
'+') oldVal=$(cat $volFile)
newVal=$(echo "scale=20;if(${oldVal} * ${factor} > ${upperBound}) ${upperBound} else ${oldVal} * ${factor}" | bc | awk '{printf "%.20f", $1}')
Output
;;
'm') if [ -z "$oldValMute" ]; then
oldValMute=$(cat $volFile)
newVal=0
else
newVal=$oldValMute
oldValMute=""
fi
Output
;;
esac
done
Ich habe VOLRACE hinter Brutefir eingebunden. Die ganze Signalverarbeitung wird in 64 Bit Gleitkommazahlen durchgeführt. Genauer geht eine digitale Lautstärkeregelung also kaum.
Das Script macht mir das Leben schon viel leichter. Vielleicht ist es ja auch für den einen oder anderen interessant. :)
FoLLgoTT
19.08.2015, 22:14
Gute Neuigkeiten: das Aufnahmeproblem ist gelöst! :dance:
Man muss bei "arecord" zwingend das Sound Device angeben, ansonsten wird "dsnoop" aktiviert und immer auf 48 kHz /16 Bit konvertiert, falls mehrere Quellen gleichzeitig aufnehmen wollen! Das habe ich auch nur erfahren, weil ich den Entwickler von dem Xonar-Treiber gefragt habe. In einer Dokumentation konnte ich dieses "Feature" nicht finden.
Und ich musste das Device nie explizit angeben, weil ich ja nur eines eingebaut habe (Onboard ist deaktiviert).
Naja, jetzt klappt auf jeden Fall auch 192 kHz / 32 Bit. ;)
Ansonsten habe ich mir drei PCM1792A bestellt und werde die demnächst auf die H6-Erweiterungskarte einlöten. Dann haben alle Kanäle denselben Wandler und dieselbe Verzögerung. Ich berichte natürlich, ob das SMD-Löten geklappt hat.
vBulletin® v4.2.5, Copyright ©2000-2024, Jelsoft Enterprises Ltd.