Ejemplo n.º 1
0
static gboolean
gst_spectra_scope_setup (GstBaseAudioVisualizer * bscope)
{
  GstSpectraScope *scope = GST_SPECTRA_SCOPE (bscope);
  guint num_freq = bscope->width + 1;

  if (scope->fft_ctx)
    gst_fft_s16_free (scope->fft_ctx);
  g_free (scope->freq_data);

  /* we'd need this amount of samples per render() call */
  bscope->req_spf = num_freq * 2 - 2;
  scope->fft_ctx = gst_fft_s16_new (bscope->req_spf, FALSE);
  scope->freq_data = g_new (GstFFTS16Complex, num_freq);

  return TRUE;
}
Ejemplo n.º 2
0
int main(int argc,  char *argv[]){
	if(argc < 4){
        printf(USAGE);
        exit(1);
    }

    pcmfile_t   *wav_inp;
    
	wav_inp = wav_open_read(argv[1], 0);
    if(wav_inp == NULL){
        printf("wav_open_read failed\n");
        exit(1);
    }
    if(wav_inp->channels == 2){
        printf("Input file is stereo. NOT SUPPRTED\n");
        exit(1);
    }
	int         block_size 	= atoi(argv[3]);
	FILE        *fp_fft_out	= fopen(argv[2],"w");
// 	FILE		*fp_ifft_out= fopen(argv[4],"w");	
	short       *pcm 		= malloc(block_size*wav_inp->channels*sizeof(short));

#ifdef KISS_FFT
    void        		*fft_cfg	= 	kiss_fftr_alloc(block_size ,0,0,0 );
	kiss_fft_scalar*    fft_in		= 	(kiss_fft_scalar*)malloc(sizeof(kiss_fft_scalar)*(block_size));
	kiss_fft_cpx*      	fft_out		= 	(kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx)*(block_size));
#elif GST_FFT
	gint16* 			fft_in		= 	(gint16*)malloc(sizeof(gint16)*block_size);		
	GstFFTS16Complex*	fft_out		= 	(GstFFTS16Complex*)malloc(sizeof(GstFFTS16Complex*)*block_size);
	GstFFTS16*			fft_self	=	gst_fft_s16_new(block_size,FALSE);
#elif ALLGO_FFT
	int     *fft_in					=	(int*)malloc(sizeof(int)*block_size);
//	int     *fft_out				=	(int*)malloc(2*sizeof(int)*block_size);
//	short   *out_pcm				=	(short*)malloc(sizeof(short)*block_size);
#endif

    int 			i;
	int         	num_samples_read;
	long 			time=0;
	struct timeval 	start,end;

    while(1){
        num_samples_read = wav_read_int16(wav_inp, pcm, (block_size*wav_inp->channels), NULL);
		if(num_samples_read != block_size){
            printf("END of wav file reached\n");
            break;
        }
	
		for(i=0;i<block_size;i++){
#ifdef ALLGO_FFT
			fft_in[i] = (int)((pcm[i]));
	    //    fft_in[2*i+1] = 0;
#elif KISS_FFT
        	fft_in[i] =(kiss_fft_scalar)pcm[i];
#elif GST_FFT
			fft_in[i] =(gint16)pcm[i];		
#endif	
		}

		gettimeofday(&start,NULL);
#ifdef KISS_FFT
    	kiss_fftr(fft_cfg , fft_in, fft_out);
#elif GST_FFT
        gst_fft_s16_fft(fft_self,fft_in,fft_out);
#elif ALLGO_FFT
		FFT(fft_in, block_size);
#endif
		gettimeofday(&end,NULL);   

		time=time+(end.tv_usec+end.tv_sec*1000000-start.tv_usec-start.tv_sec*1000000);

#ifdef FIXED_POINT
#ifdef ALLGO_FFT
		for(i = 0; i < (block_size); i+=2){
        	fprintf(fp_fft_out, "%d\t", fft_in[i]);
        	fprintf(fp_fft_out, "%d\n", fft_in[i+1]);
        }
#else	
		for(i=0;i<(block_size/2);i++){
        	fprintf(fp_fft_out,"%d\t%d\n",(int)fft_out[i].r,(int)fft_out[i].i);
		}
#endif
#else
	for(i=0;i<(block_size/2);i++){
            fprintf(fp_fft_out,"%d\t%d\n",(int)((fft_out[i].r)/block_size),(int)((fft_out[i].i/block_size)));
	}
#endif
    }

   	printf("%ld time elapsed\n\n",time); 
	wav_close(wav_inp);
    fclose(fp_fft_out);
return 0;
}