# Servidor de so

Un servidor de so és un programari que s'encarrega de la gestió de l'ús i accés als dispositius d'àudio, habitualment, les tarjetes de so. Normalment s'executen com un procés de segon pla, com a dimoni de sistema.
El mateix terme pot aplicar-se també per referir-se a un servidor dedicat a l'streaming d'àudio, és a dir, l'emissió en temps real d'un flux de dades d'àudio a través d'Internet o d'una xarxa local.

## Servidor de so d'un sistema operatiu

En un sistema operatiu obert de la família GNU/Linux, o sistemes basats en UNIX, la tasca principal d'un servidor de so és realitzar la mescla de diferents fluxos de dades i enviar una única sortida unificada al dispositiu de sortida d'àudio del sistema. Aquesta mescla es farà habitualment per software, o bé per hardware si es disposa d'una targeta de so avançada que estigui suportada.

### Motivació

Els servidors de so van aparèixer donats els problemes que hi havia amb l'antic sistema de so Open Sound System (OSS). Aquest és massa bàsic i només és capaç de rebre un sol flux de dades i reproduir-ho a la sortida de la targeta de so. Només alguns models eren capaços de reproduir més d'un flux de dades a la vegada. Amb aquesta limitació, es donava un problema comú, si un programa enviava un flux de dades de so mentre s'estava reproduint un altre, no s'escoltaria, i això suposava un problema per a l'usuari comú d'un sistema d'escriptori.
Molts d'aquests problemes, es solien evitar de formes poc eficients. Alguns programes esperaven a trobar el dispositiu d'àudio no bloquejat, per poder fer-ho servir. Altres, prèviament realitzaven una comprovació d'estat, i si no el trobaven lliure, desactivaven les funcionalitats de so per evitar un possible penjament del programa.
Els servidors d'àudio s'executen com a dimoni de sistema treballant en segon pla. Reben crides de programes i diferents fluxos de so, els mesclen, i envien la sortida al dispositiu d'àudio a través del mòdul de so que es faci servir. En l'actualitat, s'aprofiten les característiques avançades que proporciona ALSA, la qual cosa ha contribuït a reduir la quantitat de problemes de les distribucions de GNU/Linux relacionats amb el so, doncs des de la versió 2.6 del kernel ja s'ha integrat com a part d'aquest.

### Diversificació i problemes

Actualment, existeixen diversos servidors de so, alguns se centren a donar molt baixa latència, i d'altres, en oferir característiques generalistes per a sistemes d'escriptori i el millor suport possible per a tot tipus d'aplicacions. Aquesta varietat, ha donat lloc a algunes posicions crítiques que defensen que és necessària una estandardització per a una API única o centrar esforços en un únic servidor de so.
Amb la diversificació de servidors, una persona pot triar quina alternativa fer servir, però els programadors han d'afegir més treball i més línies de codi al seu programari perquè sigui compatible amb els diferents servidors disponibles.
Els programes van haver de deixar d'enviar els sons directament al dispositiu de so per fer-ho al servidor de so. Si aquests no estan preparats, o envien directament un flux de dades directament al dispositiu d'àudio, és possible que es trobin bloquejat aquest dispositiu i no el puguin fer servir. En alguns casos, existeixen mecanismes per forçar que el dispositiu de sortida de so que farà servir un programari durant la seva execució serà el servidor d'àudio que s'estigui fent servir.

## Servidor de so per fer streaming

Un servidor de streaming de so és un programari dedicat a gestionar les connexions d'usuaris a un mateix flux de dades reproduint les mostres a temps real sense la necessitat de copiar el fitxer d'àudio sencer al sistema receptor alleugerint el temps de transferència d'un fitxer d'àudio a través d'una xarxa local o Internet.
Segons el programari, podrà treballar en primer pla, o bé, com a dimoni de sistema o servei.

## Servidors de so
### Servidor d'àudio de sistema
#### ESD

ESD (Enlightened Sound Daemon o EsounD) era el servidor de per a escriptoris Enlightenment, després GNOME va adoptar aquest per fer-ho el seu servidor de so estàndard també. Suporta full duplex, i és transparent en xarxa. Proporciona les capacitats de mescla i multiplexació fonamentals per a la reproducció i gravació de fluxos d'àudio PCM. Els fluxos s'escriuen i es llegeixen com a sockets d'Unix. És transparent en xarxa, capaç de treballar sobre xarxes i enviar un flux a un servidor ESD localitzat en un altre sistema d'una xarxa.

#### aRts

aRts (analog Real time synthesizer) és una simulació per programari d'un sintetitzador analògic a temps real. Un dels seus components és artsd, el demoni que realitza mescles de diferents fonts d'àudio a temps real. Es compon de components bàsics més petits que es poden interconnectar amb cables, un model inspirat en els sintetitzadors analògics modulars dels anys 70. Es va utilitzar com a peça fonamental de KDE, essent el seu servidor de so a les versions 2 i 3. Alguns comentaris suggereixen que les rutines de processament donen una millor qualitat de so que ESD, però fent servir una latència superior. Incorpora algunes funcions més avançades que ESD, pot inserir efectes funcionant com un mòdul més. La implementació d'aquests es basa en objectes compartits que es carreguen dinàmicament al servidor quan es fa ús d'ells. Suporta full duplex i és transparent en xarxa. A partir de la versió 4 de KDE es fa servir la plataforma multimèdia Phonon, la qual s'espera que substitueixi definitivament aRts.

