Це звукова версія завдання кодування зображень Twitter .
Створіть формат стиснення аудіо, який може представляти принаймні одну хвилину музики в 140 байтах або менше тексту для друку, що кодується UTF-8.
Реалізуйте це, написавши програму командного рядка, яка бере наступні 3 аргументи (після назви самої програми):
- Рядок
encode
абоdecode
. - Ім'я вхідного файлу.
- Вихідне ім'я файлу.
(Якщо у вашій бажаній мові програмування відсутня можливість використовувати аргументи командного рядка, ви можете використовувати альтернативний підхід, але слід пояснити це у своїй відповіді.)
encode
Операція перетворення з обраного аудіо формату в вашому стислому форматі «твіт», а decode
операція перетворення з вашого формату «чірікать» в оригінальному форматі аудіо. (Звичайно, від вас очікується реалізація стиснення втрат, тому вихідний файл не повинен бути ідентичним вхідному, просто в тому ж форматі.)
Включіть у свою відповідь:
- Вихідний код вашої програми, повністю. (Якщо ця сторінка задовга, ви можете розмістити її в іншому місці та опублікувати посилання на неї.)
- Пояснення, як це працює.
- Принаймні один приклад із посиланням на оригінальний аудіофайл (файли), текст "твіт", який він стискає, та аудіофайл, отриманий декодуванням твіту. (Відповідач відповідає за твердження про «добросовісне використання» авторських прав.)
Правила
- Я залишаю за собою право закрити будь-які лазівки в правилах конкурсу в будь-який час.
- [Відредаговано 24 квітня] Для введення
encode
функції (та виведенняdecode
функції) ви можете використовувати будь-який розумний, поширений аудіо формат, будь то:- Нестиснута форма хвилі, як WAV.
- Стиснута форма хвилі, як MP3.
- Стиль "нотна музика", як MIDI.
- Ваш стиснений формат "твіт" повинен фактично кодувати звуки у вхідному файлі. Отже, такі типи продукції не враховуються:
- URI або шлях до файлу, який дає місце, де зберігається фактичний вихід.
- Ключ до таблиці баз даних, де фактичний вихід зберігається як крапка.
- Нічого подібного.
- Ваша програма повинна бути розроблена для стиснення загальних музичних файлів, тому не робіть матеріалів, які занадто очевидно прив'язані до вашої конкретної приклади пісні. Наприклад, якщо ви демонструєте "Мерехтіння, Мерехтіння, Маленька зірка", ваша програма стиснення не повинна жорстко кодувати конкретний символ для послідовності "зробіть-так-так-ля-ля-так".
- Результати вашої програми насправді повинні мати можливість пройти через Twitter і вийти непошкодженими. У мене немає списку точних символів, які підтримуються, але спробуйте дотримуватися літер, цифр, символів та пунктуації; і уникайте контрольних символів, комбінуючи символи, маркери BIDI або інші подібні дивні речі.
- Ви можете подати більше одного запису.
Критерії судження
Це змагання за популярність (тобто виграє більшість чистих результатів), але виборці закликають враховувати наступне:
Точність
- Чи можете ви ще розпізнати пісню після її стиснення?
- Це добре звучить?
- Ви ще можете розпізнати, на яких інструментах граєте?
- Ви ще можете розпізнати тексти пісень? (Це, мабуть, неможливо, але було б вражаюче, якби хтось це досяг.)
Складність
Тут має значення вибір прикладу пісні.
- [Додано 24 квітня] Цей виклик буде найпростішим з MIDI або подібними форматами. Однак якщо ви докладете додаткових зусиль, щоб змусити його працювати з форматами типу хвилі, це заслуговує на додатковий кредит.
- Яка структура? Звичайно, ви можете виконати однохвилинну вимогу, просто повторивши ті ж самі 4 міри довільну кількість разів. Але складніші композиції пісні заслуговують більше балів.
- Чи може формат обробляти одночасно багато відтворених нот?
Кодекс
- Зберігайте це якомога коротше і просто. Однак це не кодовий гольф, тому читабельність має значення більше, ніж кількість символів.
- Розумні, складні алгоритми теж добре, якщо вони виправдані покращеною якістю результатів.