Pull to refresh

Comments 13

Спасибо за статью. Век живи — Век учись.
А почему вы решили захардкодить значения частот нот, не проще ли получать эти значения простым делением заданной ля (в вашем случае 440) на соответствующее искомой ноте n?
Простым делением тут работать не будет, т.к. изменение частоты между нотами растет экспоненциально. То есть, условно, между A4 и A3 разность будет 220, а между A3 и A2, уже 110. Ну и как бы зачем вводить функцию для вычисления, если захардкодить реально проще?

В дальнейшем, возможно, сделаю именно динамический расчет, для более точного соответствия реальным звукам.
Ну просто захардкоженная функция являет собой огромный свич, чем уже глаза «режет». Плюс как только вы захотите сделать частоту ля задаваемой, что часто важно, вам придется все равно придется все это дело переписывать.
Как уже писал выше, это пока самый минимальный работающий функционал. Несомненно, по мере доработок придется переписывать многое. В идеале, хотелось бы получить некоторый формат перевода обычной нотной записи в, например, строку, и её парсинг и «компиляцию» в wav-файл.
Графическое изображение волны уже делали на php https://github.com/afreiday/php-waveform-png

Однако, когда мне понадобилась волна из mp3, я никак не мог понять зачем применять php для этого, если все равно в любом случае требуется приложение для получения wav файла.

Куда проще воспользоваться ffmpeg для генерации волны ( правда попробовать настроить цвета этой волны — какой то лютый капец )

Когда я реализовывал плеер потипу как на soundcloud вот тут http://serebniti.ru/airs/2016-03-15/ ( анимация у меня не на канвасе, а css) я решил отказаться от волны на png в сторону json файла из png, получаемом на лету, по нескольким причинам.

1) Адаптивность к экранам. Я могу грамотно ресемплировать волну независимо от экрана из png в любую ширину.
Вот так http://cdn.serebniti.ru/getjson.php?id=5718&w=286 json для ширины экрана 3*286px (ширина просто 3 пикселя одного столбика)

2) Гибкость в дизайну. Уж из json можно на конве нарисовать что угодно.

3) Размер. Немножечко, но меньше, в json только Y координата + gzip.
Графическое изображение волны уже делали на php https://github.com/afreiday/php-waveform-png

Хочется сделать, во-первых, без использования lame для пережатия, да. А во-вторых, более человеко-понятно.

Когда я реализовывал плеер потипу как на soundcloud вот тут http://serebniti.ru/airs/2016-03-15/ ( анимация у меня не на канвасе, а css) я решил отказаться от волны на png в сторону json файла из png, получаемом на лету, по нескольким причинам.

В целом да, интересный вариант, можно подумать в эту сторону, спасибо.
Хочется сделать, во-первых, без использования lame для пережатия, да.

Хм. если на входе mp3 вам и так и так придеться распаковывать чем то в wav. Я пробовал способ ресемплирования json на клиенте
но потом отказался

http://stackoverflow.com/a/35880655/2497351
То есть Вы сначала с помощью ffmpeg получаете png, а делее интерпретируете его в json?
Да. Через ffmpeg получаю waveform с черным фоном и красной волной. Png уходит в папку с картинками, а JSON я генерю на лету из PNG через GD либу, ей же и делаю ресемлинг ( рейсайз тот который без интерполяции, самый простой, иначе полутона получаются и подсчет конкретно красных пикселей становится затруднительным)
Спасибо )
Буду следить за вашим проектом, возможно не только следить, пока трудно со временем, но мне эта тема прям очень интересна, только в контексте работы с подобными вещами на кубиборд/расбери-подобных железках, впрочем это не так уж и имеет значение.

В любом случае круто =)
Ну, прям регулярно-регулярно ничего не обещаю, делалось за 2 вечера с перерывом в неделю. Как правило, жду более менее свободных выходных, но делать что-нибудь более-менее часто :)
Sign up to leave a comment.

Articles

Change theme settings