Program podnoszący dynamikę dźwięku

Jeśli chcesz zasięgnąć rady, podzielić się doświadczeniem w trudnej sztuce samodzielnego programowania - to tu jest miejsce, aby tego dokonać.
Awatar użytkownika
Paciocha
Posty:9
Rejestracja:wtorek 26 sie 2003, 00:00
Re: Program podnoszący dynamikę dźwięku

Post autor: Paciocha » środa 17 maja 2006, 08:58

Do pracy nad dekompresorem nie będze potrzebna Ci transformata (na szczęście). Wprawdzie zgadzam się z przedmówcami, dekompresję masz w wielu dostępnych wtyczkach, więc pisanie takiego programu będzie duplikowaniem już gotowych pomysłów. Ale jeśli sie upierasz... C++ powinien mieć biblioteki streamujące pliki audio z dysku do buforu. Strumień składać się bedzie z tablicy bajtowej, która musisz przetłumaczyć na tablicę wartości int (w zakresie 16 lub 24 bitów, więc odpowiednio 2 lub 3 elementy tablicy bajtowej będzie przypadać na jeden element tablicy int). To będzie reprezentacja amplitud kolejnych próbek w pliku wav. Teraz wrzucasz tablicę do funkcji dokonującej modyfikacji amplitud wg zaimplementowanego przez Ciebie algorytmu, dostając w wyniku także tablicę int, którą rozbijasz z powrotem na tablicę byte i strumieniowo zapisujesz na dysku za pomocą odpowiedniej funkcji do zapisu audio. Tak pokrótce....

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

Krizz-wielkie dzieki, wreszcie cos co mnie gdzies naprowadza , czy oprocz "pokrotce" moge liczyc na jakieś szczegóły? Zastanawiam się jeszcze w jaki sposób to realizować: pisząc i pokonując przeszkody, czy najpierw zdobyć jak najwięcej informacji. Nasuwa mi się także jeszcze jedno pytanko - a co jeżeli plik jest duuurzych rozmiarów, ot tak ze 2GB, tego w ramie nie upcham :P, jak sobie poradzić z podziałem go "w locie" na mniejsze fragmenty które pomieszczą się w ramie a póżniej jak je posklecać do kupy by całość odniosła efekt.



A'propos dynamiki - myslę raczej o nieobniżaniu niskich amplitud, raczej te większe chcę jeszcze "podciągnąc". Nasuwa się pytanie: od jakiego progu zacząć, biorąc pod uwagę szumy itp. jakich wartości nie ruszać, aby całość odniosła sensowny efekt

Awatar użytkownika
MB
Posty:3318
Rejestracja:wtorek 09 kwie 2002, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: MB » środa 17 maja 2006, 09:13

Wprawdzie zgadzam się z przedmówcami, dekompresję masz w wielu dostępnych wtyczkach

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

a któreż to wtyczki oferuję "dekompresję", bo ja żadnej nie spotkałem???







Strumień składać się bedzie z tablicy bajtowej, która musisz przetłumaczyć na tablicę wartości int (w zakresie 16 lub 24 bitów, więc odpowiednio 2 lub 3 elementy tablicy bajtowej będzie przypadać na jeden element tablicy int). To będzie reprezentacja amplitud kolejnych próbek w pliku wav. Teraz wrzucasz tablicę do funkcji dokonującej modyfikacji amplitud wg zaimplementowanego przez Ciebie algorytmu, dostając w wyniku także tablicę int, którą rozbijasz z powrotem na tablicę byte i strumieniowo zapisujesz na dysku za pomocą odpowiedniej funkcji do zapisu audio. Tak pokrótce....

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

jeśli wydaje Ci się, że obróbka dynamiczna sygnału odbywa się próbka-po-próbce według zwykłej statycznej tablicy, to jesteś w ogromnym błędzie - taki zabieg wprowadzi przede wszystkim ogromne zniekształcenia nieliniowe. Tu nie chodzi o wartości chwilowe sygnału tylko o poziomy, czyli parametry bardziej makroskopowe. Cała sztuczka polega na odpowiedniej regulacji wzmocnienia w relacji do poziomu wejściowego i stosownej funkcji.

Awatar użytkownika
Paciocha
Posty:9
Rejestracja:wtorek 26 sie 2003, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: Paciocha » środa 17 maja 2006, 09:24

Cała sztuczka polega na odpowiedniej regulacji wzmocnienia w relacji do poziomu wejściowego i stosownej funkcji....

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

Na czym sie oprzeć aby właśnie nie doprowadzić do tych zniekształceń? Jakiej "sztuczki" urzyć by temu zapobiec?

Shem
Posty:14
Rejestracja:czwartek 23 lut 2006, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: Shem » środa 17 maja 2006, 10:53

Nasuwa mi się także jeszcze jedno pytanko - a co jeżeli plik jest duuurzych rozmiarów, ot tak ze 2GB, tego w ramie nie upcham :P, jak sobie poradzić z podziałem go "w locie" na mniejsze fragmenty które pomieszczą się w ramie a póżniej jak je posklecać do kupy by całość odniosła efekt.



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

Wg mnie jednak za malo czytales i to nie tylko o dzwieku. Temat na inne forum.

Awatar użytkownika
jarekz
Posty:245
Rejestracja:niedziela 15 sty 2006, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: jarekz » środa 17 maja 2006, 11:24

