Witam!
Chciałbym, aby mój program reagował na basy w odtwarzanym strumieniu (wyświetlenie odpowiedniej treści w labelu).
Chodzi o uderzenia basu.
Korzystam z biblioteki BASS.DLL.
Wie ktoś może jak się z tym uporać?
Proszę o pomoc.
Witam!
Chciałbym, aby mój program reagował na basy w odtwarzanym strumieniu (wyświetlenie odpowiedniej treści w labelu).
Chodzi o uderzenia basu.
Korzystam z biblioteki BASS.DLL.
Wie ktoś może jak się z tym uporać?
Proszę o pomoc.
struct TSoundFile {
HSAMPLE SNDHandle;
DWORD TWaveData[2049];
float Data[513];
t3dpoint soundpos;
AnsiString FileName;
float Beat;
float max;
bool Loaded;
bool global;
//-----------------------------------------------------recording routine--------
TWaveHeader RECORD_HEADER;
TMemoryStream * RECORD_STREAM;
HRECORD rchan; // recording channel
HSTREAM chan; // playback channel
void init_recording_stream();
//-----------------------------------------------------recording routine--------
void Start_RECORDING();
void getinfoWAV(int od, int zakres);
void getinfoRECWAV(int od, int zakres);
void LoadFromFile(AnsiString filename);
void play3Rwave();
void stop();
};
void TSoundFile::LoadFromFile(AnsiString filename)
{
if (Loaded == true) BASS_StreamFree(SNDHandle);
FileName = filename;
if (FileExists(filename) == false) {Loaded = false; return; }
SNDHandle = BASS_StreamCreateFile(FALSE, FileName.c_str(), 0, 0, BASS_SAMPLE_FX);
Loaded = true;
}
void TSoundFile::getinfoWAV(int od, int zakres)
{
int i;
float suma;
if ( (zakres < 0) || (zakres > 512) ) return;
// if BASS_ChannelIsActive(wav.handle) <> BASS_ACTIVE_PLAYING then begin result := 0; Exit; end;
BASS_ChannelGetData(SNDHandle, Data, BASS_DATA_FFT1024);
max = 0.0f; suma = 0.0f;
for (i = od; i <= zakres; i++) {
if (Data[i] > max) max = Data[i];
suma = suma + Data[i];
}
Beat = suma;
}
pierwsze wartosci odczytane z data to bas jak pamietam zobacz se w winampie czy jak jest bas to po lewej skacza kreski w gore