Twoim celem jest wydrukowanie tekstu piosenki „Twinkle Twinkle Little Star” podczas odtwarzania każdej nuty.
Mikrofon komputera usłyszy notatki. Jeśli wysokość (ale niekoniecznie długość) nuty jest poprawna, wydrukuj odpowiednią sylabę. W przeciwnym razie nie rób nic. Każda nuta będzie miała co najmniej pół sekundy długości, a przerwa między nutami będzie wynosić co najmniej ćwierć sekundy.
Skorzystaj z podanych tutaj nut i następujących tekstów: (Pionowe linie oznaczają przerwy w sylabie).
Twin | kle, twin | kle, lit | tle gwiazda,
Jak wygrałem | der kim jesteś.
W górę | pokonał świat tak wysoko,
Jak dia | mon na niebie.
Twin | kle, twin | kle, lit | tle gwiazda,
Jak wygrałem | der kim jesteś.
Nagranie z muzyką można znaleźć tutaj .
Przykład
Komputer słyszy środkowe C i drukuje „Twin”
Słyszy kolejne środkowe C i drukuje „kle”
Następnie słyszy kolejne środkowe C (zła nuta) i nic nie robi.
Następnie słyszy G powyżej środkowego C i drukuje „twin” i tak dalej.
Zasady
- Interpunkcja musi być taka, jak pokazano.
- Odstępy muszą być takie, jak pokazano (ze spacjami i znakami nowej linii).
- Biała spacja może być wydrukowana wraz z poprzednią lub następną sylabą.
Odpowiedzi:
Python 3 - Częściowe rozwiązanie (
760742734710705657 znaków)(Ostatnia edycja; obiecuję)
Wydaje się, że to naprawdę bardzo ładny, bardzo trudny problem (zwłaszcza rozpoznawanie, gdzie nuty zaczynają się i kończą). Automatyczna transkrypcja muzyki wydaje się być otwartym tematem badawczym (ale nie o tym nic nie wiem). Oto częściowe rozwiązanie, które nie dokonuje segmentacji nut (np. Drukuje „Twinkle” naraz, gdy słyszy częstotliwość) i prawdopodobnie działa tylko dla tego konkretnego pliku ogg:
To wymaga...
Zmień A = -52 (minimalna amplituda) w górnym wierszu w zależności od mikrofonu, ilości dźwięku otoczenia, głośności odtwarzanej piosenki itp. Na moim mikrofonie wydaje się, że mniej niż -57 odbiera dużo obcych dźwięków a więcej niż -49 wymaga grania bardzo głośno.
To może być gra w golfa dużo więcej; Jestem pewien, że istnieją sposoby na zapisanie wielu znaków w tablicy słów. To jest mój pierwszy nietrywialny program w Pythonie, więc nie znam jeszcze języka.
Ukradłem kod do wykrywania częstotliwości za pomocą autokorelacji z https://gist.github.com/endolith/255291
Nie golfowany:
źródło