Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Delphi]Wzór do skali LED, źle podstawione dane?

andros1245 22 Mar 2010 18:52 953 10
  • #1 22 Mar 2010 18:52
    andros1245
    Poziom 10  

    Witam!

    Chciałbym policzyć natężenie dźwięku w dB do stereofonicznej skali led.
    Niestety mam pewien problem, ponieważ źle liczę to natężenie i nie wiem, gdzie jest błąd. Oto kod:

    Code:

    var
      level, left, right: DWORD;
      lewy, prawy : Extended;
    begin
      level:=BASS_ChannelGetLevel(uchwyt);
      left:=LOWORD(level);
      right:=HIWORD(level);
      lewy := Math.LogN(10,10)*(left/0.000000000010);


    Kod jest oczywiście jak narazie tylko dla lewego kanału. Kiedy uruchamiam program jest taki efekt:

    [Delphi]Wzór do skali LED, źle podstawione dane?

    Po włączeniu muzyki:

    [Delphi]Wzór do skali LED, źle podstawione dane?

    Nie mam pojęcia gdzie popełniam błąd.

    Proszę o pomoc.

    0 10
  • #3 22 Mar 2010 21:42
    arnoldziq
    Moderator Programowanie

    Najbardziej interesująca jest ta cześć :

    andros1245 napisał:
    left/0.000000000010

    Z tego wynika, że twoje źródło podaje wartość dla kanałów w jakichś niebotycznych wartościach. Jaka jest maksymalna wartość zwracana przez tę procedurę? Aby to miało jakikolwiek sens, musiałbyś posiadać w komputerze przetwornik A/C o rozdzielczości minimum 36 bitów.
    Hm... to możliwe, ale nie sądzę. Raczej popełniasz jakiś błąd.

    0
  • #4 22 Mar 2010 22:03
    andros1245
    Poziom 10  

    Maksymalna wartość zwracana przez procedurę to 9,1.
    0.000000000010 wzięło mi się szczerze powiedziawszy z wikipedii.

    http://pl.wikipedia.org/wiki/Poziom_natężenia_dźwięku

    Cytat:
    wartość odniesienia, wynosząca 10–12 W/m2
    , stąd też ta wartość.

    Próbka 16-bitowa.

    Wiem na pewno, że gdzieś jest błąd, tylko nie wiem gdzie :|

    0
  • #6 22 Mar 2010 22:10
    arnoldziq
    Moderator Programowanie

    Nie znam się na decybelach, ale chyba coś tutaj jest nie tak.
    Dzieląc dowolną liczbę przez tego typu ułamek, to tak na prawdę mnożysz ją przez odwrotność, czyli przez 100 milionów!
    Nawet przy pomnożeniu tego przez logarytm naturalny, wciąż otrzymujesz liczby z zakresu kilku-kilkudziesięciu milionów.

    0
  • #7 22 Mar 2010 22:14
    Dżyszla
    Poziom 42  

    Bo tak naprawdę nie da się tego przeliczyć na ciśnienie akustyczne, gdyż... to nie ma związku z próbką! Dla Ciebie skalą końcową jest poziom 0dB, od którego idziesz w dół. Ułamek powienien zmieniać się w przedziale 0..1 czyli wartością odniesienia jest maksymalna wartość amplitudy. Pamiętaj, że liczby w plikach WAV 16-bit zapisywane są ze znakiem!

    0
  • #8 22 Mar 2010 22:17
    andros1245
    Poziom 10  

    Dziękuję za odpowiedzi :D

    arnoldziq - sugerujesz, że te wartości są przekłamane?

    Dżyszla - jeśli uważasz, że problem tkwi w jednostkach to mam prośbę. Czy mógłbyś mi pomóc z tymi jednostkami?
    Wujek google ma dzisiaj focha, a sam nie miałem jeszcze takich wartości na fizyce :(

    EDIT: Mój kolega sugerował, że nie istnieje ujemne natężenie, dlatego nie mogło iść poniżej 0 dB i nie może tak wyjść. Czy to prawda?

    Kiedyś, zanim poznałem ten wzór liczyłem jakimś dziwnym sposobem (sam nie wiem jak do tego doszedłem), ale były wartości ujemne. Mógłbym zostać przy tamtym, lecz skala była "odwrócona" (nie wiem czemu), czyli w szczytowych momentach wskazywała praktycznie poziom szumów.

    Code:
      level:=BASS_ChannelGetLevel(odtwarzacz);
    
      left:=LOWORD(level);
      right:=HIWORD(level);
      lewy := left;
      prawy := right;
      FloatToStrF(lewy, ffNumber, 32, 0);
      FloatToStrF(prawy, ffNumber, 32, 0);
      lewy:=lewy/(-1000);
      prawy:=prawy/(-1000);

    0
  • #9 22 Mar 2010 22:22
    Dżyszla
    Poziom 42  

    Z punktu fizycznego - prawda. Z punktu wartości próbki - nieprawda. Po prostu nigdy nie jesteś w stanie określić natężenia (a w zasadzie: ciśnienia akustycznego), gdyż to jest wytwarzane przez głośniki, a nie przez zapis próbki. A użycie jednostki dB oddaje tylko logarytmiczny charakter natężenia dźwięku.

    0
  • #10 22 Mar 2010 22:25
    andros1245
    Poziom 10  

    Dziękuję za zainteresowanie tematem oraz odpowiedzi :)
    Jutro spróbuję wykombinować jak inaczej można "podejść do tematu".

    0