Ludzie napisali wiele rzeczy, które pozwalają wizualizować jedną rzecz jako drugą. Teraz proponuję tłumaczenie liter na muzykę! Twoim zadaniem jest napisanie programu, który pobiera plik tekstowy i wysyła plik dźwiękowy z każdą literą przekonwertowaną na określoną notatkę C3-C8
.
Oświadczenie - właściwie nie oczekuję, że muzyka zabrzmi dobrze, ale mam nadzieję, że będę zaskoczony.
Dane techniczne
- Bierzesz nazwę pliku jako ciąg, a BPM (liczbę uderzeń na minutę) jako liczbę całkowitą
- Robisz wielkie litery,
A
aby być notatkąC3
- I przejdź o pół kroku dalej za każdą postacią w następującej kolejności:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Tak, nie każda postać zostanie użyta, ponieważ obejmuje ona zbyt wiele oktaw.
- W ten sposób tłumaczysz wszystkie znaki w pliku
- Połącz notatki na danym BPM jako ćwierćnuty
- Albo zapisz jako plik dźwiękowy (domyślam się, że midi będzie najłatwiejszy, ale wszystko jest w porządku) lub zagraj
- Każdy rozsądny format wejściowy jest w porządku
- Brak standardowych luk
- To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach !
Bonusy
- Pozwól transponować wyjście - 50 bajtów
- Zezwalaj na nakładanie się na siebie wielu ścieżek poprzez pobieranie wielu plików - 75 bajtów
- Połącz kolejne litery w jedną dłuższą notatkę - 50 bajtów
Edycja: Wow, mamy negatywne wyniki. Zwycięzcę ogłosimy w sobotę.
Odpowiedzi:
MATLAB, 159–50–50–75 = -16
Przykładowe dane wejściowe
Próbka wyjściowa
Generuje czyste sinusoidalne fale dźwiękowe, bardzo funky (piła jest również możliwa, z jeszcze lepszą partyturą, ale brzmi to trochę ... zbyt funky). Działa jako funkcja, więc oczekuje od niej tablicy znaków (
['abc';'def']
) z jednym rzędem na „ścieżkę”. Myślę, że jest to ujęte w „dowolnym rozsądnym formacie wejściowym” , ale jeśli ogólny konsensus jest taki, że muszę czytać plik, myślę, że mogę go zmienić. Wprowadzanei
są ścieżki tekstowe (o równej długości), liczbab
uderzeń na minutę it
transpozycja (należy podać 0, aby nie transponować). Łączy dwa sinusy w jeden, kompensując wkład sinusoidalny, więc otrzymałem wszystkie trzy bonusy, co dało mi wynik ujemny.Wersja z plikiem wejściowym: 211-175 = 36
Argument wejściowy
i
reprezentuje teraz nazwę pliku, pozostałe parametry pozostają niezmienione. Może nie działać w nowszych wersjach, ponieważ otrzymuję ostrzeżenie, któretextread
wkrótce może być przestarzałe. EDYCJA: czytanie tekstu najwyraźniej automatycznie dzieli się na białe spacje, więc to naprawiłem. Myślę też, że przypadkowo mogłem skontaktować się z kosmitami z dziwnymi dźwiękami wydanymi podczas testowania.Którą wersję preferujesz? :)
źródło
.mat
pliki mają rozsądny format wejściowy. Utwórz plik .mat ze zmienną „i” z tekstem. Następnie dodajload(i);
na początku wiersza 2 najwyższej wersji. Wynik: -16 + 8 =-8
. Zrobię to, gdy twój komentarz zyska więcej głosów niż mój, lub gdy OP ma opinię :)Snap ! - 401 - 75 = 326
Wypróbuj online tutaj.
Używam tej metody liczenia bajtów dla programu.
Dodałem odtwarzanie wielu dźwięków jednocześnie.
Podstawowa struktura jest taka sama jak oryginalna (patrz poniżej), ale z dodatkiem
launch{}
.launch{}
rozpoczyna nowy wątek z kodem w środku, umożliwiając współbieżność.Kod jako tekst to:
Kod oryginalny, 308.
Lucky Snap! ma wbudowane odtwarzanie MIDI;)
Niestety nie ma żadnej
indexOf
funkcji, dlatego muszę wykonać zewnętrzne wywołanie JavaScript, które jest dość drogie.repeat () (#)
Blok pochodzi z biblioteki iteracji.Kod można zapisać jako tekst taki jak ten, w ten sposób otrzymuję 308 bajtów:
źródło
-1
odindexOf
? Teraz wygląda na to, że jeśli nie ma go w łańcuchu, to ma numer 47.Mathematica, 219 - 50 - 75 - 50 = 44
Pobiera listę plików wejściowych, BPM i liczbę kroków do transpozycji jako dane wejściowe i odtwarza dźwięk (z fortepianu, każdy inny instrument zająłby więcej bajtów.) Nie brzmi tak źle!
źródło
JavaScript (ES6) 377–50–50–75 = 202
Po pierwsze, oto fragment, który można uruchomić, który używa
<input>
pól zamiast odczytu plików:A teraz faktyczny wpis:
Te trzy argumenty to tablica ciągów ścieżek plików do jednoczesnego odtwarzania, nuty na minutę i liczba pół kroków do transpozycji wszystkich danych wejściowych.
Z białymi znakami i komentarzami:
źródło