Du teilst falsch. Du musst die Bildbreite durch die array Länge teilen, nicht umgekehrt.

Code:
#include <iostream>
#include <vector>
#include <fstream>
#include <string>

#include <stdio.h>
#include <limits.h>
#include <math.h>

#include <VG/openvg.h>
#include <VG/vgu.h>
#include <fontinfo.h>
#include <shapes.h>

#include "diaSound.hpp"

#define BLACK     0,   0,   0
#define WHITE   255, 255, 255
#define MAGENTA 255,   0, 255
#define RED     255,   0,   0
#define YELLOW  255, 255,   0
#define LIME      0, 255,   0
#define GREEN     0, 128,   0
#define CYAN      0, 255, 255
#define AQUA    102, 204, 204
#define BLUE      0,   0, 255

int   _width_=1024, _height_=600;
int   _fontsize_ = 10;



bool ausgabe = true;

void initOpenVG() 
{
	initWindowSize(0, 0, _width_, _height_);
	init(&_width_, &_height_);               
	Start(_width_, _height_);                   
	Background(0, 0, 0);                             
	StrokeWidth(1.0);
	WindowClear();
}

void plotArray(int32_t *array, int32_t arrlength, int y0) 
{
	float xscale=1.0, border=100.0;
	xscale = _width_ / (float) (arrlength-border);

	int i;

 	Fill(CYAN, 1); 
	Stroke(0, 255, 255, 1);
	     
	for(i=0;i<arrlength;i++)
	{		
		Line((VGfloat)xscale*i, (VGfloat) y0, (VGfloat)xscale*i, (VGfloat)(y0+array[i]));
	}
	End();  
}

void analyse(int32_t *array, int32_t arrlength)
{
	int32_t     sbuf[128];
	int32_t     bias, minr, maxr, baseline, 
				signalstart, signalend;

	int32_t maximum = array[0];
	int32_t minimum = array[0];
	
	int32_t maxpos, minpos;
	
	int32_t i;

	for(i=0;i<arrlength;i++)
	{
		if(array[i] > maximum)
		{
			maximum = array[i];
			
			maxpos = i;
		}

		if(array[i] < minimum)
		{
			minimum = array[i];
			
			minpos = i;
		}
	}
	
	maximum = array[0];
	minimum = array[0]; 

	for(i=0;i<arrlength; ++i)
	{
	 if(array[i] > maximum)    
	 {
		maximum = array[i];      
		maxpos = i;
	 }
	 if(array[i] < minimum)     
	 {
	   minimum = array[i];      
	   minpos = i;
	 }
	}


	// calculate baseline from last 100 array cells:
	// init vars
	baseline=(array[minpos] + array[maxpos]) / 2;  // init baseline by (min+max)/2

	minr=baseline - 1;
	maxr=baseline + 1;

	// auto-adjust:  
	for(i=arrlength-100; i<arrlength; ++i) 
	{    
	 // mean baseline
	 baseline = round((0.5*(float)array[i]  + 0.5*(float)baseline)) ;

	 // smoothed out max noise
	 if(array[i] >= baseline) maxr = round((0.6*(float)array[i]  + 0.4*(float)maxr)) +1 ;

	 // smoothed out min noise
	 if(array[i] <= baseline) minr = round((0.6*(float)array[i]  + 0.4*(float)minr)) -1 ;       
	}

	bias = max(baseline-minr, maxr-baseline) +1;  

	// noise reduction start/end 
	// drop small noise

	for(i=0;i<arrlength;++i) 
	{
	  if((array[i]>baseline) && (array[i] <= baseline + bias)) array[i] = baseline ; // little higher value => drop to baseline
	  else
	  if((array[i]<baseline) && (array[i] >= baseline - bias)) array[i] = baseline ; // little lower value => rise to baseline
	}


	// signalstart, signalend: threshold = bias + (bias/2)   
	signalstart = 0;

	i = 0;

	while((array[i]<=baseline + 4 * bias/3) && (i<SHRT_MAX-1)) ++i;

	signalstart = i;

	if(i > 0) signalstart -= 1;   

	signalend=arrlength-1;

	i=arrlength-1;

	while((array[i]<=baseline + + 4*bias/3) && (i>signalstart)) --i;

	signalend = i;

	if(i<arrlength-1) signalstart +=1;     

	if(ausgabe) 
	{
		cout << "Bias: " << bias << endl;
		cout << "Maximal: " << maximum << endl;
		cout << "Minimal: " << minimum << endl;
		cout << "Signalstart: " << signalstart << endl;
		cout << "Signalende: " << signalend << endl;
	}
}

int main(int argc, char *argv[])
{
	fstream datei;
	
	int32_t waveBuffer[SHRT_MAX];

	int32_t i;

	char s[3];

	initOpenVG();

	if(argc <= 1) audioCapture(waveBuffer, SHRT_MAX, "plughw:1,0", 1, 12000, 8);
	else
	{
		datei.open(argv[1], ios::in);
		
		for(i=0;i<SHRT_MAX;++i)
		{
			datei >> waveBuffer[i];
		}
		
		datei.close();
	}
	
	for(i=0;i<SHRT_MAX;i++)
	{
		waveBuffer[i] = waveBuffer[i] & 0x00ff;
	} 
	
	plotArray(waveBuffer, SHRT_MAX, 0);

	analyse(waveBuffer, SHRT_MAX);

	plotArray(waveBuffer, SHRT_MAX, 255);

	if(ausgabe)
	{
		uint8_t *wave;
	
		wave = (uint8_t *) malloc(SHRT_MAX+1);
		
		for(i=0;i<SHRT_MAX;i++) wave[i] = waveBuffer[i];
	
		playCaptured(wave, SHRT_MAX, "plughw:1,0", 1, 12000, 8);
	
		free(wave);
	}

	fgets(s, 2, stdin);

	SaveEnd("plott.raw");

	finish();
	
	return 1;
}
sind noch weitere Änderungen im Code drin.