Code:
for(i=0;i<SHRT_MAX;i++) {
waveBuffer[SHRT_MAX] = (int32_t) input[i] & 0x00ff; <<<< hier ist ein Fehler!
// richtig:

for(i=0;i<SHRT_MAX;++i) {
waveBuffer[i] = input[i] & 0x00ff; <<<< richtig !
Wo du recht hast . Ist mir aber auch schon aufgefallen, damit geht es natürlich.

Die Bias... Ausgabe habe ich auch schon eingebaut, genau so wie im Falle eines Debug das Speichern von input und waveBuffer sowie die Möglichkeit eine gespeicherte Datei wieder zu laden.

Mit letzterem habe ich allerdings noch ein paar Schwierigkeiten.

Filtern ist auch in Analyse integriert.

Sobald das Laden funktioniert bau ich den Code hier ein.

- - - Aktualisiert - - -

Sooooo. 200x den Fehler übersehen. Dann doch gefunden

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

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

#include "diaSound.hpp"

bool debug = false;
bool ausgabe = true;

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

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

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

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

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


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

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

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

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

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

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

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

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


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

	i = 0;

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

	signalstart = i;

	if(i > 0) signalstart -= 1;   

	signalend=SHRT_MAX-1;

	i=SHRT_MAX-1;

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

	signalend = i;

	if(i<SHRT_MAX-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 input[SHRT_MAX], waveBuffer[SHRT_MAX];

	int32_t i;

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



		cout << i << " -> " << input[i] << endl;
		if(debug) datei << input[i] << endl;
	} 
	
	if(debug) datei.close();

	analyse(waveBuffer);

	if(debug)
	{
		datei.open("waveBuffer.csv", ios::out);
		
		for(i=0;i<SHRT_MAX;i++) datei << waveBuffer[i] << endl;
		
		datei.close();
	}
	
	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);
	}
	
	return 1;
}
Jetzt bist du auch in der Lage eine vom programm erstellte Datei wieder zu laden abspielen zu lassen. Gib einfach hinter dem Programmnamen den Namen der Datei ein. Fertig. Dann umgeht er die Aufnahme und nimmt stattdessen den Input der Datei,

- - - Aktualisiert - - -

Plotten kannst du, wenn du selbst experimentierst dann jetzt auch. Geh einfach auf http;//sound.projekt-hirnfrei.de/index.php, lade die Datei hoch und warte kurz. Schon wird dir das Ergebnis angezeigt.