Задача состоит в том, чтобы создать аудиофайл из белого шума.
Требования и инструкции:
- Ваша программа должна сгенерировать аудиофайл, содержащий только белый шум, то есть его интенсивность одинакова для всех (разумных) частот и отлична от нуля [см. Пример графика ];
- Нужно уметь проигрывать аудиофайл на последней версии VLC [на момент написания своего ответа];
- Программа не нуждается в криптографически сильной случайности,
rand
функциях или чтении из нее/dev/rand
- это нормально; - Программа должна быть способна генерировать не менее 1 часа звука, по крайней мере, теоретически (то есть системные ограничения, такие как максимальный размер файла, не применяются);
- Ваша оценка - это количество байтов в вашем исходном коде плюс все применяемые бонусы;
- Использование любой сторонней, внешней библиотеки в порядке;
- Программа должна работать без доступа в интернет.
Бонусы:
- -15%: позволяет указать формат аудиофайла (как минимум два варианта; количество возможных вариантов не меняет счет);
- -10%: Позволяет указать продолжительность аудио файла;
- -5%: позволяет указать битрейт аудиофайла.
Настройки могут быть сохранены в переменных, файлах или заданы как параметры командной строки на ваш выбор. Проценты рассчитываются от первоначального количества байтов до применения какого-либо бонуса.
Ответы:
МАТЛАБ, 25
записывает новый WAV-файл на диск с именем
a
. Он имеет частоту дискретизации 8 кГц и 16 бит на выборку в целочисленном формате со знаком. Исходные данные равномерно распределены по интервалу[0,1]
, который сопоставляется с интервалом[0,32767]
после преобразования в целочисленный формат.MATLAB, 28 - 4 (10% + 5%) = 24
Я не уверен, что имел в виду ОП о том, как настройки могут храниться в переменных, но я интерпретировал это так, как это удобно для этого случая. При условии, что:
Желаемая скорость передачи (в битах / секунду) предоставляется пользователем в переменной
b
. Биты на семпл жестко закодированы в 16.Желаемая продолжительность файла (в образцах) указана в переменной
d
.Результат:
MATLAB, 16 - 4 (15% + 10%) = 12
Добавляя еще один слой для получения бонусов, я делаю еще одно предположение: в переменной должна быть указана желаемая функция для вывода файла
f
. Тогда код упрощается до:Допустимые значения для функции:
или
Каждая функция заставит вышеуказанный фрагмент записать файл соответствующего формата (WAV или
.au
) с частотой дискретизации 8 кГц с указанной длительностью. Я снял бонус за спецификацию битрейта здесь, потому что поauwrite
умолчанию 8 бит на семпл вместо 16, какwavwrite
делает. Я не вижу способа гармонизировать их, не используя больше символов.источник
Баш, 34
Если вы не хотите «случайности» жесткого диска, (намного медленнее)
СПИН, 28
источник
/dev
.Mathematica 52 - 5 = 47
g
экспортирует белый шум. WAV файлs
секунд и 8000 бит / с.Пример: экспортируется 6-секундный файл белого шума.
источник
Суперколлайдер, 89 - 10% = 80,1 байта
К сожалению, несмотря на то, что он специально сделан для создания звука / звука, этот язык здесь не победит. Но это первое появление Supercollider на Code Golf, так что это круто!
Это представление теряется в первую очередь потому, что настройка записи и ее реализация являются многословным процессом из-за структуры клиент-сервер этого языка. Тем не менее, это крутой язык с большой силой в очень маленьком коде, когда вы просите это сделать вещи более сложные, чем просто белый шум.
Продолжительность файла задается путем изменения значения wait (). Я мог бы поместить это в переменную, но на самом деле в этом нет никакого смысла, так как Supercollider не имеет никакого упоминания о студии. Интерактивность заключается в манипулировании живым кодом, пока сервер все еще играет. По сути, IDE - это ввод-вывод (если вы не создадите пользовательский интерфейс для своего создания).
Вот версия для гольфа:
Вот версия для игры в гольф с возможностью записи в формате aiff или wav и указанием примера формата (int16, int8 и float - все варианты). К сожалению, даже со всеми бонусами, версия выше тарифов лучше. Это будет 139 - 30% = 97,3 байта.
А вот последняя версия последнего, так что вы можете видеть, что происходит.
источник
Bash + ALSA, оценка: 44 (52 символа - (10% + 5%) бонусов)
Дольше, чем другой
bash
ответ, но принимает длительность и битрейт. Также добавляет в файл достаточно правильный заголовок, поэтому должен быть достаточно переносимым:Сохраните как скрипт
chmod +x
и запустите:Обратите внимание, что .wav выводится на стандартный вывод, поэтому он должен быть перенаправлен в файл.
источник
C
127115 байтовБольшая часть кода записывает заголовок для файла * .au. Это печатает псевдослучайный звуковой файл в стандартный формат.
Частота дискретизации может быть скорректирована путем изменения
8000
.Продолжительность можно регулировать, нажимая
ctrl-c
всякий раз, когда вы хотите остановиться :-)источник
JavaScript, 167 байт
ВНИМАНИЕ: Уменьшите громкость перед запуском. Белый шум противный
Не создает файл, может быть, не то, что ожидалось.
-4 байта взломать игровой шум только на левом канале
источник