#### PulseAudio

PulseAudio (anteriorment PolypAudio) està pensat com a substitut de ESD i va ser el servidor de so per omissió a Fedora Core 8 i Ubuntu 8.04. És multiplataforma, funcionant en sistemes compatibles POSIX així com en sistemes Windows. El seu funcionament es basa a redirigir tots els fluxos d'àudio a través d'ell, incloent aquells en els que el programa accedeix directament al dispositiu físic de so (com les antigues aplicacions OSS).
Proporciona adaptadors per a les aplicacions que fant servir altres servidors de so, com aRts o ESD. En una situació típica d'entorn GNU/Linux, es configura ALSA per fer servir un dispositiu virtual proporcionat per PulseAudio. Les aplicacions que farien servir ALSA directament, enviaran el so a PulseAudio, que farà servir ALSA per accedir al dispositiu fisic. També proporciona una API nativa pròpia perquè les aplicacions el puguin fer servir directament. En el cas del programari basat en OSS, es proporciona un dispositiu virtual que substitueix a /dev/dsp, el programari funcionarà com si controlés el dispositiu físic, però el dispositiu virtual redirigeix els fluxos a PulseAudio.

#### JACK

JACK Audio Connection Kit (JACK, jackd o JACKit) és un servidor de so o dimoni que funciona a temps real i compatible amb sistemes POSIX, actualment disponible per a GNU/Linux i MacOSX. Proporciona una connexió de baixa latència entre programari compatible amb aquest i permetre que puguin accedir a connexions síncrones a fluxos de dades d'àudio i MIDI del dispositiu físic de so. L'objectiu de JACK és oferir una API de gran amplada de banda i baixa latència, així com una plataforma d'interconnexió d'àudio. El seu funcionament es basa en ports, i cada aplicació connectada a JACK en disposa d'un port per a ella.

#### PipeWire

PipeWire és un servidor de transmissió multimèdia, essent programari lliure. Es va desenvolupar amb l'objectiu de ser compatible i reemplaçar PulseAudio i JACK en l'entorn GNU/Linux. Apunta a ser un servidor de so de categoria professional i oferir un marc que faciliti la captura i la compartició de la pantalla en sessions de Wayland. El seu desenvolupament ha estat vinculat a Flatpak, pel que es preveu minimitzar els problemes de seguretat en la distribució. En darrera instància s'ha de considerar que va ser un patrocini de Red Hat. És compatible amb ALSA, però no el pot substituir per ser part del Kernel de Linux.

#### RoarAudio

RoarAudio és un servidor de so en desenvolupament, pensat per substituir ESD. L'objectiu principal del projecte se centra a oferir programari per mesclar àudio a temps real per a aplicacions de streaming TV i ràdio a través d'Internet. Està dissenyat per treballar amb baixes latències, d'uns 10 ms habitualment, però capaç d'arribar fins a menys d'1 ms. Té suport transparent total de xarxa i suporta formats lliures nativament a més de PCM, com Vorbis, Speex o CELT. Es proporcionen llibreries per als clients que no ho són compatibles nativament, principalment, una llibreria que permet a tot el programari compatible amb ESD fer-ho servir.

#### Altres

Tant els sistemes d'Apple i Microsoft tenen els seus sistemes propis de so, ambdós propietaris. MacOSX fa ús de Core Audio, una plataforma unificada d'àudio i MIDI capaç de donar servei a aplicacions d'àmbit comercial i nivell professional de baixa latència.

### Servidor de streaming d'àudio
#### Icecast

Icecast és un projecte per realitzar streaming d'àudio mantingut per la fundació Xiph.org. Es pot fer servir per a crear una emissora de ràdio via Internet o per a ús privat entre altres aplicacions. És molt versàtil quant a formats donat que es poden afegir de manera relativament senzilla i té suport natiu d'estàndards oberts per a comunicacions. El terme també es refereix específicament al programa servidor que forma part del projecte. En les seves últimes versions, Icecast suporta fluxos de la família Ogg com Vorbis, Speex, FLAC, Theora així com MP3 i AAC. És compatible amb SHOUTcast de Nullsoft.

#### SHOUTcast

SHOUTcast és una tecnologia de streaming de so gratuïta, desenvolupada per Nullsoft. SHOUTcast fa servir la codificació MP3 o AAC de contingut de so i http com a protocol (també es pot fer servir multicast) per a transmetre ràdio a través d'Internet.

#### Altres

El mercat disposa de diferents alternatives comercials per a diferents aplicacions, suportant només àudio, o bé formant part d'una plataforma de streaming multimèdia. Alguns exemples són BroadWare Streaming Audio Server o Flumotion.

## Referències

* ↑ «PipeWire, el futuro del sonido y la captura de pantalla en Linux» (en castellà). MuyLinux, 17-05-2021. [Consulta: 28 juny 2021].
* ↑ «Fedora 34 Might Try To Use PipeWire By Default To Replace PulseAudio/JACK - Phoronix». [Consulta: 28 juny 2021].

## Vegeu també

* Àudio digital
* Sistema Operatiu
* GNU/Linux
* ALSA
* Amplada de banda
* aRts
* Streaming
* Xiph.org

## Enllaços externs

* Core Audio Overview (anglès)
* Introduction to Linux Audio (anglès)