[dźwięk] problem ze zrozumieniem dokumentacji

0

Witam.
Jakoś nie wiedziałem za bardzo gdzie wrzucić taki temat bo nie jest on związany z żadnym konkretnym językiem. Gdyby jednak się okazało to złym miejscem to sorry.

Mam do napisania program wizualizujący przebieg napięcia podłączonego do mikrofonu karty dźwiękowej. Używam do tego biblioteki BASS. I jako że ogólnie z dźwiękiem i bibliotekami do obsługi kart/efektów dźwiękowych nie miałem wcale styczności mam problem ze zrozumieniem dokumentacji.

Dostaje tablice bajtów z nagranymi próbkami, w dokumentacji jest ona opisana w ten sposób:

The pointer to the buffer containing the recorded sample data. The sample data is as follows: 8-bit samples are unsigned, 16-bit samples are signed, 32-bit floating-point samples range from -1 to +1 (not clipped, so can actually be outside this range).

I nie wiem jak te próbki przekształcić do czegoś proporcjonalnego do napięcia na wejściu.

I przy okazji jakby ktoś miał jakiś podobny projekt napisany gdzieś i mógl się nim podzielić (wyłącznie do celów "podglądnięcia" jak co jest rozwiązane) byłbym wdzięczny :).

0

Jeśli tablica bajtów, to musisz ją rzutować wskaźnik odpowiedniego typu, w zależności od formatu sampli. Na przykład jeśli sample są typu float, to:

float *smps = (float*)tablica_char;

for(int i = 0;..;++i)
{
   ... = smps[i];
}

Podobnie z samplami 16-bitowymi.

0

Musisz miec poziom odniesienia.

Jesli dokonasz kalibracji i przy danych ustawieniach glosnosci dowiesz sie, ze:
0V daje wartosc 0
1V daje dla przykladu wartosc 100
to wiesz, ze zakres 0..255 odpowiada 0V..2,55V, a zatem mozesz zalozyc, ze probka bajtowa o wartosci 123 odpowiada napieciu 1,23V.

0

Ok, to już mniej więcej łapie.
Teraz pytranie z innej beczki: tą tablice dostaje co jakiś czas w callbacku, czy moge sobie założyć że poszczególne próbki z tablicy były pobrane w równych odstępach czasu?

0

Możesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1