[C++][Winapi -> wave] interpretacja

0

Nagrywam dźwięki do jednego bufora [z mikrofonu]
Po zakończeniu mam mam długi string (zmiennych typu char)
Oscyloskop narysowałem w prosty sposó zamieniając char na int

kawałek pseudokodu:

for(i=0;i<dlugosc_buffera;i++)
{
  y = (int)Buffer[i];    //tutaj "tłiumacze dane na cyfre
  RysujLinie_do_y(y);//tu rysuje
}

Problem w tym ze chciałem np. sprawdzić największą uzyskaną wart.
żeby np. określić czy nie nagrano głośnejszego dźwięku..
no i tu niespodzianka.. nie ważne czy nagrywam w absolutnej ciszy czy nie.
Wartość max jest zawsze taka sama..
Sądze że żle interpretuje bufor.

Ktoś może mi pomóc?

0
Ranma napisał(a)

Po zakończeniu mam mam długi string (zmiennych typu char)

Buffor z 8-bitowymi samplami to NIE JEST żaden string [!!!] [!!!]
... i jak już to typu unsigned char

[...] nie ważne czy nagrywam w absolutnej ciszy czy nie.
Wartość max jest zawsze taka sama..

Znowu dokumentacja :]

8-bit PCM
Max Value: 255
Min Value: 0
Midpoint: 128 <--- [!!!] [!!!] [!!!]

16-bit PCM
Max Value: 32,767
Min Value: ?32,768
Midpoint: 0

0

dzięki,dzięki ale następnym razem możesz mi prosze napisać gdzie dostane taką dokumentacje.
A poza tym nie rozumiem co miała mai dać ta mała tabelka..
Jak mam wyciągnąc te wartośći i dowiedzieć sie czy to było np. głośno czy cicho?

0

dzięki,dzięki ale następnym razem możesz mi prosze napisać gdzie dostane taką dokumentacje.
A poza tym nie rozumiem co miała mai dać ta mała tabelka..
Jak mam wyciągnąc te wartośći i dowiedzieć sie czy to było np. głośno czy cicho?

0

dzięki,dzięki ale następnym razem możesz mi prosze napisać gdzie dostane taką dokumentacje

Ściągnij sobie MSDN Library dla VC++ 6.0, lub jak używasz BCB to tam jest MS SDK Help Files (w każdym razie być powinno). Zresztą info na temat "kodowania" sampli znajdziesz w prawie każdym opisie formatu *.wav.

A poza tym nie rozumiem co miała mai dać ta mała tabelka..

:D prawdopodobnie rozwiązanie twojego problemu [glowa]

Jak mam wyciągnąc te wartośći i dowiedzieć sie czy to było np. głośno czy cicho?

Jakbyś przeanalizował to co napisałem wcześniej, to zauważyłbyś istotną róźnicę - midpoint value [!!!] Sample 8 bitowe nie są kodowane w formacie U2 - czyli nie ma tu liczb ujemnych.

0

ok zaczynam od dokumentracji bo to mi się najbardziej przyda..
szukałem w MSDS hasło "download MSDN Library for VC++ 6.0"
i szczerze mówiąc nie znalazłem.. :[

Nie mógłbys mi napisać linka? [???] to by i Tobie i mnie ułatwiło życie:P

dzięki

0

Szukaj na eMule, Shareazie itp.

0

Ok... dzieki za rade.. :]
a teraz wiem żę moze to trocheprzesadne ... ale czy mógłbyś mi wytłumaczyś jak krowie na rowie co mam zrobić z tym buforkiem.. tak czytałem to w encyklopedii ale jak sie domyślasz nie dało mi to nic :-|
Wiec prosze niech ktoś mi napisze to w stylu "for dummies".
Sorki za problem:P
i jeszcze raz dzięki za tip do "MSDN Library" :]

0

ale czy mógłbyś mi wytłumaczyś jak krowie na rowie co mam zrobić z tym buforkiem

Opcja dla 8-bitowych sampli MONO

int y;
unsigned char *Buffer=....; 

for(i=0;i<dlugosc_buffera;i++)
{
  y = Buffer[i]-128;
  y<<=24;                 //<--- konwersja z sampli 8bit do 32bit
  RysujLinie_do_y(y);
}

Ta konwersja jest po to, żebyś nie musiał implementować oddzielnej funkcji RysujLinie_do_y dla 16 i 24 bitowych sampli, które też będziesz musiał znormalizować do 32 bitów.

0

ok to rozumiem:

  y<<=24;                 //<--- konwersja z sampli 8bit do 32bit

I ostatnie:P mam nadzieje pytanie...:
Jak mam to zinterpretować? Czy wartość większa = głośniejszy dźwięk czy jest to jego frekfencja?

jak rozumiem to pytanie dotyczy "formatu *.wav" tak?

0

Czy wartość większa = głośniejszy dźwięk czy jest to jego frekfencja?

Niekoniecznie. Wysoka wartość szczytowa (peak) nie musi oznaczać głośnego materiału audio. Przykład: buffor 1000 sampli, z czego 2 sample (np. 1 i 500) są ustawione na maxa (wartość absolutna), a pozostałe 998 na 0. I co, głośno będzie [???]... no raczej nie :] Jak chcesz obliczyć faktyczną głośność to musisz obliczyć wartość RMS (root mean square) dla danego buffor'a lub całego materiału audio. O ile się nie myle to wartość RMS dla podanego przykładu wynosi ~ -27dB.

Tu masz wzór na RMS (miluśki ;p)
user image

N - liczba sampli
X(1)..X(N) - wartości kolejnych sampli

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