www.pudn.com > wav_mp3_recorder.rar > rec.c


#include 
#include 
#include 
#include 

#include "audiorec.h"

char* filename;

int end= 0;
void sighandler(int sig)
{
	if(sig == SIGUSR1)
		end=1;
}


int main(int argc, char **argv)
{
	int wave_mp3 = 0;
	struct ABUFFER *buf;
	unsigned char encOut[500];
  int n;
  long file_len = 0;
  int fd;
  int k = 1000;
  int i = 0;
  int ch;
  
  while( (ch = getopt(argc, argv, "wm")) != -1 )
  {
  	switch(ch) {
  	  case 'm' :
  		   wave_mp3 = 0;
  		   i++;
  		   break;
  	case 'w' :
  		   wave_mp3 = 1;
  		   i++;
  		   break;
  		}
  	i++;
  }
  filename = argv[i];
  printf("filename = %s\n", filename);
  printf("wave_mp3 = %d\n", wave_mp3);
  //return 0;
  
	void* pcm_buffer;
	pcm_buffer = malloc(PCM_BUF_LEN);
	if(pcm_buffer == NULL) {
		printf("malloc buffer fails\n");
		exit(0);
	}
	memset(pcm_buffer, 0, PCM_BUF_LEN);
	
	printf("hello, this is a recorder of wave and mp3\n");
	  	  
	  
	 fd = open(filename, O_CREAT | O_RDWR);
	if(fd < 0) {
		printf(" open wave file fails\n");
		exit(1);
	}
	 	  

	if(audio_open() == AUDIO_FAILURE) {
		printf("open fail\n");
		goto out;
	}

	if(audio_config(1,16,8000,15) == AUDIO_FAILURE){
		     printf("config fail\n");
	       	goto out;
	}
	
  audio_set_volume(100);
  signal(SIGUSR1,sighandler);
 
  if( wave_mp3 == 0 ) {
	    Mp3_Initial();
	    if(audio_start() == AUDIO_FAILURE){
		      printf("start fail\n");
	        goto out;
	     }
	    while(end == 0 ) 
    	{ 
		    buf=audio_get_frame();
		    if(buf != NULL)
	      { 
		     	n = Mp3_Encode(buf->data,encOut);
		    	audio_put_frame(buf);
			    write(fd, encOut, n);
		    }
		   // k--;
	    }
	     printf("Recorder mp3 file successed!\n");
	  }
	 else if( wave_mp3 == 1) {
	 	  	while(end == 0)  // && k >= 0)
	      { 
	         n = audio_wave(pcm_buffer);
           if(n > 0) {
		         write(fd, pcm_buffer, n);
	           file_len += n;
	         }
	        // k--;
	      }
	     lseek(fd, 0, SEEK_SET);
	     file_len -= 44;

	     WriteWaveHeader(fd, file_len, 8000, 1, 16); 
	     printf("Recorder wave file success!\n");	
	 }
out:
	audio_end(wave_mp3);
	close(fd);
	exit(0);
}