So. Code eingebaut, etwas angepasst, ausprobiert. Läuft!

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

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

#include "diaSound.hpp"

bool debug = false;
bool ausgabe = true;

void filtern(int32_t *array)
{
   int32_t     sbuf[128];
   int32_t     bias, minr, maxr, baseline, 
               maximum, minimum, maxpos, minpos,
               signalstart, signalend;
   
   uint16_t  i;


   // dynamics: min, max 

   maximum = array[0];
   minimum = array[0]; 
  
   for(i=0;i<SHRT_MAX; ++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=SHRT_MAX-100; i<SHRT_MAX; ++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<SHRT_MAX;++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=SHRT_MAX-1;
   
   i=SHRT_MAX-1;
   
   while((array[i]<=baseline + + 4*bias/3) && (i>signalstart)) --i;
   
   signalend = i;
   
   if(i<SHRT_MAX-1) signalstart +=1;     
}

void analyse(int32_t *waveBuffer)
{
	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;
		}
	}
	
	filtern(waveBuffer);
}

int main()
{
	fstream datei;
	
	int32_t input[SHRT_MAX], waveBuffer[SHRT_MAX];

	int32_t i;

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



		
		if(debug) cout << i << " -> " << input[i] << endl;

		if(debug) datei << input[i] << endl;
	} 
	
	analyse(waveBuffer);
	
	if(debug) datei.close();

	if(ausgabe)
	{
		uint8_t *wave;
	
		wave = (uint8_t *) malloc(SHRT_MAX+1);
		
		for(i=0;i<SHRT_MAX;i++) wave[i] = input[i] & 0x00ff;
	
		playCaptured(wave, SHRT_MAX, "plughw:1,0", 1, 12000, 8);
	
		free(wave);
	}
	
	return 1;
}
Rauscht noch ein wenig, aber ich denke es ist schon um einiges besser!

Kannst du es noch nicht testen?

- - - Aktualisiert - - -

HALT! Kommando zurück!

Ich dussel habe vergessen die richtige Variable an playCaptured zu schicken .

Umbauen und testen!

- - - Aktualisiert - - -

Gerade versucht. Gibt nur zwei kurze Knacken