Browse Source

detab,remove warning

richarddobson 2 years ago
parent
commit
a3f3079711
1 changed files with 358 additions and 356 deletions
  1. 358 356
      dev/externals/mctools/interlx.c

+ 358 - 356
dev/externals/mctools/interlx.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1983-2013 Richard Dobson and Composers Desktop Project Ltd
+ * Copyright (c) 1983-2023 Richard Dobson and Composers Desktop Project Ltd
  * http://people.bath.ac.uk/masrwd
  * http://www.composersdesktop.com
  * This file is part of the CDP System.
@@ -51,7 +51,7 @@ The number of channels defines the order of the soundfield:
 
 #define N_BFORMATS (10)
 static const int bformats[N_BFORMATS] = {2,3,4,5,6,7,8,9,11,16};
-#define MAX_INFILES (16)	//should keep most people happy! Won't get much more on a cmdline anyway
+#define MAX_INFILES (16)    //should keep most people happy! Won't get much more on a cmdline anyway
 
 enum {OPT_STD_WAVE,OPT_WAVEX_GENERIC,OPT_WAVEX,OPT_WAVEX_LCRS,OPT_WAVEX_SURROUND,OPT_WAVEX_BFORMAT,
    OPT_SURR_5_0,OPT_WAVEX_7_1,OPT_WAVEX_CUBE,OPT_WAVEX_6_1, OPT_MAXOPTS};
@@ -68,73 +68,73 @@ extern int stricmp(const char *a, const char *b);
 void
 usage()
 {
-	fprintf(stderr,"\nCDP MCTOOLS: INTERLX v2.1.0 (c) RWD,CDP 2009,2013\n"
-			"Interleave mono or stereo files into a multi-channel file\n"
-			"Usage: interlx [-tN] outfile infile1 infile2 [infile3...]\n"
-			
-			"       Up to %d files may be interleaved.\n"						
-			"       Output format is taken from infile1.\n"
-			"       Files must match sample rate and number of channels,\n"
-			"          but can have different sample types.\n"
-			"       To create a silent channel, for infile2 onwards,\n"
-			"          use 0 (zero) as filename. Infile1 must be a soundfile.\n"
-			"       NB: Speaker-positions in WAVE_EX infiles are ignored\n"
-			"       Note that the same infile can be listed multiple times,\n"
-			"          for example, to write a mono file as stereo, quad, etc.\n"
-			"       The .amb B-Format extension is supported: \n"
-			"          the program warns if channel count is anomalous.\n"
-			"       recognised Bformat channel counts: 3,4,5,6,7,8,9,11,16.\n"
+    fprintf(stderr,"\nCDP MCTOOLS: INTERLX v2.1.0 (c) RWD,CDP 2009,2013\n"
+            "Interleave mono or stereo files into a multi-channel file\n"
+            "Usage: interlx [-tN] outfile infile1 infile2 [infile3...]\n"
+            
+            "       Up to %d files may be interleaved.\n"                       
+            "       Output format is taken from infile1.\n"
+            "       Files must match sample rate and number of channels,\n"
+            "          but can have different sample types.\n"
+            "       To create a silent channel, for infile2 onwards,\n"
+            "          use 0 (zero) as filename. Infile1 must be a soundfile.\n"
+            "       NB: Speaker-positions in WAVE_EX infiles are ignored\n"
+            "       Note that the same infile can be listed multiple times,\n"
+            "          for example, to write a mono file as stereo, quad, etc.\n"
+            "       The .amb B-Format extension is supported: \n"
+            "          the program warns if channel count is anomalous.\n"
+            "       recognised Bformat channel counts: 3,4,5,6,7,8,9,11,16.\n"
             "   -tN  : write outfile format as type N\n"
-	        "    Available formats:\n"
-			"    0   : (default) standard soundfile (.wav, .aif, .afc, .aifc)\n"
-			"    1   : generic WAVE_EX (no speaker assignments)\n"
-			"    2   : WAVE_EX mono/stereo/quad(LF,RF,LR,RR)   - total chans must match.\n"
-			"    3   : WAVE_EX quad surround (L,C,R,S)         - total chans must be 4.\n"
-			"    4   : WAVE_EX 5.1 format surround             - total chans must be 6.\n"
-			"    5   : WAVE_EX Ambisonic B-format (W,X,Y,Z...) - extension .amb recommended.\n"
+            "    Available formats:\n"
+            "    0   : (default) standard soundfile (.wav, .aif, .afc, .aifc)\n"
+            "    1   : generic WAVE_EX (no speaker assignments)\n"
+            "    2   : WAVE_EX mono/stereo/quad(LF,RF,LR,RR)   - total chans must match.\n"
+            "    3   : WAVE_EX quad surround (L,C,R,S)         - total chans must be 4.\n"
+            "    4   : WAVE_EX 5.1 format surround             - total chans must be 6.\n"
+            "    5   : WAVE_EX Ambisonic B-format (W,X,Y,Z...) - extension .amb recommended.\n"
             "    6   : WAVE_EX 5.0 surround                    - total chans must be 5.\n"
             "    7   : WAVE_EX 7.1 Surround                    - total chans must be 8.\n"
             "    8   : WAVE_EX Cube Surround                   - total chans must be 8.\n"
             "    9   : WAVE_EX 6.1 surround (new in v 2.1.0)   - total chans must be 7.\n"
-			"          in all cases: outfile has sample format of infile1\n"
-			"          NB: types 1 to %d are for WAV format only\n"			
-			,MAX_INFILES,OPT_MAXOPTS-1);
-	
+            "          in all cases: outfile has sample format of infile1\n"
+            "          NB: types 1 to %d are for WAV format only\n"         
+            ,MAX_INFILES,OPT_MAXOPTS-1);
+    
 }
