Witam.
Za pomocą biblioteki BASS próbuję wyrysować przebieg czasowy dźwięku (czyli wykres amplitudy od czasu) z wczytanego pliku .WAV. Uzyskany obraz nie wygląda jednak tak jak powinien:
Użyłem w Borland C++ Builderze następującego kodu:
DWORD r, l;
DWORD OK;
HSTREAM Uchwyt;
float r2, l2;
Uchwyt = BASS_StreamCreateFile(False, "file.wav", 0, 0, BASS_STREAM_DECODE);
while (BASS_ChannelIsActive(Uchwyt) > 0)
{
OK = BASS_ChannelGetLevel(Uchwyt);
r=HIWORD(OK);
l=LOWORD(OK);
if (r <= 16384)
{
r2 = (float)r/16384;
r2 = (1-r2)*-1;
}
else
{
r2 = (float)(r-16384);
r2 = r2/16384;
}
if (l <= 16384)
{
l2 = (float)l/16384;
l2 = (1-l2)*-1;
}
else
{
l2 = (float)(l-16384);
l2 = l2/16384;
}
//rysowanie na komponentach TChart
Chart1->Series[0]->Add(r2, "", clGreen);
Chart2->Series[0]->Add(l2, "", clGreen);
}
Funkcja BASS_ChannelGetLevel zwraca wartości z przedziału od 0 do 32768. Chciałbym by wykres był znormalizowany i wyświetlał się tak jak w edytorach dźwięku np. AudaCity czy GoldWave - w związku z tym musi przyjmować wartości od -1 do 1. Jako środek przedziału ustanowiłem więc połowę zwracanego zakresu czyli 16 384 i dokonałem odpowiednich obliczeń, które widać powyżej. Teoretycznie wszystko powinno być dobrze, a jednak wykres rysuje się inaczej niż np. w wyżej wymienionych programach...
Może ktoś będzie mi w stanie pomóc bądź zauważy błąd, którego ja nie mogę jak na razie dostrzec ?
Pozdrawiam.