🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#17949
From: Manuel López Moreno
Date: Wed, 13 Oct 1999 00:00
74 lines
2672 bytes
NoP / Compiler wrote:
> 
>  Sobre todo este mensaje va dirigido a *puntero_loco, aunque si
> alguien sabe del tema, y responde, mejor que mejor... El caso
> es que quiero saber grabar y reproducir sonido en Linux. S� que
> se hace usando ioctl, pero no tengo NPI de como se elige la
> frecuencia de muestreo, 8/16 bits, mono/stereo, etc...
> 
>  �alguien me echa una mano?

Remito un esquema de c�mo me mont� un programilla para reproducir/grabar
sonido.
Es un c�digo bastante escueto. No hay control de errores ni
refinamientos, s�lo el esquema m�nimo.

	#include <linux/soundcard.h>

	int	fd;
	int	frec, bits, canales;
	int	n;
	char	buffer[1024];

1) Se abre el archivo/dispositivo de audio digital.
Para reproducir, modo escritura; Para grabar, modo lectura.
Aqu� figura como lectura/escritura.

	fd = open( "/dev/dsp", O_RDWR, 0 );

2) Se configuran los par�metros frecuencia/bits/canales del dispositivo
de audio digital.

	//--- Calidad CD
	frec = 44100;
	bits = 16;
	canales = 2;

	//--- Me suena :) que el orden de configuraci�n es importante :?
	ioctl( fd, SOUND_PCM_WRITE_CHANNELS, &canales );
	ioctl( fd, SOUND_PCM_WRITE_BITS, &bits );
	ioctl( fd, SOUND_PCM_WRITE_RATE, &frec);

3) El bucle principal de lectura/escritura.

Para reproducir:

	// Lee desde la entrada est�ndar y lo escribe (reproduce) en el
dispositivo de audio.
	while ((n = read( 0, buffer, sizeof buffer )) > 0)
		write( fd, buffer, n );

Para grabar:

	// Lee (graba) desde el dispositivo de audio y lo escribe en la salida
est�ndar.
	while ((n = read( fd, buffer, sizeof buffer )) > 0)
		write( 1, buffer, n );

4) Cerrar archivos y liberar memoria (para el buffer, si se hace con
malloc).

	close( fd );


Una vez compilado (y depurados todos los errores :), se puede probar la
reproducci�n de un wav (44100 Hz, 16 bits, est�reo) con:

	$ ./ejemplo < archivo_44100_16_2.wav

Los 44 bytes de la cabecera del wav sonar�n a un peque��iiiiiiiiiiisimo
ruido :)

P.D. M�rate el c�digo de wavplay.

Suerte.
Technical Details
Message-ID: <3804AB7F.6F2AA29F@mx2.redestb.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <380323E8.859EF57A@iname.com>

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/13
Message-ID: <3804AB7F.6F2AA29F@mx2.redestb.es>
X-Deja-AN: 536289326
Content-Transfer-Encoding: 8bit
References: <380323E8.859EF57A@iname.com>
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