-	
+    
 
 void cleanup(int *sflist)
 {
 
-	int i;
-	for(i=0;i < MAX_INFILES; i++)
-		if(sflist[i] >= 0)
-			psf_sndClose(sflist[i]);
-	psf_finish();
+    int i;
+    for(i=0;i < MAX_INFILES; i++)
+        if(sflist[i] >= 0)
+            psf_sndClose(sflist[i]);
+    psf_finish();
 }
 
 int main(int argc, char *argv[])
 {
 
-	long outframesize,thissize;
-	int i,ofd;
-	int ifdlist[MAX_INFILES];
-	//int force_stype = -1,out_stype;
+    long outframesize,thissize;
+    int i,ofd;
+    int ifdlist[MAX_INFILES];
+    //int force_stype = -1,out_stype;
     int force_wave = 0;
-	int infilearg,inchans;
-	int num_infiles = 0;
-	int halfsec;
+    int infilearg,inchans;
+    int num_infiles = 0;
+    int halfsec;
     MYLONG peaktime;
-	float *outframe	= NULL,*inframe = NULL;
-	PSF_PROPS firstinprops,inprops;
-	PSF_CHPEAK *fpeaks = NULL;
+    float *outframe = NULL,*inframe = NULL;
+    PSF_PROPS firstinprops,inprops;
+    PSF_CHPEAK *fpeaks = NULL;
     int wave_type = -1;
     char *create_msg = NULL;
     psf_format informat = PSF_STDWAVE;
-	char* p_dot = NULL;		/* to find extension of outfile */
-	
-	for(i=0;i < MAX_INFILES;i++)
-		ifdlist[i] = -1;
+    char* p_dot = NULL;     /* to find extension of outfile */
+    
+    for(i=0;i < MAX_INFILES;i++)
+        ifdlist[i] = -1;
 
     /* CDP version number */
     if(argc==2 && (stricmp(argv[1],"--version")==0)){
@@ -142,346 +142,346 @@ int main(int argc, char *argv[])
         return 0;
     }
     
-	if(argc < 4) {
-		fprintf(stderr,"interlx: insufficient arguments\n");
-		usage();
-		exit(1);
-	}
+    if(argc < 4) {
+        fprintf(stderr,"interlx: insufficient arguments\n");
+        usage();
+        exit(1);
+    }
 
-	while(argv[1][0] =='-'){
-		
-		switch(argv[1][1]){
+    while(argv[1][0] =='-'){
+        
+        switch(argv[1][1]){
         case('t'):
-			if(argv[1][2]=='\0'){
-				fprintf(stderr,"-t flag requires parameter\n");
-				usage();
-				exit(1);
-			}
-			wave_type = atoi(&(argv[1][2]));
-			if((wave_type < 0) || wave_type >= OPT_MAXOPTS){
-				fprintf(stderr,"wave type out of range\n");
-				usage();
-				exit(1);
-			}
-			force_wave = 1;
-			break;
-		default:
-			fprintf(stderr,"\nabfpan: error: illegal flag option %s",argv[1]);
-			exit(1);
-		}
+            if(argv[1][2]=='\0'){
+                fprintf(stderr,"-t flag requires parameter\n");
+                usage();
+                exit(1);
+            }
+            wave_type = atoi(&(argv[1][2]));
+            if((wave_type < 0) || wave_type >= OPT_MAXOPTS){
+                fprintf(stderr,"wave type out of range\n");
+                usage();
+                exit(1);
+            }
+            force_wave = 1;
+            break;
+        default:
+            fprintf(stderr,"\nabfpan: error: illegal flag option %s",argv[1]);
+            exit(1);
+        }
 
-		argc--; argv++;
-	}
+        argc--; argv++;
+    }
 
-	if(argc < 4){
-		fprintf(stderr,"interlx error: at least two infiles required!\n");
-		usage();
-		exit(1);
-	}
+    if(argc < 4){
+        fprintf(stderr,"interlx error: at least two infiles required!\n");
+        usage();
+        exit(1);
+    }
 
-	if(psf_init()){
-		printf("Startup failure.\n");
-		return  1;
-	}
-	
-	//open first infile and get properties
-	ifdlist[0] = psf_sndOpen(argv[2],&firstinprops,0);
-	if(ifdlist[0] < 0){
-		fprintf(stderr,"unable to open infile %s\n",argv[2]);
-		cleanup(ifdlist);
-		return 1;
-	}
+    if(psf_init()){
+        printf("Startup failure.\n");
+        return  1;
+    }
+    
+    //open first infile and get properties
+    ifdlist[0] = psf_sndOpen(argv[2],&firstinprops,0);
+    if(ifdlist[0] < 0){
+        fprintf(stderr,"unable to open infile %s\n",argv[2]);
+        cleanup(ifdlist);
+        return 1;
+    }
 
 /* we don't know how to deal with speaker positions yet, so disregard these
-	if(firstinprops.chformat > MC_STD){
-		printf(stderr,"Warning,interlx: ignoring source file speaker positions\n");
-	}
+    if(firstinprops.chformat > MC_STD){
+        printf(stderr,"Warning,interlx: ignoring source file speaker positions\n");
+    }
 */
-	outframesize = psf_sndSize(ifdlist[0]);
-	if(outframesize < 0){
-		fprintf(stderr,"unable to read size of infile %s\n",argv[2]);
-		cleanup(ifdlist);
-		return 1;
-	}
-	inchans = firstinprops.chans;
-	/*we can always allow more channels if someone really needs it! */
-	if(!(inchans==1 || inchans==2)){
-		fprintf(stderr,"interlx: error: infile %s has %d channels\n"
-				"\t(only mono and stereo files can be used)\n",argv[2],inchans);
-		cleanup(ifdlist);
-		return 1;
-	}
-	
-	num_infiles = 1;
-	printf("interleaving %d-channel files,sample rate = %d\n",inchans,firstinprops.srate);
+    outframesize = psf_sndSize(ifdlist[0]);
+    if(outframesize < 0){
+        fprintf(stderr,"unable to read size of infile %s\n",argv[2]);
+        cleanup(ifdlist);
+        return 1;
+    }
+    inchans = firstinprops.chans;
+    /*we can always allow more channels if someone really needs it! */
+    if(!(inchans==1 || inchans==2)){
+        fprintf(stderr,"interlx: error: infile %s has %d channels\n"
+                "\t(only mono and stereo files can be used)\n",argv[2],inchans);
+        cleanup(ifdlist);
+        return 1;
+    }
+    
+    num_infiles = 1;
+    printf("interleaving %d-channel files,sample rate = %d\n",inchans,firstinprops.srate);
 
-	infilearg = 3;
-	while(argv[infilearg] != NULL){
-		if(strcmp(argv[infilearg],"0")==0){
-			ifdlist[num_infiles] = -1;           // mark silent channel
-		}
-		else{
+    infilearg = 3;
+    while(argv[infilearg] != NULL){
+        if(strcmp(argv[infilearg],"0")==0){
+            ifdlist[num_infiles] = -1;           // mark silent channel
+        }
+        else{
 
-			if((ifdlist[num_infiles] = psf_sndOpen(argv[infilearg],&inprops,0)) < 0){
-				fprintf(stderr,"cannot open infile %s\n",argv[infilearg]);
-				cleanup(ifdlist);
-				return 1;
-			}
-			if(inprops.chans != firstinprops.chans){
-				fprintf(stderr,"interlx: error: channel mismatch from infile %s\n",argv[infilearg]);
-				cleanup(ifdlist);
-				return 1;
-			}
+            if((ifdlist[num_infiles] = psf_sndOpen(argv[infilearg],&inprops,0)) < 0){
+                fprintf(stderr,"cannot open infile %s\n",argv[infilearg]);
+                cleanup(ifdlist);
+                return 1;
+            }
+            if(inprops.chans != firstinprops.chans){
+                fprintf(stderr,"interlx: error: channel mismatch from infile %s\n",argv[infilearg]);
+                cleanup(ifdlist);
+                return 1;
+            }
 
-			if(inprops.srate != firstinprops.srate){
-			   fprintf(stderr,"interlx: error: sample rate mismatch from infile %s\n",argv[infilearg]);
-				cleanup(ifdlist);
-				return 1;
-			}
+            if(inprops.srate != firstinprops.srate){
+               fprintf(stderr,"interlx: error: sample rate mismatch from infile %s\n",argv[infilearg]);
+                cleanup(ifdlist);
+                return 1;
+            }
 
-			thissize = psf_sndSize(ifdlist[num_infiles]);
-			if(thissize < 0){
-				fprintf(stderr,"unable to read size of infile %s\n",argv[infilearg]);
-				cleanup(ifdlist);
-				return 1;
-			}			
-			outframesize = max(outframesize,thissize);
-		}
-		
-		infilearg++;
-		num_infiles++;
-		if(num_infiles > MAX_INFILES){
-			fprintf(stderr,"Sorry! too many infiles. Maximum accepted is %d.\n",MAX_INFILES);
-			cleanup(ifdlist);
-			exit(1);
-		}
+            thissize = psf_sndSize(ifdlist[num_infiles]);
+            if(thissize < 0){
+                fprintf(stderr,"unable to read size of infile %s\n",argv[infilearg]);
+                cleanup(ifdlist);
+                return 1;
+            }           
+            outframesize = max(outframesize,thissize);
+        }
+        
+        infilearg++;
+        num_infiles++;
+        if(num_infiles > MAX_INFILES){
+            fprintf(stderr,"Sorry! too many infiles. Maximum accepted is %d.\n",MAX_INFILES);
+            cleanup(ifdlist);
+            exit(1);
+        }
 
-	}
+    }
 
-	
-	inframe = malloc(inchans * sizeof(float));
-	if(inframe==NULL){
-		puts("interlx: error: no memory for input buffer!\n");
-		cleanup(ifdlist);
-		return 1;
-	}
+    
+    inframe = malloc(inchans * sizeof(float));
+    if(inframe==NULL){
+        puts("interlx: error: no memory for input buffer!\n");
+        cleanup(ifdlist);
+        return 1;
+    }
 
-	firstinprops.chans *= num_infiles;
-	outframe = (float *) malloc(firstinprops.chans * sizeof(float));
-	if(outframe==NULL){
-		puts("\ninterlx: error: no memory for output buffer!\n");
-		cleanup(ifdlist);
-		return 1;
-	}
+    firstinprops.chans *= num_infiles;
+    outframe = (float *) malloc(firstinprops.chans * sizeof(float));
+    if(outframe==NULL){
+        puts("\ninterlx: error: no memory for output buffer!\n");
+        cleanup(ifdlist);
+        return 1;
+    }
 
-	fpeaks = (PSF_CHPEAK *) calloc(firstinprops.chans,sizeof(PSF_CHPEAK));
-	if(fpeaks==NULL){
-		puts("interlx: error: no memory for internal PEAK buffer\n");
-		cleanup(ifdlist);
-		return 1;
-	}
+    fpeaks = (PSF_CHPEAK *) calloc(firstinprops.chans,sizeof(PSF_CHPEAK));
+    if(fpeaks==NULL){
+        puts("interlx: error: no memory for internal PEAK buffer\n");
+        cleanup(ifdlist);
+        return 1;
+    }
     if(force_wave){
-		int i,matched;
-		
-		switch(wave_type){
+        int i,matched;
+        
+        switch(wave_type){
         case(OPT_WAVEX_GENERIC):
-			inprops.chformat = MC_STD;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating STD WAVE_EX file";
-			break;
-		case(OPT_WAVEX):
-			switch(firstinprops.chans){
-			case(1):
-				firstinprops.chformat = MC_MONO;
-				informat = PSF_WAVE_EX;
-				create_msg = "creating MONO WAVE_EX file";
-				break;
-			case(2):
-				firstinprops.chformat = MC_STEREO;
-				informat = PSF_WAVE_EX;
-				create_msg = "creating STEREO WAVE_EX file";
-				break;
-			case(4):
-				firstinprops.chformat = MC_QUAD;
-				informat = PSF_WAVE_EX;
-				create_msg = "creating QUAD WAVE_EX file";
-				break;
-			default:
-				fprintf(stderr,"infile nchans incompatible with requested WAVE-EX format\n");
-				usage();
-				cleanup(ifdlist);
-				return 1;				
-			}
-			break;
-		case(OPT_WAVEX_LCRS):
-			if(firstinprops.chans != 4){
-				fprintf(stderr,"result must have four channels\n");
-				usage();
-				cleanup(ifdlist);
-				return 1;
-			}
-			firstinprops.chformat = MC_LCRS;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating LCRS-surround WAVE_EX file";
-			break;
-		case(OPT_WAVEX_SURROUND):
-			if(firstinprops.chans != 6){
-				fprintf(stderr,"result must have six channels\n");
-				usage();
-				cleanup(ifdlist);
-				exit(1);
-			}
-			firstinprops.chformat = MC_DOLBY_5_1;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating 5.1 surround WAVE_EX file";
-			break;
+            inprops.chformat = MC_STD;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating STD WAVE_EX file";
+            break;
+        case(OPT_WAVEX):
+            switch(firstinprops.chans){
+            case(1):
+                firstinprops.chformat = MC_MONO;
+                informat = PSF_WAVE_EX;
+                create_msg = "creating MONO WAVE_EX file";
+                break;
+            case(2):
+                firstinprops.chformat = MC_STEREO;
+                informat = PSF_WAVE_EX;
+                create_msg = "creating STEREO WAVE_EX file";
+                break;
+            case(4):
+                firstinprops.chformat = MC_QUAD;
+                informat = PSF_WAVE_EX;
+                create_msg = "creating QUAD WAVE_EX file";
+                break;
+            default:
+                fprintf(stderr,"infile nchans incompatible with requested WAVE-EX format\n");
+                usage();
+                cleanup(ifdlist);
+                return 1;               
+            }
+            break;
+        case(OPT_WAVEX_LCRS):
+            if(firstinprops.chans != 4){
+                fprintf(stderr,"result must have four channels\n");
+                usage();
+                cleanup(ifdlist);
+                return 1;
+            }
+            firstinprops.chformat = MC_LCRS;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating LCRS-surround WAVE_EX file";
+            break;
+        case(OPT_WAVEX_SURROUND):
+            if(firstinprops.chans != 6){
+                fprintf(stderr,"result must have six channels\n");
+                usage();
+                cleanup(ifdlist);
+                exit(1);
+            }
+            firstinprops.chformat = MC_DOLBY_5_1;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating 5.1 surround WAVE_EX file";
+            break;
             
         case(OPT_SURR_5_0):
-			if(firstinprops.chans != 5){
-				fprintf(stderr,"result must have five channels.\n");
-				usage();
-				cleanup(ifdlist);
-				return 1;
-			}
-			firstinprops.chformat = MC_SURR_5_0;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating 5.0 surround WAVE_EX file";
-			break;
+            if(firstinprops.chans != 5){
+                fprintf(stderr,"result must have five channels.\n");
+                usage();
+                cleanup(ifdlist);
+                return 1;
+            }
+            firstinprops.chformat = MC_SURR_5_0;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating 5.0 surround WAVE_EX file";
+            break;
 
-		case(OPT_WAVEX_BFORMAT):
-			matched = 0;
-			for(i=0;i < N_BFORMATS;i++)	{
-				if(firstinprops.chans == bformats[i]){
-					matched = 1;
-					break;
-				}
-			}
-			if(!matched){
-				printf("WARNING: No Bformat definition for %d-channel file.\n",inprops.chans);
-			}
-			firstinprops.chformat = MC_BFMT;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating AMBISONIC B-FORMAT WAVE_EX file";
-			break;
+        case(OPT_WAVEX_BFORMAT):
+            matched = 0;
+            for(i=0;i < N_BFORMATS;i++) {
+                if(firstinprops.chans == bformats[i]){
+                    matched = 1;
+                    break;
+                }
+            }
+            if(!matched){
+                printf("WARNING: No Bformat definition for %d-channel file.\n",inprops.chans);
+            }
+            firstinprops.chformat = MC_BFMT;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating AMBISONIC B-FORMAT WAVE_EX file";
+            break;
         case OPT_WAVEX_7_1:
             if(firstinprops.chans != 8){
-				fprintf(stderr,"result must have  channels\n");
-				usage();
-				cleanup(ifdlist);
-				return 1;
-			}
-			firstinprops.chformat = MC_SURR_7_1;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating 7.1 surround WAVE_EX file";
-			break;
+                fprintf(stderr,"result must have  channels\n");
+                usage();
+                cleanup(ifdlist);
+                return 1;
+            }
+            firstinprops.chformat = MC_SURR_7_1;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating 7.1 surround WAVE_EX file";
+            break;
         case OPT_WAVEX_CUBE:
             if(firstinprops.chans != 8){
-				fprintf(stderr,"result must have  channels\n");
-				usage();
-				cleanup(ifdlist);
-				return 1;
-			}
-			firstinprops.chformat = MC_CUBE;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating cube surround WAVE_EX file";
-			break;
-		case OPT_WAVEX_6_1:
+                fprintf(stderr,"result must have  channels\n");
+                usage();
+                cleanup(ifdlist);
+                return 1;
+            }
+            firstinprops.chformat = MC_CUBE;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating cube surround WAVE_EX file";
+            break;
+        case OPT_WAVEX_6_1:
             if(firstinprops.chans != 7){
-				fprintf(stderr,"result must have  channels\n");
-				usage();
-				cleanup(ifdlist);
-				return 1;
-			}
-			firstinprops.chformat = MC_SURR_6_1;
-			informat = PSF_WAVE_EX;
-			create_msg = "creating 6.1 surround WAVE_EX file";
-			break;
-		default:
+                fprintf(stderr,"result must have  channels\n");
+                usage();
+                cleanup(ifdlist);
+                return 1;
+            }
+            firstinprops.chformat = MC_SURR_6_1;
+            informat = PSF_WAVE_EX;
+            create_msg = "creating 6.1 surround WAVE_EX file";
+            break;
+        default:
             inprops.chformat = STDWAVE;
-			informat = PSF_STDWAVE;
-			create_msg = "creating plain sound file";
-			break;
-		}		
-	}
-	
-	/*  want to avoid WAVE_EX if just plain WAVE possible */
-	firstinprops.format = informat;
-		/*firstinprops.chformat = MC_STD;*/		/* RWD April 2006 do this here? */
-	
-	p_dot = strrchr(argv[1],'.');
-	if(stricmp(++p_dot,"amb")==0) {
-		int i;
-		int matched = 0;
-		firstinprops.chformat = MC_BFMT;
-		for(i=0;i < N_BFORMATS;i++)	{
-			if(firstinprops.chans == bformats[i]){
-				matched = 1;
-				break;
-			}
-		}
-		if(!matched)
-			printf("\nWARNING: channel count %d unknown for BFormat.\n",firstinprops.chans);
+            informat = PSF_STDWAVE;
+            create_msg = "creating plain sound file";
+            break;
+        }       
+    }
+    
+    /*  want to avoid WAVE_EX if just plain WAVE possible */
+    firstinprops.format = informat;
+        /*firstinprops.chformat = MC_STD;*/     /* RWD April 2006 do this here? */
+    
+    p_dot = strrchr(argv[1],'.');
+    if(stricmp(++p_dot,"amb")==0) {
+        int i;
+        int matched = 0;
+        firstinprops.chformat = MC_BFMT;
+        for(i=0;i < N_BFORMATS;i++) {
+            if(firstinprops.chans == bformats[i]){
+                matched = 1;
+                break;
+            }
+        }
+        if(!matched)
+            printf("\nWARNING: channel count %d unknown for BFormat.\n",firstinprops.chans);
 
-	}
+    }
     if(!is_legalsize(outframesize,&firstinprops)){
         fprintf(stderr,"error: outfile size %ld exceeds capacity of format.\n",outframesize);
         return 1;
     }
     printf("\n%s: %d channels, %ld frames.\n",create_msg,firstinprops.chans,outframesize);