...mam zamiar napisać (najprawdopodobniej w c++) program który będzie zwiększał dynamikę dźwięku na zasadzie pobrania pliku wejściowego *.wav "obrabiania" go i zapisywaniu na wyjściu drugiego pliku *wav... Niestety nie mam pojecia od czego zacząć...

Wyslij mi maila, to sprobuje Ci podeslac odpowiedni artykul.

Awatar użytkownika
MB
Posty:3318
Rejestracja:wtorek 09 kwie 2002, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: MB » środa 17 maja 2006, 11:37

Na czym sie oprzeć aby właśnie nie doprowadzić do tych zniekształceń? Jakiej "sztuczki" urzyć by temu zapobiec?...

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

przede wszystkim zmiana głośności musi się odbywać w sposób płynny, czyli zmienny w czasie współczynnik wzmocnienia musi byc funkcją gładką, wolnozmienną (wolno - w skali prędkości próbkowania, a więc dużo wolniejszą od drgań fali akustycznej). Poczytaj tutaj i tutaj.



Ale na początek poczytaj o zasadach programowania w multimediach (jest wiele książek na ten temat, ale najlepszym źródłem wiedzy jest google), bo pytanie o wczytywanie całego pliku do pamięci RAM świadczy, że chyba jednak brakuje Ci elementarnej wiedzy.

Awatar użytkownika
Paciocha
Posty:9
Rejestracja:wtorek 26 sie 2003, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: Paciocha » środa 17 maja 2006, 11:45

pytanie o wczytywanie całego pliku do pamięci RAM świadczy, że chyba jednak brakuje Ci elementarnej wiedzy....

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

No to mnie panowie zadziwiacie... z tym durzym plikiem to chodzi o to, że jak go "poszatkuje" czy to ostatecznie nie odbije się na jakości, nie pojawią się jakieś rożnice między poszczególnymi częściami, albo czy na złączeniach coś nie bedzie paskudziło. Do tej pory bawiłem się głównie z tekstem i czasami takie "niechciane efekty" pojawiały się na łączeniach fragmentów co było związane z "reprezentacją pliku przez system". (bo na jednym sysie chodziło ok, a inny wychaszczał).



A za lektóre już się szybciutko zabieram :)

Awatar użytkownika
MB
Posty:3318
Rejestracja:wtorek 09 kwie 2002, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: MB » środa 17 maja 2006, 11:58

zacznij od słownika ortograficznego, bo zęby bolą gdy się czyta Twoje posty

Awatar użytkownika
Paciocha
Posty:9
Rejestracja:wtorek 26 sie 2003, 00:00

Re: Program podnoszący dynamikę dźwięku

Post autor: Paciocha » środa 17 maja 2006, 12:14

Nie chciałem nikogo urazić, a do dysgrafi oficjalnie się przyznaje :|


Krizz
Posty:263
Rejestracja:sobota 09 lis 2002, 00:00
Kontakt:

Re: Program podnoszący dynamikę dźwięku

Post autor: Krizz » środa 17 maja 2006, 12:21

jeśli wydaje Ci się, że obróbka dynamiczna sygnału odbywa się próbka-po-próbce według zwykłej statycznej tablicy, to jesteś w ogromnym błędzie -

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

Zdaję sobie z tego sprawę. Dlatego piszę "tak pokrótce". Ale jak widać, kolega nie ma doświadczenia w pisaniu oprogramowania manipulującego plikami dźwiękowymi, dlatego na początek powinien się zadowolic prostymi algorytmami, które z czasem sobie rozbuduje wraz ze wzrostem swojej wiedzy i opanowania programowania DSP.





Nasuwa mi się także jeszcze jedno pytanko - a co jeżeli plik jest duuurzych rozmiarów, ot tak ze 2GB, tego w ramie nie upcham

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

Od początku piszę o strumieniowym odczycie i zapisie danych. Polega ono na tym, że wczytujesz skrawek danych do buforu, obrabiasz algorytmem i od razu zapisujesz (dopisujesz) do pliku wyjściowego. W wypadku procesora dynamiki istotny będzie rozmiar buforu - załóżmy że będzie miał 1 sekundę, czyli zawierał tablicę o 44100 elementach typu integer. MB pisze: "Tu nie chodzi o wartości chwilowe sygnału tylko o poziomy, czyli parametry bardziej makroskopowe", a Ty ową makroskopowość zrealizujesz opierając się o dane w buforze - na początek wystarczy. Musisz się zastanowić jak zrealizować koneksję między bieżącym buforem danych a kolejnym - parametry uzyskane z badania zawartości bieżacego bufora trzeba bedzie przenieść do drugiego, i interpolować je w zależności od parametrów uzyskanych w oparciu o badania zawartości kolejnego bufora. Możesz się zastanowić też nad nakładaniem się buforów i odpowiednim interpolowaniu wartości próbek które nakładają się w buforze bieżącym i kolejnym, tak, aby przejścia były płynne.



a któreż to wtyczki oferuję "dekompresję", bo ja żadnej nie spotkałem???

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

Rozumiem że to pytanie podchwytliwe, bo niezależnie od mojej odpowiedzi dowiedziesz mi, iż nie mam racji. Ale przykład pierwszy z brzegu: Waves Reinassance Compressor, którego używam, posiada możliwość ustawienia "negatywnej" wartości stosunku kompresji (tzn, 1:1/2, 1:1/4, itd), co, jak rozumiem, ma na celu zwiększenia dynamiki dźwięku (co nazwałem dekompresją, przepraszam jesli użyłem złego słowa).

ODPOWIEDZ