logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Struktura pliku WAV w ANSI C. Jak stosowac filtr??

bartekkaz 03 Wrz 2008 12:31 3745 4
REKLAMA
  • #1 5502118
    bartekkaz
    Poziom 10  
    Proszę o pomoc. Pisze program w C, dobieram się do pliku wav w ten sposób że ładuje do tablicy dane z 2 kanałów (stereo).
    Cytat:
    unsigned char *danel= new unsigned char[rozmiarPliku];

    unsigned char *danep= new unsigned char[rozmiarPliku];


    potem robię tablicę temp dla każdego kanału i w pętli chcę zastosować filtr:

    Cytat:
    for(int i=index; i<rozmiarPliku; i=i+2)
    {
    danel[j]=dane[i];
    danep[j]=dane[i+1];
    j++;
    }

    unsigned char *daneltemp = new unsigned char[rozmiarPliku];
    unsigned char *daneptemp = new unsigned char[rozmiarPliku];


    for( int i=0; i<rozmiarPliku-3; i++)
    {
    daneltemp[i]= //filtr na 1 kanał
    daneptemp[i]=//filtr na 2 kanał
    }


    Mój problem jest taki że jak otwieram plik przed filtrowaniem a potem z filtrem np mnożącym danel[i] x 2 w Adacity to widmo pomnożone przesówa się w górę!!!
    To chyba źle. Mi się wydawało że robię w dziedzinie czasu (Amplituda(t) gdzie t=i). Czy się mylę??
    Prosze o pomoc.

    PS Jak zastosować do tych 2 kanałów filtr PITCHSHIFTER? proszę o jakąś najprostszą z możliwych funkcji. Dzięki!!
  • REKLAMA
  • #2 5508880
    Aro_
    Poziom 15  
    Mnożenie w taki sposób liczb typu unsigned to chyba nie najlepszy pomysł, sygnał zamiast zostać wzmocniony dodatkowo dostaje składową stałą. Zmień na liczby całkowite tak aby zerowy sygnał odpowiadał także zerowej wartości zmiennych, dopiero potem wymnażaj. Co do PITCHSHIFTER to jest taka funkcja w audacity, co do algorytmu można pomyślec aby zrobic to tak: FFT, przesunąć próbki w osi częstotliwości a następnie IFFT. Powinno dać radę, możesz sprobować.
  • REKLAMA
  • #3 5508974
    bartekkaz
    Poziom 10  
    tzn wpakować dane do zwykłej tablicy int ??
  • REKLAMA
  • #4 5509182
    Aro_
    Poziom 15  
    Nie znam struktury pliku wav, ale wydaje mi się, że próbki są zapisane jako float 32 bitowe. Więc albo int albo float, spróbuj.
  • #5 5517079
    szelus
    Poziom 34  
    Plik .wav ma nagłowek, w którym jest m.in. zapisane jaki jest format danych: ile kanałów, ile bitów na próbkę, częstotliwość próbkowania itd.
    Próbki zapisane są w postaci liczb całkowitych, w kodzie uzupełnieniowym do dwóch, czyli jako normalny int (odpowiedniej długości).
    Przy np. mnożeniu przez 2 należałoby się upewnić, że nie przekracza się zakresu!
REKLAMA