-	ofd = psf_sndCreate(argv[1],&firstinprops,0,0,PSF_CREATE_RDWR);
-	
-	
-	if(ofd < 0){
-		fprintf(stderr,"interlx: error: unable to create outfile %s.\n",argv[1]);
-		cleanup(ifdlist);
-		return 1;
-	}
+    ofd = psf_sndCreate(argv[1],&firstinprops,0,0,PSF_CREATE_RDWR);
+    
+    
+    if(ofd < 0){
+        fprintf(stderr,"interlx: error: unable to create outfile %s.\n",argv[1]);
+        cleanup(ifdlist);
+        return 1;
+    }
 
-	halfsec = firstinprops.srate / 2;
-	for(i=0;i < outframesize; i++){		// frame loop
-		float *p_framesamp,*p_filesamp;
-		int j;
-		
-		p_framesamp = outframe;
-		memset((char *)outframe,0,firstinprops.chans * sizeof(float));
+    halfsec = firstinprops.srate / 2;
+    for(i=0;i < outframesize; i++){     // frame loop
+        float *p_framesamp,*p_filesamp;
+        int j;
+        
+        p_framesamp = outframe;
+        memset((char *)outframe,0,firstinprops.chans * sizeof(float));
 
-		for(j=0;j < num_infiles;j++) {	//file loop
-			int k,got;
+        for(j=0;j < num_infiles;j++) {  //file loop
+            int k,got;
             
-			memset((char *)inframe,0,inchans * sizeof(float));
-			if(ifdlist[j] < 0){
-				got = inchans; // placeholder - write silent channel
-			}
-			else{
-				if((got = psf_sndReadFloatFrames(ifdlist[j],inframe,1)) < 0){
-					fprintf(stderr,"interlx: error reading from infile %s\n",argv[2+j]);
-					psf_sndClose(ofd);					
-					cleanup(ifdlist);
-					return 1;
-				}
-			}
-			if(got==1){
-				p_filesamp = inframe;
-				for(k=0;k < inchans;k++)	//channel loop
-					*p_framesamp++	= *p_filesamp++;
-			}
-			else
-				p_framesamp += inchans;
-		}
-		
-		if(psf_sndWriteFloatFrames(ofd,outframe,1) < 0){
-			fprintf(stderr,"interlx: error writing to outfile\n");
-			psf_sndClose(ofd);            
+            memset((char *)inframe,0,inchans * sizeof(float));
+            if(ifdlist[j] < 0){
+                got = inchans; // placeholder - write silent channel
+            }
+            else{
+                if((got = psf_sndReadFloatFrames(ifdlist[j],inframe,1)) < 0){
+                    fprintf(stderr,"interlx: error reading from infile %s\n",argv[2+j]);
+                    psf_sndClose(ofd);                  
+                    cleanup(ifdlist);
+                    return 1;
+                }
+            }
+            if(got==1){
+                p_filesamp = inframe;
+                for(k=0;k < inchans;k++)    //channel loop
+                    *p_framesamp++  = *p_filesamp++;
+            }
+            else
+                p_framesamp += inchans;
+        }
+        
+        if(psf_sndWriteFloatFrames(ofd,outframe,1) < 0){
+            fprintf(stderr,"interlx: error writing to outfile\n");
+            psf_sndClose(ofd);            
             cleanup(ifdlist);
             return 1;
-		}
+        }
         if(i % halfsec==0) {
-			printf("%.2lf secs\r",(double)i / (double) firstinprops.srate);
+            printf("%.2lf secs\r",(double)i / (double) firstinprops.srate);
             fflush(stdout);
         }
-	}
-	printf("%.4lf secs\nWritten %ld sample frames to %s\n",(double)outframesize / (double)firstinprops.srate,outframesize,argv[1]);
-	if(psf_sndReadPeaks( ofd,fpeaks,&peaktime)){
+    }
+    printf("%.4lf secs\nWritten %ld sample frames to %s\n",(double)outframesize / (double)firstinprops.srate,outframesize,argv[1]);
+    if(psf_sndReadPeaks( ofd,fpeaks,&peaktime)){
         printf("PEAK data:\n");
         for(i = 0; i < firstinprops.chans; i++) {
             double val, dbval;
@@ -491,14 +491,16 @@ int main(int argc, char *argv[])
                    val,dbval,(unsigned int) fpeaks[i].pos,(double)fpeaks[i].pos / (double) firstinprops.srate);
         }
     }
-	
-	printf("\n");
-	psf_sndClose(ofd);
-	free(inframe);
-	free(outframe);
-    if(fpeaks)
+    
+    printf("\n");
+    psf_sndClose(ofd);
+    free(inframe);
+    free(outframe);
+    if(fpeaks) {
         free(fpeaks);
-	cleanup(ifdlist);
+    }
+    cleanup(ifdlist);
     
-	return 0;
+    return 0;
 }
+