RødeCaster Pro i pliki wielościeżkowe

RødeCastera stosuję nie od dzisiaj, a że nagrywam nim przede wszystkim wywiady, to i stosuję wariant zapisu wielościeżkowego - znacznie łatwiej się później taki wywiad obrabia, jeśli na osobnej ścieżce mamy siebie, a na osobnej rozmówcę (a jeszcze na osobnej - jingle) - przynajmniej w teorii. Niestety, pliki tworzone przez RødeCastera są olbrzymie, a w dodatku co mniej więcej pół godziny tworzy się nowy, więc po zakończeniu sesji zostajemy np. z czterema plikami po parę gigabajtów (!) każdy. Otwierać je osobno, żeby wyciągnąć konkretne ścieżki, posklejać je później i obrobić to prawdziwie tytaniczna praca. Jako że - jak zwykle - nie chciało mi się jej za każdym razem wykonywać, postanowiłem zrzucić na barki komputera przygotowanie pliku już gotowego do końcowej obróbki. A dla chętnych, których nie odstrasza linia poleceń i instalowanie dodatkowych narzędzi, poniżej przepis, jak zrobić coś podobnego u siebie.

Wyjaśnię jeszcze może, dlaczego nie ułatwię sobie życia i nie nagrywam wielościeżkowo do jakiegoś programu DAW. Otóż póki co sterowniki ASIO dla RødeCastera są w powijakach, ASIO4ALL nie lubię, zaś zapis wielościeżkowy bez ASIO po prostu nie działa u mnie bezawaryjnie. No i nie zawsze na komputerze, na którym odpalam Skype'a czy Discorda, mam też odpowiednie oprogramowanie audio do rejestracji. Znacznie prościej jest nagrać całość na karcie i przepuścić nagranie przez skrypt już w komputerze, przeznaczonym do obróbki.

Założenia i opis działania

Mój sposób pracy wygląda tak, że nagrywam swój głos na kanale 1 przez podpięty mikrofon. Rozmawiam zwykle przez Discorda czy innego Skype'a, więc RødeCaster jest podłączony przez USB do komputera, zaś głos rozmówcy pojawia się, naturalnie, na kanale USB. W RødeCasterze, w opcjach Advanced/Audio/Multitrack mam włączone tworzenie plików wielościeżkowych dla karty microSD. Te ustawienia są istotne - np. niewłączenie pliku wielościeżkowego poskutkuje zapisem tylko zmiksowanej wersji stereo, z której nie da się wydobyć osobnych ścieżek prowadzącego i rozmówcy. Także kanały są ważne - prowadzący na "jedynce", rozmówca na kanale USB. Jeśli chcemy mieć czy mamy inną konfigurację, trzeba przerobić skrypt, o czym będzie później.

Co jest potrzebne?

Jako że główny skrypt napisałem w Pythonie 3.9, trzeba mieć go zainstalowanego - odpowiedni plik znajduje się na stronie projektu. Poprawność zainstalowania Pythona sprawdzamy w linii poleceń, wydając komendę:

python -V

(koniecznie duże V!) - w odpowiedzi powinniśmy dostać numer zainstalowanej wersji Pythona.

Drugim niezbędnym narzędziem będzie program SOX, który umożliwia wyczynianie różnych cudów z plikami audio - konwersje, dzielenie plików stereo na mono, łączenie mono w stereo, sklejanie paru plików ze sobą itp. Pobieramy odpowiedni dla naszego systemu plik i rozpakowujemy go w dogodnym miejscu.

Trzecią rzeczą jest mój skrypt. Należy go pobrać i umieścić w tym samym katalogu, gdzie znajduje się rozpakowany sox.exe.

Odpalamy

Działanie skryptu jest bardzo proste. Tworzymy gdzieś na dysku katalog o dowolnej nazwie i wrzucamy do niego wszystkie pliki nagrania (jeśli nagranie było długie, RødeCaster utworzy kilka plików, mniej więcej po 4GB każdy). Teraz przechodzimy do katalogu z programem sox.exe i skryptem rode.py. Uruchamiamy dla tego katalogu linię poleceń i wydajemy polecenie:

python rode.py sciezka_do_katalogu_z_nagraniami

gdzie, oczywiście, podmieniamy frazę "sciezka_do_katalogu_z_nagraniami" na pełną ścieżkę do katalogu, gdzie wrzuciliśmy pliki wav z RødeCastera.

Po uruchomieniu skrypt powinien wykryć w ustawionym katalogu odpowiednie pliki i zacząć je przetwarzać. Przetwarzanie polega na tym, że dla każdego pliku nagrania wyciągane są dwa kanały mono (prowadzący i rozmówca) i zapisywane w podkatalogu temp. Następnie wszystkie pliki prowadzącego są łączone w jeden duży plik i to samo robione jest także dla rozmówcy. Na koniec oba te pliki są łączone w jeden, finalny plik recording.wav. Jeśli komuś będzie taki plik niepotrzebny (mnie się wygodniej edytuje właśnie taki sklejony sygnał - łatwiej usuwać błędne fragmenty, nie tracąc synchronizacji między śladami), w katalogu temp znajdzie także osobne pliki dla prowadzącego (sum0.wav) i rozmówcy (sum1.wav), które można wrzucić po prostu do jakiegoś programu DAW. Tymczasowe pliki sprzed połączenia ich w jeden są kasowane (ale, oczywiście, NIE SĄ kasowane pliki oryginalne, te z RødeCastera!)

