🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #17957

Re: Grabar/Reproducir Sonido en Linux (C).

#17957
From: Manuel López Moreno
Date: Thu, 14 Oct 1999 00:00
60 lines
3166 bytes
*puntero_loco wrote:
> 
> Famoz a ver. En principio puedes leer y reproducir sonido leyendo/escribiendo
> directamente sobre los diversos archivos en el /dev que �abstraen� los
> dispositivos de sonido. Leyendo/escibiendo en el /dev/audio te dar� un .au de
> 8 bits y 11 Khz, leyendo el /dsp te producir� un .wav de 16 bits y 22 Khz,
> etc. Es decir, un fread te dar� en el buffer que le pases lo que est� sonando
> por el micr�fono, mientras que un fwrite (o write) har� reproducir el sonido.
> Puedes hacer la prueba de mandar un .wav a /dev/dsp y ver como se reproduce.

Es cierto que /dev/audio se "traga" directamente los archivos con
formato AU.
Eso s�, los par�metros de configuraci�n (por defecto) son 8 KHz, 8 bits,
1 canal.

Es *casi* cierto que /dev/dsp haga lo mismo con los archivos WAV.
Un wav est� formado por una cabecera de 44 bytes y el resto son las
muestras de sonido.
Por ejemplo, un wav de 44100 Hz, 16 bits, 2 canales (est�reo), tendr�a
una secuencia de muestras tal que as�:
	{ muestra_0_izq, muestra_0_der, muestra_1_izq, muestra_1_der, ... }
Cada muestra, ocupar� 16 bits. En un segundo habr� 44100 muestras.
No estoy seguro si primero va el canal izquierdo o el derecho :/

Tambi�n la configuraci�n por defecto de /dev/dsp es 8 KHz, 8 bits, 1
canal.
As� si enviamos un wav de esas caracter�sticas a /dev/dsp
	$ cat archivo_8000_8_1.wav > /dev/dsp
sonar� bien, pues la cabecera ser� imperceptible (�cu�nto duran 44 bytes
a 8 KHz? :)
Pero si leemos de /dev/dsp
	$ cat /dev/dsp > prueba.raw
obtendremos un archivo de muestras de sonido, formateado a la frecuencia
de muestreo, bits y n� de canales actuales (8 KHz, 8 bits, mono).
_Casi_ un wav. Vamos, s�lo le falta la cabecera.
Es lo que el sox (y casi todas las aplicaciones) llaman formato RAW (=
WAV capado ;)

Para convertirlo en wav se puede utilizar sox (man 1 sox):
	$ sox -r8000 -bu -c1 prueba.raw prueba.wav

-bu = byte unsigned linear :?

	$ ls -l prueba.*
	-rw-r--r--   1 root     root        65536 Oct 14 00:57 prueba.raw
	-rw-r--r--   1 root     root        65580 Oct 14 01:00 prueba.wav

65580 - 65536 = 44 ;-)

	$ file prueba.wav
	prueba.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8
bit, mono 8000 Hz


La pregunta del mill�n: �Y qu� pasar�a si un programa cambia los
par�metros de /dev/dsp a 44100 Hz, 16 bits, 2 canales, y luego otro
programa (cat /dev/dsp) lee del dispositivo? �Leer� con esa
configuraci�n? ... ;)

Saludos.
Technical Details
Message-ID: <3805153C.75AC2F5E@mx2.redestb.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <380323E8.859EF57A@iname.com> <mqs1u7.qg.ln@127.0.0.1>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,42e4d2388b647d2f
X-Google-Attributes: gidf86c8,public
From: Manuel López Moreno <luname@mx2.redestb.es>
Subject: Re: Grabar/Reproducir Sonido en Linux (C).
Date: 1999/10/14
Message-ID: <3805153C.75AC2F5E@mx2.redestb.es>
X-Deja-AN: 536452514
Content-Transfer-Encoding: 8bit
References: <380323E8.859EF57A@iname.com> <mqs1u7.qg.ln@127.0.0.1>
X-Accept-Language: es, ca, en
Content-Type: text/plain; charset=iso-8859-1
Organization: Iddeo - Retevisi�n
Mime-Version: 1.0
Newsgroups: es.comp.os.linux.programacion