Wydrukuj następujący fragment z Kanonu Pachelbela w D jako audio:
Zasady
- Można użyć dowolnego formatu / kodowania, o ile kodek istniał przed utworzeniem tego wyzwania
- Można użyć dowolnego instrumentu (prawdziwy instrument, synteza MIDI itp.)
- Tempo musi wynosić 65 BPM (jak zapisano w nuty) - jeśli nie możesz uzyskać dokładnie 65 BPM, możesz użyć dowolnego tempa w zakresie (włącznie) 64,75 - 65,25
- Nuty są w trakcie koncertu
- Należy zastosować strojenie jednakowego temperamentu (w szczególności 12-ET z A4 = 440 Hz)
Dla odniesienia, oto fragment kodu, który odtworzy fragment:
Odpowiedzi:
JavaScript (ES7),
249242241 bajtówDzięki @Neil i @PatrickRoberts za oszczędność bajtów!
Wyjaśnienie
Notacja jest pakowana w ciąg, w którym każdy znak jest pojedynczą nutą jako podstawowa cyfra 36. Wartości nut są określone przez wzór, w
(19 - pitch) * time + 1
którympitch
liczba półtonów jest mniejsza niż A5 itime
dotyczy1
półtorgody lub20
ósemki. Na0
końcu zatrzymujefor
pętlę.Tempo wynosi
65,22 uderzeń na minutęEdytuj: teraz dokładnie 65 uderzeń na minutę, dla 2 kolejnych bajtów .To wyjaśnienie / wersja demonstracyjna używa
Math.pow
zamiast**
do kompatybilności przeglądarki. Ustawia również wzmocnienie oscylatorów, aby.3
ostatni akord nie powodował krwawienia w uszach (wzmocnienie domyślne to1
).Możesz nacisnąć powyższy przycisk, aby przetestować go w dowolnej przeglądarce obsługującej interfejs API HTML5 Web Audio .
źródło
880*2**(-~-n%20/12)
powinien zaoszczędzić kilka bajtów.-~-
także pozbyć, zmieniając format pakowania notatek (+ 1
w formule jest tylko dlatego, że muszę0
zatrzymaćfor
pętlę i byłem zbyt leniwy, aby o tym dużo myśleć, zanim opublikowałem).c=new AudioContext;
zewith(new AudioContext)
i usuwając dwa występującec.
w programie.<<
go użył , wyrzuciłby go na liczbę całkowitą.Mathematica,
212152139135 bajtówWysyła
Sound
obiekt, który odtwarza Kanał Pachelbela w D po naciśnięciu przycisku Play. Instrumentem jest instrument MIDI nr 41 „Skrzypce”.Audio
Kliknij!
Wyjaśnienie
Znajdź numery liter każdego znaku w ciągu („a” -> 1, „b” -> 2 itd.), Owinięte znakiem
List
. (Ten ciąg reprezentuje Kanon Pachelbela w D)Ustaw
s
doSoundNote
funkcji, której instrumentem jest # 41. Ustaw czas trwania na 1 i odwzoruj funkcję każdego elementu wList
(tworząc w ten sposóbSoundNote
prymitywne obiekty).Zrób ostatnią triadę. (Czas trwania
16
jest taki, aby ostatnia nuta była 16 razy dłuższa - cała nuta jest szesnaście razy szesnasta).Zrób
Sound
obiekt o18.5
długości kilku sekund (ponieważ tempo wynosi 65 uderzeń na minutę [5 taktów 4/4 z tempem 65 uderzeń na minutę = około 18,5 sekundy]).Wersja 126-bajtowa, niekonkurująca
Niekonkurencyjny, ponieważ wyjście zawiera dwie szesnastkowe nuty zamiast ósmej nuty, a separacja jest dość zauważalna.
źródło
Bubblegum , 203 bajty
Wypróbuj online!
To jest zrzut heksowy (odwrotnie z
xxd -r
) kodu źródłowego. Plik MIDI, który tworzy, jest następujący (również zrzut heksowy):źródło
BBC BASIC, 141 znaków ASCII (65.217BPM)
Zmieniono w celu dostosowania limitu tempa. Zaktualizuje wyjaśnienie później.
BBC BASIC, 123 znaki ASCII (niekonkurencyjny jako 60BPM)
Pobierz tłumacza na http://www.bbcbasic.co.uk/bbcwin/download.html
Odtwarza utwór bezpośrednio po uruchomieniu.
Nie golfił
Wyjaśnienie
j
to flaga wskazująca, czy znajdujemy się w pierwszych 4 taktach, czy w ostatnim akordie. TRUE jest-1
w BBC BASIC.SOUND
Oświadczenie trwa 4 parametrów:CHANNEL: dla pierwszych 4 taktów jest to kanał 1. Dla 3 nut akordu w 5 takcie numery kanałów to 201, 202 i 203 hex (513,514 i 515 miejsc dziesiętnych). Oznacza to odtwarzanie na kanałach 1,2 i 3, początkowe 2 oznacza grać jednocześnie z 2 nutami na innych kanałach (tj. Grać akord 3 nutowy).
GŁOŚNOŚĆ: Podana jako wartość ujemna, ponieważ wartości dodatnie reprezentują inne efekty (obwiednie dźwięku). Ustaw na -9 (wzrośnie do -15, co jest najgłośniejsze).
PITCH: W tym melodii zakres od D4 = 108 do A5 = 184. Każdy krok liczby całkowitej to 1/4 półtonu. Wartości są przechowywane jako kody ASCII w zakresie od 54 do 92 i podwojone, aby wygenerować poprawną wartość. Notatki 1/8 są przechowywane jako duplikaty notatek 1/16. Ostatni akord jest przechowywany jako 3 oddzielne wysokości, a długość nuty różni się dla całej nuty, jak poniżej.
CZAS TRWANIA: za 1/20 sekundy. Czas trwania 1/16 nuty wynosi 5/20 sekundy, więc 60 1/4 nut na minutę (rozdzielczość jest niewystarczająca, aby uściślić tempo). Cała nuta to 5 - (- 75) = 80 jednostek (4 sekundy ) długie.
źródło
Befunge, 242 bajty
Melodia jest zapisywana w standardzie w formacie pliku MIDI. Musisz przekierować to wyjście do pliku .mid , aby odtworzyć fragment.
Wypróbuj online! , chociaż nie sądzę, że obecnie można zapisać dane wyjściowe w taki sposób, aby zachowały one binarną integralność danych.
Wyjaśnienie
Pierwszy wiersz jest niezbędny tylko zakodowany na stałe nagłówek MIDI, który jest wyprowadzany na początku drugiego wiersza. Reszta drugiego wiersza koduje sekwencję nut jako ich wartości MIDI, które są dogodnie ASCII. Trzeci wiersz wypisuje polecenia MIDI do odtwarzania tych nut, przy czym czas trwania jest automatycznie obliczany (każda nuta jest półokolem, chyba że i% 14 == 0). Ostatni akord jest traktowany jako specjalny przypadek na liniach czwartej i piątej (ponieważ wymaga to jednoczesnego naciśnięcia wielu klawiszy), a szósta linia zapisuje końcowy koniec znacznika ścieżki MIDI.
źródło
C,
248 228 210 198 193191 bajtówDaje to sekwencję 8-bitowych próbek bez znaku, które mają być odtwarzane z prędkością 8000 próbek na sekundę. Jeśli masz starszą konfigurację UNIX / Linux, możesz przekierować dane wyjściowe do
/dev/audio
. W niektórych nowszych dystrybucjach Linuksa może być konieczne przesłanie danych wyjściowych do odtwarzacza linii poleceń ALSAaplay
źródło
SmileBASIC, 115 bajtów
Korzystanie z ładnego instrumentu było warte 4 dodatkowe bajty :)
źródło
JavaScript (ES6) przy użyciu WAV.js , 325 bajtów
źródło