Przykładowe uruchomienie skryptu dla dwóch plików rødecasterowych może wyglądać następująco:

Opis skryptu

Budowa pliku audio

Na początku może przedstawię budowę wielościeżkowego pliku, który tworzy RødeCaster. Plik jest taki ogromny, bo zawsze zapisywany jest komplet, czyli 14 ścieżek:

  • 1, 2 - ścieżka stereofonicznego miksu całości
  • 3 - mikrofon 1 (prowadzący)
  • 4 - mikrofon 2
  • 5 - mikrofon 3
  • 6 - mikrofon 4
  • 7, 8 - ścieżka stereofoniczna USB (z komputera)
  • 9, 10 - ścieżka stereofoniczna z telefonu (mały jack TRRS z tyłu RødeCastera)
  • 11, 12 - ścieżka stereo z połączenia BlueTooth
  • 13, 14 - ścieżka stereo z jinglami

Wywołania programu sox.exe

Działanie skryptu opiera się o odpowiednio skonfigurowane wywołania programu sox.exe. Najpierw wydobywana jest z pliku rødecasterowego ścieżka numer 3 (jest to monofoniczne nagranie mikrofonu podłączonego do gniazda XLR nr 1); dla uproszczenia w przykładzie pomijam pełne ścieżki do plików:

sox.exe POD00003.WAV temp/POD00003_result3.wav remix 3

Podobnie wydobywany jest lewy kanał rozmówcy (zakładam milcząco, że rozmówca także używa monofonicznego mikrofonu, więc kanały 7 i 8 zawierają to samo):

sox.exe POD00003.WAV temp/POD00003_result7.wav remix 7

Po przejściu przez wszystkie pliki rødecasterowe mamy zatem całkiem sporo plików tymczasowych, które teraz należy scalić tak, by w jednym pliku mieć całość nagrania prowadzącego, a w drugim - nagranie rozmówcy. W programie sox.exe robi się to banalnie - trzeba po prostu podać nazwy wszystkich plików składowych i na końcu nazwę wynikową:

sox.exe temp/POD00003_result3.wav temp/POD00004_result3.wav sum0.wav
sox.exe temp/POD00003_result7.wav temp/POD00004_result7.wav sum1.wav

W efekcie będziemy mieli sumę (sklejone jeden za drugim) pliki należące do prowadzącego (result3) w pliku sum0.wav oraz pliki rozmówcy (result7) w pliku sum1.wav.

W zasadzie można by już zakończyć całą operację, jednak jak wspomniałem, mnie lepiej obrabia się w edytorze audio plik stereo, więc scalę te dwa pliki sum w jeden:

sox.exe -M sum0.wav sum1.wav recording.wav

I gotowe, w lewym kanale mam teraz prowadzącego, w prawym - rozmówcę.

Wprowadzanie zmian

Skrypt starałem się napisać maksymalnie czytelnie, więc jego ewentualna rozbudowa czy modyfikacja powinna być stosunkowo łatwa. Najłatwiej jest zmienić numery kanałów, na których pracuje skrypt - kluczowy jest fragment na początku skryptu rode.py:

channel_config_all = [[1, True], [3, False], [4, False], [5, False], [6, False], [7, True], [9, True], [11, True],
                      [13, True]]

channel_config_interview = [[3, False], [7, False]]

channel_config = channel_config_interview

Jest to pełna konfiguracja kanałów - przygotowałem dwie gotowe, w channel_config_all są wszystkie kanały według rozpiski (z tą konfiguracją skrypt po prostu podzieli całe nagranie rødecastowe na poszczególne kanały). W channel_config_interview znajduje się "moja" konfiguracja, czyli kanał pierwszego mikrofonu (3) oraz lewy kanał rozmówcy (7). W przypadku, gdy konfiguracja będzie zawierała dwa (i tylko dwa!) kanały, zostanie utworzony plik recording.wav, w innych przypadkach wynikiem działania skryptu będą wyłącznie pliki z prefiksem sum.

Czy to ma sens?

Zdaję sobie sprawę, że w naszym pięknym kraju liczba posiadaczy RødeCastera, którzy jednocześnie będą zainteresowani instalowaniem Pythona i nagrywaniem wielościeżkowym na karcie SD jest prawdopodobnie zbliżona do jedności, ale nic to nie szkodzi. Najwyżej będę miał co czytać w chwilach napadu nostalgii...

Jednocześnie skrypt ten bardzo mi się przydaje i nie wyobrażam już sobie ręcznego dłubania po każdym nagraniu. Jak dla mnie - ma to sens!

Komentarze