Tak, dobrze przeczytałeś tytuł. odtwarzać dźwięk pi.
Mówiąc dokładniej, dla każdej cyfry pi w pierwszym 1000 zamapuj ją na nutę i wyślij uzyskaną melodię do pliku.
Zasadniczo każda cyfra zmienia się w nutę w skali C-dur (w zasadzie skala normalna). więc 1 zamienia się w środkowe C, 2 zamienia się w D4, 3 zamienia się w E4, 9 zamienia się w D5 i tak dalej.
Zasady
- Każda nuta powinna mieć dokładnie 0,5 sekundy.
- Melodia powinna zawierać pierwsze 1000 cyfr pi, w tym początkową 3.
- Od 1 do 7 oznaczają środek C do B4, 8 to C5, 9 to D5, a 0 to E5
- Wszystkie dobrze obsługiwane formaty plików są dozwolone, o ile zostały utworzone przed tym wyzwaniem.
- Nigdzie w pliku mogą nie być przerw, w tym na początku i na końcu.
- Gra na instrumencie nie ma znaczenia. Może to być fortepian, fala sinusoidalna, cokolwiek naprawdę, o ile właściwy dźwięk jest dobrze słyszalny.
- Nie może pobierać danych wejściowych ani generować danych wyjściowych oprócz pliku. Odczytywanie z innych plików jest zabronione.
- Standardowe luki są zabronione.
Przykładowy kod matematyczny:
(*please forgive me for this horrible, horrible mess of code*)
digits = RealDigits[Pi, 10, 1000][[1]] /. {0 -> 10};
weights = {0, 2, 4, 5, 7, 9, 11, 12, 14, 16};
melody = {};
For[i = 1, i < 1001, i++, melody = {melody , Sound[SoundNote[weights[[digits[[i]]]], 0.5]]}]
final = Sound[Flatten[melody]];
Export["C:\\Mathematica Shenanigans\\pi.wav", final];
Przykładowa melodia pokazująca pierwsze 100 cyfr: http://vocaroo.com/i/s0cfEILwYb8M
Dla twojego zdrowia psychicznego: Tabela wysokości dla każdej nuty i jaką nutę reprezentuje każda cyfra:
Digit 1: C: 261.63 Hz
Digit 2: D: 293.66 Hz
Digit 3: E: 329.63 Hz
Digit 4: F: 349.23 Hz
Digit 5: G: 392.00 Hz
Digit 6: A: 440.00 Hz
Digit 7: B: 493.88 Hz
Digit 8: C5: 523.25 Hz
Digit 9: D5: 587.33 Hz
Digit 0: E5: 659.25 Hz
code-golf
kolmogorov-complexity
pi
audio
sagiksp
źródło
źródło
4
-tej oktawie. Czy w twojej tabeli cyfra0
jest ostatnia (E5
)?Odpowiedzi:
Mathematica,
10787 bajtówDzięki Martin Ender za oszczędność 20 bajtów!
#&@@RealDigits[Pi,10,1000]
podaje listę pierwszych 1000 cyfr π.SoundNote[⌊12Mod[#,10,1]/7⌋-1
tworzy poprawną liczbę tonów (gdzie 0 to domyślnie środek C) z cyfry. NastępnieSoundNote[...,.5]&/@
zamienia nazwę tego dźwięku na obiekt dźwiękowy o czasie trwania 1/2 sekundy, którySound
gromadzi się w rzeczywistym fragmencie dźwięku. Wreszcie"t.au"~Export~
eksportuje się do pliku w formacie Unix Audio, głównie dlatego, że rozszerzenie jest najkrótszym obsługiwanym, ale także dlatego, że możemy sprawić, że nazwa pliku będzie klapnięciem w twarz do π !Poprzednie zgłoszenie:
źródło
Python 2, 182 bajty
`x`
wyprodukuje31415926...20198L
. KońcoweL
jest używany do wytworzenia bajtu końcowego komunikatu kanału, poprzez mapowanie~ord(i)%29
.Wysyła pojedynczy plik Midi typu 1 ścieżki, nazwany
p.mid
w bieżącym katalogu roboczym.źródło
Zadraśnięcie , 530 bajtów
Zainspirowany odpowiedzią BookOwl .
Demonstracja online . Odtwarzanie rozpocznie się natychmiast, naciśnij, spaceaby zatrzymać i zresetować. Kliknij kota, aby zacząć od nowa.
Edycja: lekko w golfa. Znalazłem kilka wskazówek golfowych na oficjalnej wiki .
Graficzny:
Używa czopa Wagon Rabinowitz do tworzenia 4 cyfr na raz.
źródło
R, 450 bajtów
Używa pakietu,
Rmpfr
aby uzyskać poprawną dokładność cyfr pi. Wysyła.wav
plik.Wcięte, z nowymi liniami i komentarzami:
źródło
C (gcc) 572 bajty
Wersja bez golfa:
Wyjaśnienie:
play(float freq)
procedura przyjmuje częstotliwość jako parametr nuty (zakodowanej na stałe), którą chcesz odtworzyć, i przechowuje falę sinusoidalną w buforze.f()
zapisałem częstotliwości odpowiadające nutom od C4 do E5 wnotes
tablicy.pi
wartość, a następnie 1000 cyfr w buforze. W tym celu zainstalowałempi
pakiet na moim komputerze i użyłem gopopen
do odczytania danych wyjściowychpi 1000
i zapisania wchar
buforze.for
pętli iswitch
wywołałemplay()
funkcję, aby wygenerować nuty, które odpowiadają każdej pojedynczej cyfrze wpi
buforze. ,Zastosowanie:
./binary_name.o | aplay
w nowoczesnych dystrybucjach Linuksa, w starszych dystrybucjach przekierowałbyś go/dev/audio
źródło
switch(foo){...}
czymś takimplay(note[(foo-'1')%10])
. Przeczytaj także wskazówki dotyczące gry w golfa w C