рдзреНрд╡рдирд┐ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рддрд░рдВрдЧреЛрдВ рдХреА рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдФрд░ рдЖрдпрд╛рдоред рддрд░рдВрдЧреЛрдВ, рдмрджрд▓реЗ рдореЗрдВ, рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдЖрдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЖрдо рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рд╛рдЗрдирд╕реЛрдЗрдбрд▓ (рд╕рд╛рдЗрди), рд╡рд░реНрдЧ (рд╕реНрдХреНрд╡рд╛рдпрд░), рд╕реЙрддреЛрдЯреЛрде (рдЖрд░рд╛), рддреНрд░рд┐рдХреЛрдгреАрдп (рддреНрд░рд┐рдХреЛрдг), рдФрд░ рд╢реЛрд░ (рд╢реЛрд░)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ рд▓рд╣рд░ рдХреЗ рдореВрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ: рдЕрд╡рдзрд┐ рдФрд░ рдЖрдпрд╛рдоред
рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА (рд╣рд░реНрдЯреНрдЬрд╝ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрд╡рдзрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 44100Hz рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░, рдЕрд╡рдзрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 44100 рд╣реИред рдЕрдм рдЬрдм рдореВрд▓ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕реАрдзреЗ рддрд░рдВрдЧ рдкреАрдврд╝реА рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
1) рд╕рд╛рдЗрди рд▓рд╣рд░
float samplerate; //
float wavefrequency; //
float wavevolume; //
float period=samplerate/wavefrequency/2; //
float pi=3.14; // pi
int n;
for(int a=0;a<samplelenght;a++) //
{
n=wavevolume*sin(a*pi/period); // sine-
buffer[a]=n; //
}
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 1000 рдХрд┐рд▓реЛрд╣рд░реНрдЯреНрдЬрд╝ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде 16-рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕рд┐рдиреБрдПрд╕реЛрдЗрдбрд▓ рдзреНрд╡рдирд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдирдореВрдирд╛ рдЧреБрдгрд╡рддреНрддрд╛ 44100Hz рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рди рд╣реЛрдВрдЧреЗ: рдирдореВрдирд╛ = 44100, рд╡реЗрд╡рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА - 1000, рдирдореВрдирд╛ = 16384ред
рд╡реЗрд╡рд╡реЛрд▓реНрдпреВрдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдзреНрд╡рдирд┐ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЖрдиреБрдкрд╛рддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдмрд┐рдЯ рджрд░ (8-рдмрд┐рдЯ, 16-рдмрд┐рдЯ, 24-рдмрд┐рдЯ, рдЖрджрд┐) рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред 8-рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП - 0..255 рд╕реЗ рдПрдХ рдорд╛рди, 16 рдХреЗ рд▓рд┐рдП - 0 ... 65536, 24 рдХреЗ рд▓рд┐рдП - 0 ... 16777216ред рдХрд┐рд╕рдХреЛ рдЪреБрдирдирд╛ рд╣реИ? рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ 16 рд╕реЗ рдХрдо рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рдирдореВрдиреЗ рдХреЗ рдЖрдпрддрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдкрд╡рд╛рдж рд╣реИрдВ)ред
2) рд╕реЙрд╡реЛрде рддрд░рдВрдЧ (рджреЗрдЦрд╛)
float sr_2m=samplerate/wavefrequency; //
int c=0; //
//
for(int a=0;a<samplelenght;a++) //
{
if(c>=sr_2m) c=0; // ,
buffer[a]=wavevolume*(c/period)-wavevolume; //
c++;
}
3) рддреНрд░рд┐рдХреЛрдгреАрдп (рддреНрд░рд┐рдХреЛрдг)
float period=samplerate/wavefrequency/2; //
int c=period*2;
int c2=-1;
float sr_2m=period;
float sr=samplerate/wavefrequency/4;
for(int a=0;a<samplelenght;a++)
{
if(c>sr_2m) c=sr_2m,c2=-1;
if(c<0) c=0,c2=1;
buffer[a]=wavevolume*(c/sr)-wavevolume;
c+=c2;
}
4) рд╢реЛрд░
srand(wavevolume);
s1=mv.samplerate/wor,psc=s1+1,wov>>=7;
if(tabcnt==0)
{
for(ps=0;ps<mv.samplelenght;ps++)
{
if(psc>s1)
{
psc-=s1;
n=256*((rand()%(wov+1))-wov/2);
}
buffer[ps]=n;
psc++;
}
}
рдЕрдм рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдЖрдпрд╛рдореЛрдВ рдХреА рджреЛ рддрд░рдВрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
...
char buffer[16384];
float tone1=65,tone2=131;
float samplerate=44100/2; //
int a,b,amp1=128,amp2=64;
for(a=0;a<16384;a++)
{
b=amp1*sin(a*pi/samplerate/tone1)+amp2*sin(a*pi/samplerate/tone2);
if(b>128) b=128;
if(b<-128) b=-128;
buffer[a]=b;
}
...
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзреБрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рддрд░рдВрдЧ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИ
рд╕рдВрд╢реНрд▓реЗрд╖рдг рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХреЛрдИ рднреА рдзреНрд╡рдирд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА:
1) рдПрдХ рдЕрдореАрд░ рдзреНрд╡рдирд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░рдВрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ
рд░реВрдкреЛрдВ: рд╕рд╛рдЗрди + рд╡рд░реНрдЧ, рддреНрд░рд┐рдХреЛрдг + рджреЗрдЦрд╛, рдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд░рд╛рдХреНрд╖рд╕: рджреЗрдЦрд╛ + рд╡рд░реНрдЧ +
рддреНрд░рд┐рдХреЛрдг + рдЖрд░реАред
2) рдкрд░реНрдХреНрдпреВрд╢рди (рдЯреЛрдкреА) рд╢реЛрд░ + рд╕рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред