Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.09.2009, 15:42

Wave Datei auslesen und Datenteil streamen

Hi an alle,

ich muss eine Wave Datei mit den ANSI C Dateifunktionen auslesen und dann den Datenteil in 160b große Blöcke splitten und diese an ein RT-Protocol zu hängen und an ein VOIP Gerät verschicken. Vorab werden die Daten noch encodiert...(GSM, aLaw, uLaw)
Ich habe das Problem, den Datenteil korrekt zu splitten...

Hier mal mein Code wie ich es bisher mache...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Header wird bereits vorher in anderer Methode ausgelesen 

int nWaveSize = szDataSize / szBlockAlign; 
short *pData; 
pData =(short*)malloc(2*nWaveSize); 
for(int i = 0; i < nWaveSize; i++) 
{ 
     fread(&pData[i], 1, 1, pWaveFile); 
} 
fclose(pWaveFile); 
int AnzSamples = nWaveSize / 160; 
int nOffset = 0; 

for(int x = 0; x < AnzSamples; x++) 
{ 
     short* pBuffer = new short[160]; 
     int nIndex = 0; 
     while((nOffset + 160) < nWaveSize) 
    { 
          for(int y = 0; y < 160; y++) 
    } 

    pBuffer[nIndex] = (pData[nOffset] + pData[nOffset + 1])/2; //Das hier     ist sicher verkehrt... 

    //habe hier nur versucht da ja ein Sample aus 2 byte besteht diese zusammenzufassen...


}
//buffer wird dann zum Versand genommen, danach geleert und mit 

//den neuen Daten gefüllt.


Allerdings hab ich es jetzt schon auf verschiedene Arten probiert. am Phone kommt ausschließlich Rauschen an...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

04.09.2009, 15:54

C-/C++-Quelltext

1
2
3
4
for(int i = 0; i < nWaveSize; i++) 
{ 
     fread(&pData[i], 1, 1, pWaveFile); 
}


Warum nicht einfach?

C-/C++-Quelltext

1
fread(&pData[i], 1, nWaveSize, pWaveFile);


Weiters produzierst du Memory Leaks weil da ein free(pBuffer) in der Schleife fehlt und wie willst du überhaupt nach der for Schleife auf pBuffer zugreifen und warum erzeugst du pBuffer eigentlich andauernd neu, was is diese komische for Schleife in der while schleife in der for Schleife, ...!?

3

04.09.2009, 16:07

Uppps habs gerade gesehen...war wohl zu schnell beim reinsetzen der gekürzten Fassung meines Codes....

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Header wird bereits vorher in anderer Methode ausgelesen 

int nWaveSize = szDataSize / szBlockAlign; 
short *pData; 
pData =(short*)malloc(2*nWaveSize); 
for(int i = 0; i < nWaveSize; i++) 
{ 
     fread(&pData[i], 1, 1, pWaveFile); 
} 
fclose(pWaveFile); 
int AnzSamples = nWaveSize / 160; 
int nOffset = 0; 

for(int x = 0; x < AnzSamples; x++) 
{ 
     short* pBuffer = new short[160]; 
     int nIndex = 0; 
     while((nOffset + 160) < nWaveSize) 
     { 
          for(int y = 0; y < 160; y++) 
          {
               pBuffer[nIndex] = (pData[nOffset] + pData[nOffset + 1])/2; //Das hier     ist sicher verkehrt... 

              //habe hier nur versucht da ja ein Sample aus 2 byte besteht diese zusammenzufassen... 

               ...
               //Hier wird dann der pBuffer weiterverarbeitet

               ...
               free(pBuffer);
           }
     } 

    
} 
//buffer wird dann zum Versand genommen, danach geleert und mit 

//den neuen Daten gefüllt.


Bei dem anderen hast du recht...spart aber auch nur Performance...hatte es nur aus einem Beispiel so übernommen...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

04.09.2009, 16:11

werden nIndex und nOffset auch irgendwo hochgezählt und y irgendwo verwendet!?

5

04.09.2009, 16:17

Ja die werden hochgezählt. Es ist doch bloß ein Codeausschnitt...

Aber was mir gerade aufällt das nIndex und y die gleiche Aufgabe haben....lach...na da war ich ja mal ganz fuchsig...kannst mal sehen wie mich diese blöde Aufgabe um den Verstand bringt...

Werbeanzeige