To jest wersja audio wyzwania kodowania obrazu na Twitterze .
Zaprojektuj format kompresji dźwięku, który może reprezentować co najmniej jedną minutę muzyki w 140 bajtach lub mniej drukowanego tekstu zakodowanego w UTF-8.
Zaimplementuj go, pisząc program wiersza polecenia, który przyjmuje następujące 3 argumenty (po nazwie samego programu):
- Ciąg
encode
lubdecode
. - Nazwa pliku wejściowego.
- Wyjściowa nazwa pliku.
(Jeśli preferowanemu językowi programowania brakuje możliwości korzystania z argumentów wiersza polecenia, możesz zastosować alternatywne podejście, ale musisz to wyjaśnić w odpowiedzi).
encode
Operacja konwersji od wybranego formatu audio do formatu skompresowanego „tweet”, a decode
operacja konwersji z formatu „tweet” z oryginalnym formacie audio. (Oczywiście, oczekuje się implementacji kompresji stratnej, więc plik wyjściowy nie musi być identyczny z danymi wejściowymi, tylko w tym samym formacie).
Uwzględnij w swojej odpowiedzi:
- Kod źródłowy twojego programu w całości. (Jeśli ta strona jest za długa, możesz ją hostować w innym miejscu i opublikować link do niej).
- Wyjaśnienie, jak to działa.
- Co najmniej jeden przykład, z linkiem do oryginalnego pliku (plików) audio, tekstem „tweet”, do którego kompresuje, i plikiem audio uzyskanym przez dekodowanie tweeta. (Odpowiadający jest odpowiedzialny za stwierdzenia dotyczące „dozwolonego użytku” praw autorskich).
Zasady
- Zastrzegam sobie prawo do usunięcia luk w regulaminie konkursu w dowolnym momencie.
- [Edytowano 24 kwietnia] Do wprowadzenia
encode
funkcji (i wyjściadecode
funkcji) możesz użyć dowolnego rozsądnego, wspólnego formatu audio, niezależnie od tego, czy będzie to:- Nieskompresowany przebieg, taki jak WAV.
- Skompresowany przebieg, taki jak MP3.
- Styl „nuty”, jak MIDI.
- Twój skompresowany format „tweet” musi faktycznie kodować dźwięki w pliku wejściowym. Tak więc następujące typy wyników nie liczą się:
- Identyfikator URI lub ścieżka do pliku podająca lokalizację, w której przechowywane są rzeczywiste dane wyjściowe.
- Klucz do tabeli bazy danych, w której rzeczywiste dane wyjściowe są przechowywane jako obiekt blob.
- Coś podobnego.
- Twój program musi być zaprojektowany do kompresji ogólnych plików muzycznych, więc nie rób rzeczy, które w oczywisty sposób są powiązane z konkretną przykładową piosenką. Na przykład, jeśli demonstrujesz „Twinkle, Twinkle, Little Star”, twoja procedura kompresji nie powinna zakodować na stałe określonego symbolu dla sekwencji zrób-to-tak-tak-la-la-so.
- Dane wyjściowe Twojego programu powinny być w stanie przejść przez Twittera i wyjść bez szwanku. Nie mam listy obsługiwanych znaków, ale staram się trzymać liter, cyfr, symboli i znaków interpunkcyjnych; i unikaj znaków kontrolnych, łączenia znaków, znaczników BIDI i innych podobnych dziwnych rzeczy.
- Możesz przesłać więcej niż jeden wpis.
Kryteria oceniania
Jest to konkurs popularności (tzn. Wygrywa większość zwycięstw netto), ale wyborcy powinni rozważyć następujące kwestie:
Precyzja
- Czy potrafisz rozpoznać utwór po skompresowaniu?
- Czy to brzmi dobrze?
- Czy nadal potrafisz rozpoznać, na którym instrumencie grasz?
- Czy nadal rozpoznajesz teksty piosenek? (Jest to prawdopodobnie niemożliwe, ale byłoby imponujące, gdyby ktoś to osiągnął).
Złożoność
Wybór przykładowej piosenki ma tutaj znaczenie.
- [Dodano 24 kwietnia] To wyzwanie będzie najłatwiejsze z MIDI lub podobnymi formatami. Jeśli jednak dołożysz wszelkich starań, aby działał z formatami typu falowego, zasługuje to na dodatkowe uznanie.
- Jaka jest struktura Jasne, że możesz spełnić wymóg jednej minuty, po prostu powtarzając te same 4 miary dowolną liczbę razy. Ale bardziej złożone struktury piosenek zasługują na więcej punktów.
- Czy format może obsłużyć wiele nut granych jednocześnie?
Kod
- Utrzymuj to tak krótko i prosto, jak to możliwe. Nie jest to jednak golf golfowy, więc czytelność ma większe znaczenie niż liczba znaków.
- Sprytne, skomplikowane algorytmy też są OK, o ile są uzasadnione lepszą jakością wyników.