00001 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #include <sent/stddefs.h>
00025 #include <sent/speech.h>
00026 
00028 #define IS_INVALID_SAMPLE(A) ((A) == 0 || (A) == -32767)
00030 #define WINDOWLEN 16
00031 
00040 int
00041 strip_zero(SP16 a[], int len)
00042 {
00043   int src,dst;
00044   int bgn,mode,j;
00045 
00046   dst = 0;
00047   bgn = 0;
00048   mode = 0;
00049 
00050   for (src = 0; src < len; src++) {
00051     if (IS_INVALID_SAMPLE(a[src])) {
00052       if (mode == 0) {          
00053         bgn = src;
00054         mode = 1;
00055       }
00056       
00057     } else {
00058       if (mode == 1) {
00059         mode = 0;
00060         if ((src - bgn) < WINDOWLEN) {
00061           for(j=bgn;j<src;j++) {
00062             a[dst++] = a[j];
00063           }
00064         } else {
00065           
00066           jlog("Warning: strip: sample %d-%d is invalid, stripped\n", bgn, src-1);
00067         }
00068       }
00069       a[dst++] = a[src];
00070     }
00071   }
00072   
00073   if (mode == 1) {
00074     mode = 0;
00075     if ((src - bgn) < WINDOWLEN) {
00076       
00077       for(j=bgn;j<src;j++) {
00078         a[dst++] = a[j];
00079       }
00080     } else {
00081       
00082       jlog("Warning: strip: sample %d-%d is invalid, stripped\n", bgn, src-1);
00083     }
00084   }
00085   
00086   return(dst);
00087 }