Pull to refresh

Comments 12

А как насчёт декодеров, например, mp3? Получается, что нужно писать адаптер для phono? Типа mp3 -> wav -> phono

Я пока не реализовывал декодеры, но по идее любой аудио-формат — это потенциальный источник и пункт назначения для аудио данных. Соответственно, пакет mp3 мог бы иметь Pump и Sink реализации чтобы читать и писать файлы. Аналогично wav. Если у исходного файла подходящая частота дискретизации и число каналов — можно брать и использовать.

А зачем для wav нужен Pump? Неужели чтение wav файла будет отличаться от чтения mp3? Как по мне логично было бы иметь File Pump, Http Pump, memory Pump, а декодер должен уже действовать как Processor. Аналогично Sink

Вы правы, такая организация кода тоже может быть. Для конечного пользователя все станет немного проще, но есть несколько трудностей:


  1. Компоненты будут содержать код для определения, какую технологию использовать.
  2. Пакеты будут содержать очень много зависимостей.
  3. Декодер не получится использовать как процессор, потому что все данные в pipe.Pipe передаются в float64, а для такой задачи нужно работать непосредственно с массивами байт.

Часть этих проблем являются следствием ограничений в Go. Кроме того, деление пакетов по технологиям является идиоматическим и можно часто встретить в стандартной библиотеке.

Прикольно — такой себе Apache Storm для звука

Отличная идея для проекта. Даже если бы его не было, чужие api так и просятся быть завернутыми в объекты, чтобы с помощью композиции оформлять разные виды обработок.


Как обычно мучает вопрос об открывшихся прикладных применениях. Можете, пожалуйста, в следующих сериях больше рассказать об идеях, что можно в принципе интересного делать со звуком? В применении для веба. Кроме банального перекодирования и наложения музыки фоном, в голову ничего не приходит.

Спасибо за комментарий. Из реальных сценариев в голову приходят голосовой чат и аудио-стриминг. Я хотел сделать демо, где играл бы небольшой отрезок аудио и можно было бы в real-time накидывать на него разные эффекты. Такой server-side processing для аудио. Пока отложил в ящик из-за сложного (для меня) клиента.


В целом, клиент-серверное взаимодействие есть в планах и обязательно будет описано по мере запиливания.

а как генерировать звук? например осциллятор обычный
Я думал о генераторах и как их реализовать для удобного использования. Помимо осциллятора я бы отнес к генераторам звука запись сигнала через аудио интерфейс. Здесь, наверняка, надо будет добавить какие то общие для всех генераторов параметры. Например, длительность генерации или возможность прервать ее «вручную». Как и любой другой источник, осциллятор должен будет реализовывать pipe.Pump. Конкретно — pipe.Pump с нужными для осцилляторами параметрами: форма волны, частота, амплитуда и т.д. К сожалению, я не очень знаком с генерацией сигналов, но было бы очень интересно реализовать.
Go часто упоминается в качестве его преемника

Что простите? Я б понял если бы назвали преемником Java, но C?
Просто автор считает — что если язык компилируемый и многопоточный — то это конечно сразу не менее чем приемник ANSI C, ну или С++ на худой конец. И теперь его нужно пихать во все возможные щели в любом виде — лишь бы оно было написано на go!
Видимо google «нехило башляет» за агрессивное «пропихивание» своего «поделия» во все отрасли «народного хозяйства», так что мы ещё увидим много статей из разряда: «давайте ловить мух в go», «давайте рисовать слонов в go», «давайте перепишем весь софт на go»… На подобные статьи хочется ответить: а давайте не будем… пихать не предназначенные для этого вещи во все дыры.

<sarcasm>Пойду проверю свой счет в банке.</sarcasm>


Если серьезно, то я просто нашел интересную мне задачу и решил ее языком, который мне нравится. Решение показалось мне интересным, я создал фреймворк и теперь хочу его развивать. Не считаю что какой то язык лучше другого. Каждому свое применение.

Sign up to leave a comment.

Articles