2011-07-30 13 views
20

Używam SoX do przycinania zestawu plików wav do 16-kHz, 16-bitowych, mono-kanałów plików WAV (które będą podzbiory jednego z początkowych plików WAV). Większość źródłowych plików wav jest już ustawiona na tę specyfikację, jednak właśnie odkryłem, że niektóre z nich mają różne częstotliwości próbkowania. Ponieważ będzie zautomatyzowana w Javie za pomocą ProcessBuilder, pomyślałem mogłem użyć następującego polecenia:Zmniejszanie/usuwanie obcinania w SoX podczas konwersji częstotliwości próbkowania

sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime> 

i będzie to zmienić tylko częstotliwość próbkowania, jeśli nie jest 16000 Hz. Robi to co to miało na pliki o tej samej specyfikacji, ale na plikach o różnych częstotliwościach próbkowania, uzyskać:

sox WARN rate: rate clipped 48 samples; decrease volume? 
sox WARN dither: dither clipped 44 samples; decrease volume? 

Jak mam sobie z tym poradzić bez pogorszenia jakości dźwięku? Zauważ, że nie wiem nic o przetwarzaniu sygnału.

Odpowiedz

29

Zgodnie z sugestią tego narzędzia, spróbuj nieznacznie zmniejszyć głośność, np. poprzedzając -v 0.99 (lub 0.98 itd.). Takie niewielkie zmiany w objętości są niedostrzegalne.

Przykład:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime> 

Jeśli nadal się wycinek wtedy dźwięk jest prawdopodobnie surowo obcięty (tj disorted) na początku (to wspólnego z muzyką nowoczesną, patrz Wikipedia: Loudness war), a więc ostrzeżenia może być ignorowanym - nie wprowadzono dodatkowych zniekształceń.

Jak wspomniano w komentarzach, można podać opcję -G, która automatycznie dostosuje objętość potrzebną do uniknięcia obcinania (kosztem trochę dodatkowego czasu procesora, tzn. Działa nieco wolniej z -G) .

+4

Ponownie przeczytałem dokumentację i stwierdziłem, że przegapiłem opcję '-G', która automatycznie ustala wzmocnienie. Nie chcę ustawiać arbitralnej liczby, więc zdecydowałem się użyć opcji '-G'. Jeśli dodasz do swojej odpowiedzi opcję ochrony, chętnie Ci ją dam, ponieważ jest to dość pouczające. – cesar

+1

Można również użyć opcji "--norm", aby zapobiec przycinaniu, a jeśli dźwięk jest zbyt cichy, zwiększ ją, aby była to maksymalna głośność bez przycinania. – drojf

0

Miałem problem. Zmiana kodowania pliku WAV naprawiono:

sox input.wav -e signed-integer output.wav 
Powiązane problemy