X-Git-Url: https://hackdaworld.org/gitweb/?p=sound-tools%2Fhdrec.git;a=blobdiff_plain;f=hdrec.c;h=c6945f5d5f3d62fb7787ab0d396be1d73169c19c;hp=42d86a755ef6299acb6faf4945f90bc40ccc4219;hb=e63f82b5e667ec6770390129e4cd2613d70620d3;hpb=9894394f33f4aee3cafbaf91c076cdd13f4fc1c6 diff --git a/hdrec.c b/hdrec.c index 42d86a7..c6945f5 100644 --- a/hdrec.c +++ b/hdrec.c @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -23,6 +25,8 @@ int usage(void) { printf("usage:\n\n"); printf("-h \t\t print this help\n"); printf("-i \t\t use/print file info\n"); + printf("-R \t\t play reversed :)\n"); + printf("-d \t sound device (eg: /dev/dsp)\n"); printf("-r \t record to \n"); printf("-p \t play from \n"); printf("-s \t\t stereo\n"); @@ -47,10 +51,15 @@ int main(int argc,char **argv) { char play_file[MAX_C_FILE]; dsp_set set; unsigned char *buf; + unsigned char *buf2=NULL; unsigned char print_info=0; unsigned char info[8]; int info_int; int tmp; + char is_wav=0; + fd_set read_fds,write_fds; + struct timeval fds_tv; + char c; /* defaults */ strcpy(device,""); @@ -69,13 +78,16 @@ int main(int argc,char **argv) { print_info=1; break; case 'r': - mode=RECORD; + mode|=RECORD; strcpy(record_file,argv[++i]); break; case 'p': - mode=PLAY; + mode|=PLAY; strcpy(play_file,argv[++i]); break; + case 'R': + mode|=REVERSED; + break; case 's': set.channel=STEREO; break; @@ -180,17 +192,46 @@ int main(int argc,char **argv) { perror("malloc"); return -1; } + if((mode&RECORD) && (mode&PLAY)) { + if((buf2=malloc(set.bufsize*sizeof(unsigned char)))==NULL) { + printf("allocating 2nd memory failed :(\n"); + perror("malloc"); + return -1; + } + } - if(mode&PLAY) { + if((mode&PLAY) && (!(mode&RECORD))) { printf("playing file %s ...\n",play_file); + if(mode&REVERSED) printf("but we do it reversed!\n"); rw=1; - while(rw) { - rw=read(pfile_fd,buf,set.bufsize); - write(audio_fd,buf,set.bufsize); + if(!(mode&REVERSED)) { + while(rw) { + rw=read(pfile_fd,buf,set.bufsize); + write(audio_fd,buf,set.bufsize); + } + } else { + i=0; + read(pfile_fd,info,4); + if(!strncmp(info,"RIFF",4)) { + is_wav=1; + printf("\nassuming wav file according to header ...\n"); + i=44; + } + lseek(pfile_fd,0,SEEK_SET); + tmp=lseek(pfile_fd,0,SEEK_END); + // if(set.format==AFMT_U8) i=set.channel; + // if(set.format==AFMT_S16_LE) i=set.channel*2; + for(j=0;j<(tmp-i);j++) { + for(k=0;k