Perché Linux non mi permette di giocare con / dev / dsp?


12

Sto lavorando su un libro di testo Linux e mi sta raccontando dei dispositivi. Dice che se invio l'uscita appropriata a /dev/dsp, quindi riprodurrà un suono. L'esempio è cat file.wav > /dev/dsp, dove file.wav è un qualsiasi file .wav.

Quando lo faccio ottengo il permesso negato. Se eseguo questo con sudo ottengo ancora il permesso negato. Se io per suprimo, nessun suono viene riprodotto.

Perché mi viene negata l'autorizzazione sudo? Perché nessun suono viene riprodotto nemmeno con su?


1
Assicurati che il tuo utente sia nel audiogruppo.
Carl Groner,

Potrebbe anche essere necessario assicurarsi che il file wav sia audio non elaborato, non tutti i file .wav sono non elaborati.
Drake Clarris,

@DrakeClarris, che causerebbe l'emissione di rumore, non un errore negato l'autorizzazione.
cjm

@cjm Stavo pensando di più al silenzio quando
suonavo

Risposte:


14

/dev/dspfa parte di OSS, che non fa parte del kernel Linux da ... molto tempo. È stato a lungo soppiantato da ALSA, che utilizza diversi dispositivi, programmi diversi e un'API diversa.

C'è un modulo di livello di emulazione però. Se è disponibile, il caricamento del snd-pcm-ossmodulo consente di utilizzare i dispositivi PCM per OSS come /dev/dsp.

O semplicemente attenersi ai dati di piping verso aplayo paplayinvece.


2
sudo modprobe snd-pcm-ossfunziona sul mio Ubuntu per caricare quel modulo. Ottengo un /dev/dsp1e un /dev/dsp2fuori di questa.
Veda,

9

Se eseguo questo con sudo ottengo ancora il permesso negato.

Con questa affermazione, sembra che tu stia provando un comando come:

sudo cat file.wav > /dev/dsp

Il motivo per cui si continua a ottenere "l'autorizzazione negata" è che la shell tenta innanzitutto di aprire il /dev/dspdispositivo per l'output, prima di eseguire il comando (che è sudo). Per fare in modo che la shell apra il reindirizzamento con i privilegi di root, dovresti fare qualcosa del tipo:

sudo sh -c 'cat file.wav > /dev/dsp'

6

Libro obsoleto, come indicato.
Quindi, per far funzionare gli esempi con Linux più moderno, dove dice qualcosa di simile

cat music.wav > /dev/dsp

cambiarlo in:

cat music.wav | aplay

E hai appena effettuato il tuo primo porting del codice! Vincere! Sentiti libero di inviare le patch dell'autore del libro. :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.