Это аудио версия задачи кодирования изображений в Twitter .
Разработайте формат сжатия звука, который может представлять по меньшей мере одну минуту музыки в 140 байтах или менее для печатаемого текста в кодировке UTF-8.
Реализуйте это, написав программу командной строки, которая принимает следующие 3 аргумента (после имени самой программы):
- Строка
encode
илиdecode
. - Имя входного файла.
- Выходное имя файла.
(Если в вашем предпочтительном языке программирования отсутствует возможность использовать аргументы командной строки, вы можете использовать альтернативный подход, но должны объяснить это в своем ответе.)
encode
Операция преобразования из выбранного аудио формата в вашем сжатом формате «твит», а decode
операция преобразования из вашего формата «чирикать» в оригинальном формате аудио. (Конечно, вы должны реализовать сжатие с потерями, поэтому выходной файл не обязательно должен быть идентичным входному, только в том же формате.)
Включите в свой ответ:
- Исходный код вашей программы, в полном объеме. (Если она слишком длинная для этой страницы, вы можете разместить ее в другом месте и опубликовать ссылку на нее.)
- Объяснение того, как это работает.
- По меньшей мере, один пример со ссылкой на исходный аудиофайл (ы), текст «твита», в который он сжимается, и аудиофайл, полученный путем декодирования твита. (Ответчик несет ответственность за утверждения о добросовестном использовании авторских прав.)
правила
- Я оставляю за собой право закрыть любые лазейки в правилах конкурса в любое время.
- [Отредактировано 24 апреля] Для ввода вашей
encode
функции (и вывода вашейdecode
функции) вы можете использовать любой приемлемый, распространенный аудиоформат, будь то:- Несжатый сигнал, как WAV.
- Сжатый сигнал, как MP3.
- Стиль «Ноты», например, MIDI.
- Ваш сжатый «твит» формат должен фактически кодировать звуки во входном файле. Итак, следующие типы вывода не учитываются:
- URI или путь к файлу, указывающий место, где хранится фактический вывод.
- Ключ к таблице базы данных, где фактический вывод хранится в виде большого двоичного объекта.
- Ничего подобного.
- Ваша программа должна быть разработана для сжатия общих музыкальных файлов, поэтому не делайте вещи, которые слишком явно связаны с вашей конкретной песней-примером. Например, если вы демонстрируете «Twinkle, Twinkle, Little Star», ваша процедура сжатия не должна жестко кодировать конкретный символ для последовательности «сделай сам».
- Вывод вашей программы должен быть в состоянии проходить через Twitter и выходить невредимым. У меня нет списка точных поддерживаемых символов, но я стараюсь придерживаться букв, цифр, символов и знаков препинания; и избегайте управляющих символов, сочетания символов, маркеров BIDI или других странных вещей, подобных этому.
- Вы можете подать более одной заявки.
Критерии оценки
Это конкурс популярности (т. Е. Выигрывает большинство чистых голосов), но избирателям настоятельно рекомендуется учитывать следующее:
точность
- Можете ли вы распознать песню после того, как она была сжата?
- Звучит хорошо?
- Можете ли вы узнать, на каких инструментах играют?
- Вы все еще можете узнать текст? (Это, вероятно, невозможно, но было бы впечатляющим, если бы кто-то достиг этого.)
сложность
Выбор песни примера имеет значение здесь.
- [Добавлено 24 апреля] Эта задача будет проще всего с MIDI или аналогичными форматами. Однако, если вы приложите дополнительные усилия, чтобы заставить его работать с форматами типа волны, это заслуживает дополнительной оценки.
- Какова структура? Конечно, вы можете выполнить требование в одну минуту, просто повторяя те же 4 измерения произвольное количество раз. Но более сложные песенные структуры заслуживают большего количества очков.
- Может ли формат обрабатывать много нот, играемых одновременно?
Код
- Держите это как можно более коротким и простым. Однако это не кодовый гольф, поэтому читаемость важнее, чем количество символов.
- Умные, сложные алгоритмы тоже подойдут, если они оправданы улучшенным качеством результатов.