Sound Editing
Editing DSP Functions
Algorithms

int findPeak(short *array, int size)
{
int i, peakIndex = 0;
short absValue = 0;

  for (i = 0; i < size; i++)
  {
    if (array[i] < 0)
      absValue = -array[i];
    else
     absValue = array[i];
    if (absValue > peakValue)
    {
      peakValue = absValue;
      peakIndex = i;
    }
  }
  return(peakIndex);
}

void normalize(short *array, int size) { int i, peakIndex;; float mult; peakIndex = findPeak(array, size); if (array[peakIndex] == 0) return; /* avoid divide by zero */ mult = 32767 / (float)array[peakIndex]; if (mult < 0) mult = -mult; for (i = 0; i < size; i++) array[i] = mult * array[i]; }
void reverse(short *array, int size) { int i; short temp; for (i = 0; i < size / 2; i++) { temp = array[i]; array[i] = array[size - i]; array[size - i] = temp; } }
void silence(short *array, int size) { int i; for (i = 0; i < size; i++) array[i] = 0; }
void trim(short *array, int size, int start, int end) { int i; int len = end - start + 1; for (i = 0; i < len; i++) /* Or silence(array, start); */ array[i] = array[start + i]; for (i = len; i < size; i++) array[i] = 0; /* silence(&array[end + 1}, size - end); */ }
void invert(short *array, int size) { int i; for (i = 0; i < size; i++) array[i] = -array[i]; }
void fadeIn(short *array, int size) { int i; float mult; if (size < 2) return; mult = 1.0 / (size - 1); array[0] = 0; for (i = 1; i < size - 1; i++) array[i] = i * mult * array[i] + 0.5; }
void fadeOut(short *array, int size) { int i; float mult; if (size < 2) return; mult = 1.0 / (size - 1); array[size - 1] = 0; for (i = 1; i < size - 1; i++) array[size - i] = i * mult * array[size - i] + 0.5; }
short *cut(short *array, int size, int start, int len) { int i; short *cutArray = malloc(sizeof(short) * len); /* create new array */ for (i = 0; i < len; i++) /* copy */ cutArray[i] = array[start + i]; for (i = start; i < size - len; i++) /* shift to the left */ array[i] = array[i + len]; return(cutArray); /* return new size */ }
short *copy(short *array, int size, int start, int len) { int i; short *copyArray = malloc(sizeof(short) * len); /* create new array */ for (i = 0; i < len; i++) /* copy */ copyArray[i] = array[start + i]; return(copyArray); /* return new size */ }
void paste(short *array, int size, int start, short *new, int sizeNew) { int i; /* assumes there's enough space in array */ for (i = size - 1; i >= start; i--) /* shift to the right */ array[i + sizeNew] = array[i]; for (i = 0; i < sizeNew; i++) array[start + i] = new[i]; }
void replace(short *array, int size, int start, short *new, int sizeNew) { int i; /* assumes there's enough space in array */ for (i = 0; i < sizeNew; i++) array[start + i] = new[i]; }

Ichiro Fujinaga 1998.09.09