eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaprogram do symulacji obróbki audio ? › Re: program do symulacji obróbki audio ?
  • Data: 2013-07-08 03:29:47
    Temat: Re: program do symulacji obróbki audio ?
    Od: sundayman <s...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]


    Ostatecznie mam takie coś :

    [data,fs] = wavread("audio.wav");

    %data =
    [2,6,3,8,4,6,15,20,40,20,25,98,17,34,5,23,5,3,35,44,
    23,17,19,16,2,3,8,4,7,4];
    len = length(data);

    data1 = abs(data)
    data3 = [];

    a=44; % ilość próbek do wartości max
    for i=1:a:length(data1)-a
    data2 = max(data1(i:i+(a-1)));
    data3 = [data3, data2];
    endfor

    % uśrednianie
    n=30; % ilość próbek uśredniania
    b = ones(n,1)./n;
    y = filter(b,1,data3);

    % składanie WAV
    data4 = [];
    for i=1:length(y)
    probka = y(i:i);
    for j=1:a
    data4 = [data4,probka];
    endfor
    endfor

    wavwrite(data4.', 44100 , "wynik_n30.wav");

    *************************************

    No muszę powiedzieć - działa :)
    Nawet chyba udało mi się zrobić, żeby wynikowy wav miał tą samą
    długość,co wejściowy (rozciągnąłem po prostu z tym samym
    współczynnikiem, o który się skraca w wyniku znajdowania wartości
    maksymalnej).

    Teraz mogę sobie testować w te i wefte na różnych parametrach - no coś
    pięknego. I z tego co widzę, to się nawet chyba zgadza z empirią :)

    Panie Michale, jest pan wielki ! Zazdroszczę znajomości tego narzędzia -
    coś mi cholerycznie ciężko nad tym zapanować, ale warto się pomęczyć.
    Tak że - słów podziękowań brak mi po prostu :)

    Oczywiście pozostałym kolegom także dziękuję bardzo.

    *************************************

    Na wszelki wypadek zapytam jeszcze na koniec ;
    jak widać zmieniłem tą linię :

    data2 = max(data1(i:i+a))); * gdzie oczywiście "a" to przedział
    szukania maximum (zastąpiłem "10" z przykładu kolegi zmienną "a" , żeby
    mieć łatwiej w razie zmian wartości)

    na następującą wersję :

    data2 = max(data1(i:i+(a-1)));

    bo wydaje mi się, że w wersji "źródłowej" robi się zakres o 1 za duży
    (np. dla przedziału 10 zakres byłby 10:20 zamiast wymaganego 10:19).
    Wygląda mi to na po prostu drobną pomyłkę kolegi, ale wolę się upewnić -
    czy wszak dobrze zrobiłem ?








Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: