Inbyggd DSP i alla Linux

Hemmapulare debatterar lämpligen i detta forum.

Moderator: Redaktörer

Neuhausen
 
Inlägg: 684
Blev medlem: 2023-07-12

Inbyggd DSP i alla Linux

Inläggav Neuhausen » 2024-09-12 18:17

Jag tittade i går kväll på olika DSP lösningar för Linux, tanken var att börja med CamillaDSP, men jag hamnade på ett sidospår. Jag har tidigare använt EasyEffects, men har tyckt att det är begränsat jämfört med EqualizerAPO i Windows, framför allt att det inte verkar lämpligt för delningsfilter.

PulseAudio ersätts i nya distributioner av PipeWire. Debian 12 kom kanske lite för tidigt för att byta helt och har pipewire om du använder gnome men PulseAudio om du använder någon annan grafisk miljö. Man byter ut PulseAudio lätt på de andra Debianversionerna genom att installera paketet pipewire-audio. Det gör alla ändringar och tar bort PulseAudio. Jag har testat på Debian 12.7 med KDE.

Direkt i PipeWire så finns möjlighet att kopiera kanaler, applicera filter, fördröja kanaler och en hel del mer. Filtren känner vi igen, bq_lowpass, bq_highpass, bq_bandpass, bq_lowshelf, bq_highshelf, bq_peaking.

Dokumentationen är antingen svag eller svår att hitta.
https://docs.pipewire.org/page_man_pipe ... onf_5.html
https://docs.pipewire.org/page_module_filter_chain.html

Pipewire tittar efter konfigurationsfiler på följande ställen:
$XDG_CONFIG_HOME/pipewire/filter-chain.conf
/etc/pipewire/filter-chain.conf
/usr/share/pipewire/filter-chain.conf
/usr/share/pipewire/filter-chain.conf.d/
/etc/pipewire/filter-chain.conf.d/
$XDG_CONFIG_HOME/pipewire/filter-chain.conf.d/
Senast redigerad av Neuhausen 2024-09-12 18:31, redigerad totalt 1 gång.

Neuhausen
 
Inlägg: 684
Blev medlem: 2023-07-12

Re: Inbyggd DSP i Linux

Inläggav Neuhausen » 2024-09-12 18:30

