Exemple #1
0
static void
linux_play (int argc, char *argv [])
{	static short buffer [BUFFER_LEN] ;
	SNDFILE *sndfile ;
	SF_INFO sfinfo ;
	int		k, audio_device, readcount, subformat ;

	for (k = 1 ; k < argc ; k++)
	{	memset (&sfinfo, 0, sizeof (sfinfo)) ;

		printf ("Playing %s\n", argv [k]) ;
		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
		{	puts (sf_strerror (NULL)) ;
			continue ;
			} ;

		if (sfinfo.channels < 1 || sfinfo.channels > 2)
		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
			continue ;
			} ;

		audio_device = linux_open_dsp_device (sfinfo.channels, sfinfo.samplerate) ;

		subformat = sfinfo.format & SF_FORMAT_SUBMASK ;

		if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
		{	static float float_buffer [BUFFER_LEN] ;
			double	scale ;
			int 	m ;

			sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
			if (scale < 1e-10)
				scale = 1.0 ;
			else
				scale = 32700.0 / scale ;

			while ((readcount = sf_read_float (sndfile, float_buffer, BUFFER_LEN)))
			{	for (m = 0 ; m < readcount ; m++)
					buffer [m] = scale * float_buffer [m] ;
				write (audio_device, buffer, readcount * sizeof (short)) ;
				} ;
			}
		else
		{	while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
				write (audio_device, buffer, readcount * sizeof (short)) ;
			} ;

		sf_close (sndfile) ;

		close (audio_device) ;
		} ;

	return ;
} /* linux_play */
Exemple #2
0
//----------------------------------------------------------------------------------------------
//            TITLE   : linux_play
//
//            WORK    : 
//
//            DATE    : 2004. 11. 29
//----------------------------------------------------------------------------------------------
int linux_play ( char *argv )
{	static short buffer [BUFFER_LEN] ;
	SNDFILE *sndfile ;
	SF_INFO sfinfo ;
	int		k, audio_device, readcount, subformat ;

	memset (&sfinfo, 0, sizeof (sfinfo)) ;

	//printf ("Playing %s\n", argv [k]) ;
		
	if (! (sndfile = sf_open (argv, SFM_READ, &sfinfo)))
	{	
		puts (sf_strerror (NULL)) ;
		return -1;
	} 

	if (sfinfo.channels < 1 || sfinfo.channels > 2)
	{	
		printf ("Error : channels = %d.\n", sfinfo.channels) ;
		return -2;
	} 

	audio_device = linux_open_dsp_device (sfinfo.channels, sfinfo.samplerate) ;

	subformat = sfinfo.format & SF_FORMAT_SUBMASK ;

	if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
	{	
		static float float_buffer [BUFFER_LEN] ;
		double	scale ;
		int 	m ;

		sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
			
		if (scale < 1e-10)
			scale = 1.0 ;
		else
			scale = 32700.0 / scale ;

		while ((readcount = sf_read_float (sndfile, float_buffer, BUFFER_LEN)))
		{	
			for (m = 0 ; m < readcount ; m++)
			{				
				buffer [m] = scale * float_buffer [m] ;
			}
									
			write (audio_device, buffer, readcount * sizeof (short));
				
			// 중지하고 싶을때 여기에 조건문을 넣는다.	
			
			if( Sound_Stop_Flag > 0 ) break;		
		}
	}
	else
	{	
		while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
		{			
			write (audio_device, buffer, readcount * sizeof (short)) ;
				
			// 중지하고 싶을때 여기에 조건문을 넣는다.		
			if( Sound_Stop_Flag > 0 ) break;		
		}		
	} ;

	close (audio_device) ;
	sf_close (sndfile) ;


	return 0;
	
};