Wyzwanie polega na: wygenerowaniu pliku audio z białego szumu.
Wymagania i instrukcje:
- Twój program musi wygenerować plik audio zawierający tylko biały szum, co oznacza, że jego intensywność jest taka sama dla wszystkich (rozsądnych) częstotliwości i niezerowych [patrz przykładowy wykres ];
- Plik audio musi być odtwarzany w najnowszej wersji VLC [w momencie pisania odpowiedzi];
- Program nie potrzebuje silnej kryptograficznie losowości,
rand
funkcji lub odczytu/dev/rand
jest w porządku; - Program musi być w stanie wygenerować co najmniej 1 godzinę dźwięku, przynajmniej teoretycznie (co oznacza, że ograniczenia systemowe, takie jak maksymalny rozmiar pliku, nie mają zastosowania);
- Twój wynik to liczba bajtów w kodzie źródłowym plus wszystkie mające zastosowanie premie;
- Korzystanie z zewnętrznych bibliotek jest w porządku;
- Program musi działać bez dostępu do Internetu.
Bonusy to:
- -15%: Pozwala określić format pliku audio (co najmniej dwie opcje; liczba możliwych opcji nie zmienia wyniku);
- -10%: Pozwala określić czas trwania pliku audio;
- -5%: Pozwala określić bitrate pliku audio.
Ustawienia mogą być przechowywane w zmiennych, plikach lub podane jako parametry wiersza poleceń do wyboru. Procenty są obliczane na podstawie oryginalnej liczby bajtów, zanim zostanie zastosowany jakikolwiek bonus.
Odpowiedzi:
MATLAB, 25
zapisuje nowy plik WAV na dysku o nazwie
a
. Ma częstotliwość próbkowania 8 kHz i 16 bitów na próbkę w formacie liczby całkowitej ze znakiem. Dane źródłowe są równomiernie rozmieszczone w interwale[0,1]
, który jest zamapowany na interwał[0,32767]
po konwersji do formatu liczb całkowitych.MATLAB, 28–4 (10% + 5%) = 24
Nie jestem pewien, co OP znaczyło o tym, jak ustawienia mogą być przechowywane w zmiennych, ale zinterpretowałem to w sposób korzystny dla tego przypadku. Przy założeniu, że:
Pożądana przepływność (w bitach / sekundę) jest podawana przez użytkownika w zmiennej
b
. Bity na próbkę są zakodowane na stałe na 16.Pożądany czas trwania pliku (w próbkach) podano w zmiennej
d
.Wynik to:
MATLAB, 16–4 (15% + 10%) = 12
Dodając kolejną warstwę obłudy w pogoni za premiami, przyjmuję inne założenie: pożądana funkcja, która ma zostać użyta do wyprowadzenia pliku, powinna być określona w zmiennej
f
. Następnie kod upraszcza:Dopuszczalne wartości funkcji to:
lub
Każda funkcja spowoduje, że powyższy fragment kodu wypisze plik o odpowiednim formacie (WAV lub
.au
) z częstotliwością próbkowania 8 kHz o określonym czasie trwania. Zdjąłem tutaj bonus za specyfikację szybkości transmisji, ponieważauwrite
domyślnie wynosi 8 bitów na próbkę zamiast 16 podobniewavwrite
. Nie widzę sposobu na zharmonizowanie tych dwóch elementów bez użycia większej liczby postaci.źródło
Bash, 34
Jeśli nie chcesz „losowości” dysku twardego, (dużo wolniej)
SPIN, 28
źródło
/dev
.Mathematica 52 - 5 = 47
g
eksportuje plik .wav szumu białego ws
sekundach i 8000 bps.Przykład: eksportowany jest 6-sekundowy plik białego szumu.
źródło
Supercollider, 89–10% = 80,1 bajtów
Niestety, pomimo tego, że został celowo stworzony do generowania dźwięku / dźwięku, ten język nie wygra tutaj. Ale to pierwszy występ Supercollider na Code Golf, więc to świetnie!
To przesłanie przegrywa przede wszystkim dlatego, że konfiguracja nagrywania i realizacja go jest pełnym procesem ze względu na projekt klienta / serwera tego języka. Mimo to jest to fajny język z dużą mocą w bardzo małym kodzie, gdy go poprosisz rzeczy bardziej złożonej niż zwykły biały szum.
Czas trwania pliku ustawia się poprzez zmianę wartości wait (). Mógłbym umieścić to w zmiennej, ale tak naprawdę nie ma sensu, ponieważ Supercollider nie ma o czym mówić. Interaktywność polega na manipulowaniu kodem na żywo, podczas gdy serwer wciąż gra. Zasadniczo IDE to We / Wy (chyba że zbudujesz interfejs użytkownika dla swojego stworzenia).
Oto wersja golfowa:
Oto wersja gry w golfa z opcją nagrywania w formacie aiff lub wav i określania przykładowego formatu (int16, int8 i float to wszystkie opcje). Niestety, pomimo wszystkich bonusów, powyższa wersja wypada lepiej. Będzie to 139–30% = 97,3 bajtów.
A oto nieprzylepiona wersja tego drugiego, dzięki czemu możesz zobaczyć, co się dzieje.
źródło
Bash + ALSA, wynik: 44 (52 znaki - (10% + 5%) bonusów)
Dłuższy niż druga
bash
odpowiedź, ale akceptuje czas trwania i szybkość transmisji. Dodaje również poprawny nagłówek do pliku, więc powinien być w miarę przenośny:Zapisz jako skrypt,
chmod +x
uruchom i uruchom:Uwaga: wyjście .wav jest ustawione na standardowe wyjście, więc musi zostać przekierowane do pliku.
źródło
C
127115 bajtówWiększość kodu zapisuje nagłówek pliku * .au. Spowoduje to wydrukowanie pseudolosowego pliku dźwiękowego na standardowe wyjście.
Częstotliwość próbkowania można dostosować, zmieniając
8000
.Czas trwania można regulować, naciskając,
ctrl-c
gdy chcesz się zatrzymać :-)źródło
JavaScript, 167 bajtów
UWAGA: Zmniejsz głośność przed uruchomieniem. Biały szum jest paskudny
Nie generuje pliku, może nie tego, czego oczekiwano.
-4 bajty włamują się do odtwarzania szumu tylko na lewym kanale
źródło