Wave datei einlesen in C++



  • Hallo, hat jemand ein C-Programm um eine Wav-Datei einzulesen. Ich habe ein Programm geschrieben, in dem ich AWGN (weißes Rauschen) erzeugt habe, dieses möchte ich jetzt dem Audiosignal additiv hinzufügen. Daher benötige ich ein kleines C-Prog um eine Wavedatei einzulesen und die Daten in einem Array (double) und die Abtastfrequenz in einer Variable (int) zu Speichern. Kann mir da vlt. jemand helfen. Hab schon überall geschaut, aber im Netz und in Büchern werde ih nicht so recht fündig!
    Danke

    #include <stdio.h>
    #include <malloc.h>
    
    double* mersene_twister(double pointer[],int len);
    
    int main(void)
    {
    	double *u;
    	double *v;
    	double *r;
    
    	int i,ii;
    	int len;
    	int lenr=50;				//Zur Laufzeit zu ermitteln!							
    
    	len=2*lenr;
    
    	u=(double*)malloc(len*sizeof(double));
    	if(u==NULL)
    	{
    		printf("Es konnte kein Speicher fuer u reserviert werden!");
    		return(0);
    	}
    
    	v=(double*)malloc(len*sizeof(double));
    	if(v==NULL)
    	{
    		printf("Es konnte kein Speicher fuer v reserviert werden!");
    		return(0);
    	}
    
    	r=(double*)malloc(lenr*sizeof(double));
    	if(r==NULL)
    	{
    		printf("Es konnte kein Speicher fuer r reserviert werden!");
    		return(0);
    	}
    
    	u=mersene_twister(u,len);
    	v=mersene_twister(v,len);
    
    	for (i=0,ii=0;i<len,ii<lenr;i++,ii++)
    	{
    		r[ii]=(u[i]*u[i])+(v[i]*v[i]);
    		if(r[ii]>1){ii--;}
    	}
    
    	for (ii=0;ii<lenr;ii++)
    	{
    		printf("\n%d %lf",ii,r[ii]);
    	}
    
    }
    


  • Wenn du an der genauen Spezifikation interessiert bist (was du offensichtlich bist, wenn du das Format selbst einlesen willst), dann kannst du mal hier starten:
    http://de.wikipedia.org/wiki/RIFF_WAVE

    Weiter unten findest du dann auch noch die genaue Spezifikation (als Link).

    Du könntest auch eine Library verwenden, die das für dich macht.

    So auf die schnelle habe ich das hier gefunden:
    http://www.mega-nerd.com/libsndfile/

    Über Qualität und Benutzbarkeit kann ich aber nichts sagen. Vielleicht musst du eine andere suchen.


  • Mod

    Das zählt dann wohl zu den speziellen Fragen, die du, wie ich in deinem anderen Thread angemerkt habe, besser im C Unterforum stellen solltest. Ansonsten kann ich dir nur den (wahrscheinlich ziemlich nutzlosen) Rat geben, dass C von Haus aus das wave Format nicht kennt. Daher kannst du:

    a) Das wave Format irgendwo nachlesen und deine eigene Importfunktion schreiben (nicht empfohlen)
    b) Jemanden suchen, der a) schon gemacht hat und eine passende C Bibliothek veröffentlicht hat (empfohlen)


Log in to reply