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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
void TForm1::Capure_Audio(TMessage &Msg)
{
unsigned long i = 0;
double * lhs;
double tmp;
short sval;
long n;
// open file
ofstream output("SOUND.WAV", ios::out | ios::binary);
// RIFF chunk
output.write("RIFF",4);
n = (_16Bits/8);
n *= Mono*10*Form1->waveform.nSamplesPerSec;
n += 44 - 8;
output.write((char *)&n,4);
output.write("WAVE",4);
// FORMAT chunk
output.write("fmt ",4);
n = 16;
output.write((char *)&n,4);
n = 1;
output.write((char *)&n,2);
n = Mono;
output.write((char *)&n,2);
n = Form1->waveform.nSamplesPerSec;
output.write((char *)&n,4);
n = (_16Bits/8)*Mono*Form1->waveform.nSamplesPerSec;
output.write((char *)&n,4);
n = (_16Bits/8)*Mono;
output.write((char *)&n,2);
n = _16Bits;
output.write((char *)&n,2);
// DATA chunk
output.write("data",4);
n = (_16Bits/8);
n *= Mono*10*Form1->waveform.nSamplesPerSec;
output.write((char *)&n,4);
lhs=new double[10*Form1->waveform.nSamplesPerSec];
while (i< ((PWAVEHDR) Msg.LParam)->dwBytesRecorded)
{
short m1,m2,m;
short* signal = (short*)&((PWAVEHDR)Msg.LParam)->lpData[i];
i += L_Frame_16k * sizeof(short);
m1 = 0;
m2 = 0;
for (short j =0; j < L_Frame_16k; j++) // 320 data 16k => 20 ms
{
m = signal[j];
//normalement lhs est censé contenir les son que j'ai capturé mais je sais pas quoi mettre
lhs[j] = ?
/*juste pour le représentation dans le TChart genre Oscilloscope*/
if ( m > 0 )
m1 = max(m1, m);
else
m2 = min(m2, m);
}
CGauge1->Progress = max( m1,-m2)*scale;
if ((CGauge1->Progress >=10 ))
{ Series1->Delete(0);
if ( m1+m2 >=0)
{
Series1->AddXY((++ilp)*_20_msec,m1*scale);
/*j'ai mis les valeurs des points du TSeries dans le memo par nombre d'enregistrement=3*/
if (nb_Rec==0)
Memo1->Lines->Add(m1*scale);
if (nb_Rec==1)
Memo2->Lines->Add(m1*scale);
if (nb_Rec==2)
Memo3->Lines->Add(m1*scale);
}
else
{
Series1->AddXY((++ilp)*_20_msec,m2*scale);
if (nb_Rec==0)
Memo1->Lines->Add(m2*scale);
if (nb_Rec==1)
Memo2->Lines->Add(m2*scale);
if (nb_Rec==2)
Memo3->Lines->Add(m2*scale);
}
}
}
i = waveInAddBuffer(h_WaveIn, (PWAVEHDR) Msg.LParam, sizeof(WAVEHDR));
if ( i != 0 )
ShowMessage("Error_Audio_Capture " + IntToStr(i) );
//censé entrer les données dans le fichier SOUND.VAW mais ... :(
for (i = 0; i < 10*Form1->waveform.nSamplesPerSec; i++)
{
tmp = lhs[i];
sval = short ( short(tmp) *32767/100);
output.write((char *)&sval,(_16Bits/8));
}
output.close();
} |
Partager