Und nochmal bisschen umgestrickt.

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

#include <stdio.h>

#include "diaSound.hpp"

bool debug = false;

int main()
{
	fstream datei;
	
	vector<int> input;

	unsigned int i, SHRT_MAX = 32767;

	char *wave;
	
	int32_t inputWave[SHRT_MAX];
	
	input = audioCapture(SHRT_MAX, "plughw:1,0", 1, 12000, 8);
	
	wave = (char *) malloc(input.size());
	
	if(debug) datei.open("test.csv", ios::out);
	
	for(i=0;i<input.size();i++)
	{
		wave[i] = input[i];

		inputWave[i] = input[i];
		if(debug) datei << input[i] << endl;
	} 
	
	if(debug) datei.close();
	
	playCaptured(wave, input.size(), "plughw:1,0", 1, 12000, 8);
	
	free(wave);
	
	return 1;
}
Nun liegt also ein Array als int32_t vor mit exakt der Länge SHRT_MAX (wenn ich SHRT_MAX nicht deklariere bekomme ich eine Fehlermeldung! Fehlt mir da eine Headerdatei?).

und bitte auch möglichst nirgends int oder unsigned int verwenden, immer nur int32_t und uint32_t

das gleiche gilt für char und unsigned char (stattdessen möglichst int8_t, uint8_t)
Was hat das für einen Vorteil?