För att prova så kopierade jag filen /usr/share/pipewire/filter-chain/sink-eq6.conf (fanns inte i Debian, så jag hämtade den från nätet. Men den ligger på det stället på min Linux Mint.) till /etc/pipewire/filter-chain.conf.d/ och gjorde ändringar på den.
Kod: Markera allt
context.modules = [
    { name = libpipewire-module-filter-chain
        args = {
            node.description = "Internal Speakers Equalizer Sink"
            media.name       = "Internal Speakers Equalizer Sink"
            filter.graph = {
                nodes = [
                    {
                        type  = builtin
                        name  = eq_band_1
                        label = bq_peaking
                        control = { "Freq" = 45.0 "Q" = 1.5 "Gain" = -5.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_2
                        label = bq_peaking
                        control = { "Freq" = 75.0 "Q" = 1.5 "Gain" = -10.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_3
                        label = bq_peaking
                        control = { "Freq" = 160.0 "Q" = 2 "Gain" = -7.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_4
                        label = bq_peaking
                        control = { "Freq" = 250.0 "Q" = 1 "Gain" = -8.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_5
                        label = bq_peaking
                        control = { "Freq" = 600.0 "Q" = 1 "Gain" = -5.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_6
                        label = bq_peaking
                        control = { "Freq" = 2100.0 "Q" = 3 "Gain" = -5.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_7
                        label = bq_peaking
                        control = { "Freq" = 2700.0 "Q" = 1.0 "Gain" = 5.0 }
                    }
                    {
                        type  = builtin
                        name  = eq_band_8
                        label = bq_peaking
                        control = { "Freq" = 7524.0 "Q" = 1.5 "Gain" = 0.0 }
                    }
                ]
                links = [
                    { output = "eq_band_1:Out" input = "eq_band_2:In" }
                    { output = "eq_band_2:Out" input = "eq_band_3:In" }
                    { output = "eq_band_3:Out" input = "eq_band_4:In" }
                    { output = "eq_band_4:Out" input = "eq_band_5:In" }
                    { output = "eq_band_5:Out" input = "eq_band_6:In" }
                    { output = "eq_band_6:Out" input = "eq_band_7:In" }
                    { output = "eq_band_7:Out" input = "eq_band_8:In" }
                ]
            }
            audio.channels = 2
            audio.position = [ FL FR ]
            capture.props = {
                node.name   = "internal_speaker"
                media.class = Audio/Sink
            }
            playback.props = {
                node.name   = "internal_speaker_equalizer_output"
                node.passive = true
                node.target = "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink"
            }
        }
    }
]


Jag antar att det finns smidgare sätt att få den att läsa in konfigurationen på nytt, men jag startade om pipewire med systemctl --user restart pipewire.service. Det fanns sedan en annan uppspelingsenhet att välja i ljudpanelen i KDE, i REW var jag tvungen att välja utgång själv.

Att det här är något som inom kort kommer finnas som standard i alla Linuxdatorer tycker jag att är positivt och det skall bli roligt att se om det finns eller kommer några grafiska verktyg eller i alla fall bättre dokumentation.

Användarvisningsbild
MagnusÖstberg
 
Inlägg: 30030
Blev medlem: 2009-03-30

Re: Inbyggd DSP i alla Linux

Inläggav MagnusÖstberg » 2024-09-13 23:41

Cool!
Jag saknar dig.
Medlem på www.faktiskt.se sedan 2006

Neuhausen
 
Inlägg: 684
Blev medlem: 2023-07-12

Re: Inbyggd DSP i alla Linux

Inläggav Neuhausen » 2024-09-17 14:42

En sak får jag leta lite mer information om, det verkar som om de sänker nivån 6dB så fort man laddar ett filter. Jag var orolig för att man skulle behöva sänka nivån själv för att hantera filter med positiv gain, men nivån verkar sänkas automatiskt med det högsta gain värdet som man använder plus 6dB.

Visst kan ett filter med negativ gain ge en liten positiv puckel, men 6dB låter lite överdrivet.

Användarvisningsbild
pLudio
 
Inlägg: 2752
Blev medlem: 2003-06-17
Ort: Stockholm

Re: Inbyggd DSP i Linux

Inläggav pLudio » 2024-09-17 14:55

Neuhausen skrev:För att prova så kopierade jag filen /usr/share/pipewire/filter-chain/sink-eq6.conf (fanns inte i Debian, så jag hämtade den från nätet. Men den ligger på det stället på min Linux Mint.) till /etc/pipewire/filter-chain.conf.d/ och gjorde ändringar på den.

Du kan lägga filen under ~/.config/pipewire/filter-chain.conf.d/ också om det räcker att den bara är aktiv för din användare.

Neuhausen skrev:Att det här är något som inom kort kommer finnas som standard i alla Linuxdatorer tycker jag är positivt och det skall bli roligt att se om det finns eller kommer några grafiska verktyg eller i alla fall bättre dokumentation.

https://github.com/mikeroyal/PipeWire-Guide tipsar om grafiska verktyg som https://github.com/dimtpap/coppwr och https://github.com/Audio4Linux/JDSP4Linux.
Caveat auditor. If bass was "faster" it would be "treble."

Neuhausen
 
Inlägg: 684
Blev medlem: 2023-07-12

Re: Inbyggd DSP i alla Linux

Inläggav Neuhausen » 2024-09-17 19:12

Att ha konfigurationen i hemkatalogen tyckte jag att verkade olämpligt för det här, men att kunna testa saker med en annan inloggning är kanske inte så dumt.

JamesDSP var en av de jag tänkte prova innan jag började testa med det inbyggda i pipewire. Jag är inte påläst men eftersom den är avsedd för både pipewire och pulseaudio så tror jag att den har sin egen DSP funktionalitet. Så det lägger jag åt sidan tills vidare.

EasyEffects som jag använder tidigare var ganska instabilt, det grafiska gränssnittet hängde sig gärna när man försökte justera något. Det är skönt att slippa det.

coppwr ser ut att kanske vara användbar för att felsöka dropouts och liknande då det kan göra grafer över en del av det som man normalt får genom pw-top.

Det jag saknar mest från EqualizerAPO i windows är ett sätt att visualisera hur filtren samverkar, jag kan få lite uppfattning med ett excel blad som jag modifierat från ett som hette BiQuad Cookbook. Men på det hafsiga sättet som jag modifierat så tas ingen hänsyn till fas när man staplar magnituden från flera filter. Men det hjälper i alla fall lite och jag har hittat lite möjliga källor för hur man beräknar det egentligen. Någon sitter kanske på kunskapen och kan hjälpa till?

REW har jag använt för att mäta utgången från filtret när jag matar det med ett svep, precis som man gör med mikrofon. Men direkt på filtrets utgång.

Neuhausen
 
Inlägg: 684
Blev medlem: 2023-07-12

Re: Inbyggd DSP i alla Linux

Inläggav Neuhausen » 2024-09-18 12:04

En sak som trasslade till det lite för mig i går kväll är att den är ovanligt känslig för formatet på konfigurationsfilerna. Helt plötsligt så började den ignorera vissa korrektioner, det visade sig att det var viktigt använda formatet 5.0. Tar man bort decimalen så ignorerades värdet, trots att det verkade fungera utan decimal tidigare! Men det kan vara minnet som sviker, det finns i alla fall anledning att vara ganska strikt.

{
type = builtin
name = eq_band_1
label = bq_peaking
control = { "Freq" = 45.0 "Q" = 1.5 "Gain" = -5.0 }
}

Rena felskrivningar kan också ställa till det rejält, jag provade ett high shelf filter men skrev bq_highshelv av misstag. Det fick filtersystemet att packa ihop så att omstart av datorn krävdes innan det började fungera igen. Ett par andra felskrivningar gav samma resultat. Så att ta reda på exakt vilka services som måste startas om för att återställa helt är nog bra om man vill slippa starta om. Det visade sig genom att enheten som filtret skapar inte dyker upp i ljudinställningarna.

Korrektion:
Sedan har vi det jag nämnde om att den sänkte nivån automatiskt med så mycket gain som var det högsta positiva gain värdet och sedan 6dB extra för att få digitalt headroom. Det var plötsligt borta när jag gjorde ett lite längre filter, det lät inte bra! Det är möjligt att easyeffects hade något igång som gjorde att nivån kontrollerades, för det var en stund efter att easyeffects avinstallerade som jag uppmärksammade ändringen.

Neuhausen
 
Inlägg: 684
Blev medlem: 2023-07-12

Re: Inbyggd DSP i alla Linux

Inläggav Neuhausen » 2024-09-20 00:32

qpwgraph verkar göra ungefär samma saker som coppwr, men ser lite prydligare ut. De visar tex hur saker är ihopkopplade och kan ändra hur det är ihopkopplat. Tex om man vill att en ingång skall gå direkt till en utgång eller tex gå via filter-chain.

När jag började använda filter-chains så fick jag lite lägre volym än när jag kopplade förbi det. Huvudvolymkontrollen flyttas från den ordinarie utgången till pipewire filterchains, men ljudet går via båda volymkontrollerna! Så man behöver ställa den gamla utgångens volymkontroll på fullt innan man väljer filter-chains utgången som default ljudutgång.

Det är troligt att nivåerna var så inställda att det skapade det lite udda problemet som jag upplevde med att filter-chains sänkte nivån för att motsvara den positiva gainen i filtret. Då jag mätte många gånger och justerade volymen för mätningarna beroende på vilken utgång jag använde på REW så blev det snabbt rörigt!

Jag har ingen lämplig kabel eller signalkälla för att prova nu, men jag tror att en signal som skickas in på line-in ingången på datorn kommer att gå via filter-chains equalizern och ut på datorns utgång som det är inställt nu. Samtidigt som man kan spela upp från datorn.


Återgå till DIY-forum


Vilka är online

Användare som besöker denna kategori: Majestic-12 [Bot] och 236 gäster