Just nu i M3-nätverket
Gå till innehåll

Går det ändra typ i ett funktionshuvud?


vlise

Rekommendera Poster

Viste inte rikigt hur jag skulle formulera rubriken på ett kort sätt. Det kanske inte heter funktionshuvud heller:P

 

Det är så här att jag har skrivt ett program eller man kanske ska säga två program. En del som spelar in wavefiler och en del som klipper wavefilerna och samplar ner dem. Jag har lyckats gjort programmen i två fristående delar.

 

Nu vill jag kunna sätta ihop dem. allt har gått bra. Men sen har jag en fråga i effektivitets syfte.

 

Det är så här att när jag spelar in wavefilerna använder jag mig av buffrar som är av typen char.

När jag klipper filerna använder jag mig av buffrar som beror på hur källfilen är inspelad. Alltså om källfilen är inspelad i 8bitar använder jag mig av typen char när jag deklarerar buffrarna, om filen däremot är inspelad i 16 bitar använder jag mig av short för att deklarera.

 

just nu måste jag kalla på en speciell funktion beroende på om det är char eller short, men funktionerna i sig gör exakt samma sak. Detta medför att jag måste ha dubbelt så mycket kod.

 

ex om jag har:

char* SrcBuffer;

char value = 5;

SrcBuffer = new char[value];

 

 

och sen klallar på en funktion

Dosomething(SrcBuffer);

 

då ser den kallade funktionshuvudet ut så här:

void DoSomething(char* SrcBuffer)

{

Blabla

}

 

om jag däremot har short:

 

short* SrcBuffer;

short value = 5;

SrcBuffer = new short[value];

 

 

och sen klallar på en funktionen

Dosomething(SrcBuffer);

 

då ser den kallade funktionshuvudet ut så här:

void DoSomething(short* SrcBuffer)

{

Blabla

}

 

Jag har alltså två funktioner som ser snarlika ut och dom gör samma sak.

Men som jag sa innan då måste jag ha dubbelt så mkt kod. Finns nått sätt där jag slipper detta? där t.ex funktionshuvudet ändras beroende på om det är en short eller char?

Hehe kanske lite luddigt men hoppas ni förstår...annars får jag förklara mer.

 

 

Länk till kommentar
Dela på andra webbplatser

Skulle väl inte vara helt lätt att förstå om jag inte läst din tidigare tråd ;)

 

När det gäller själva funktionsanropet så går det ju alltid att låtsas att SrcBuffer alltid består av bytes (även när det är short). Sedan beror det ju på vad koden inuti DoSomething gör och hur beroende den är av att veta vilket det är egentligen.

 

short* SrcBuffer;

short value = 5;

SrcBuffer = new short[value];

Dosomething((char*)SrcBuffer);

 

Länk till kommentar
Dela på andra webbplatser

Tack för länken..viste inte att det hette så, tänl vad man får lära sig här.

Men jag tror inte det behöver vara så avancerat.

 

Egentligen är funktionen downsampel() och CutFile() de enda funtionerna som är mest beroende av om det är char eller short.

 

Men under min dagliga långpromenad på 10km igårkväll så kunde jag inte låta bli att tänka på det. Och tror mig ha kommit fram till nått.

 

om jag har rätt så funkar det så här.

 

	
char* Buffer = new char[10];
for(int i = 0; i <10; i++)
{
     Buffer[i] = i;
}

//Denna skriver ut samtliga värden i Buffer
cout << "char värden = " << endl;
for(i = 0; i <10; i++)
{
    cout <<(unsigned short)(unsigned char)Buffer[i] << " ";
}	}
cout << endl;
//Denna skriver ut alla short ut Buffer
cout <<"short värden = " << endl;
for(i = 0; i <10; i +=2)
{
     cout <<(unsigned short)(unsigned char)Buffer[i] << " ";;
}

delete[] Buffer;
_getch();
return 0;

 

Stämmer detta så kanske jag kan lösa det genom att deklarera alla buffrar som char, och sen leta reda på alla short när källfilen är inspelade i 16bitar.

 

[inlägget ändrat 2009-08-14 08:34:03 av vlise]

Länk till kommentar
Dela på andra webbplatser

Jag tror jag löste det...jag deklarede alla buffrar som char.

 

Jag upptäckte att jag behöver ta hänsyn till short endast när jag ska sampla ner filerna. Det kan jag ju få reda på genom att kolla i exekvieringen om filen är inspelade i 16 bitar eller ej. Det blev ju inte så många extra rader.

 

Haha detta betyder ju att förra tråden var helt onödig=). Man man kan ju se det som så att jag lärde mig endel i alla fall. ibland måste man gå onödiga vägar för att lära sig nått=).

 

Länk till kommentar
Dela på andra webbplatser

Kul att du har löst problemet! :thumbsup:

 

Ja, man behöver skriva om en del program då och då för att man har lärt sig ett bättre sätt att lösa problemet.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...