Euhh bonjour à tous,
etudiant, actuellement je suis sur un projet de réconnaissance vocal et je voudré capturé les code bianire des signaux qui entre ou qui sort sur le périférique.
j'ai codé quelques code en c++ builder qui arrive a capturer le signal et qui ensuite je tente de reconvertir en Binaire

je sais pas trop si c'est une bonne méthode ou pas...
voila le code :
[CODE]
void TForm1::Capure_Audio(TMessage &Msg)
{
unsigned long i = 0;
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];
if ( m > 0 )
m1 = max(m1, m);
else
m2 = min(m2, m);
}
CGauge1->Progress = max( m1,-m2)*scale;
if ((CGauge1->Progress >=30 ))
{
Series1->Delete(0);
if ( m1+m2 >=0)
{
Series1->AddXY((++ilp)*_20_msec,m1*scale);
//ListBox1->Items->Add(DecToBin(m));
//Memo1->Lines->Add(DecToBin(m));
Memo2->Lines->Add(DecToBin(m));
/*remplir les matrice de point et pour la numérisation*/
}
else
{
Series1->AddXY((++ilp)*_20_msec,m2*scale);
//ListBox1->Items->Add(DecToBin(m));
//Memo1->Lines->Add(DecToBin(m));
Memo2->Lines->Add(DecToBin(m));
}
}
}
i = waveInAddBuffer(h_WaveIn, (PWAVEHDR) Msg.LParam, sizeof(WAVEHDR));
if ( i != 0 )
ShowMessage("Error_Audio_Capture " + IntToStr(i) );
}
[/CODE]
mais il y un bug :
une violation d'adresse se présente lorsque le programme s'exécute de quelques instants voir 5 seconds
La question est donc : Y a -t- il un moyen plus court? genre fonction API etc..
Merci Cordialement