Just nu i M3-nätverket
Jump to content

Går det ändra typ i ett funktionshuvud?


vlise

Recommended Posts

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.

 

 

Link to comment
Share on other sites

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);

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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=).

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...