У меня есть коллекция музыки: FLAC, японские альбомы, которых нет в стримингах обычно, редкие релизы с додзин‑фестивалей. Слушать её хотелось так же удобно, как Spotify: с телефона, с компьютера, с текстами, статистикой и итогами года. А получалось как в 2010-м: файлы копируются руками, плейлисты живут на одном устройстве, а тексты японских песен без чтений иероглифов бесполезны.
Готовые решения закрывали задачу по кусочкам. Poweramp отлично играет, но только на одном телефоне. Plex и Plexamp умеют стриминг, но требуют аккаунт, а часть функций у них за подпиской. Связка Navidrome и Symfonium хороша, но это два разных продукта от разных авторов, и половина того, что мне было нужно, не входила ни в один из них.
Поэтому я написал своё. Сразу оговорюсь: Nami — мой проект. Проект называется Nami (波, «волна»). Сейчас это:
приложение для Android на Kotlin и Jetpack Compose;
приложение для Windows и Linux на Tauri (Rust + React);
свой сервер на Rust, который ставится одной командой на VPS или домашний компьютер;
сайт nami‑music.ru.
Всё бесплатно, без рекламы и без обязательного аккаунта.
Что получилось
Сначала коротко покажу продукт, чтобы дальше было понятно, о чём речь.

Библиотека. Треки, альбомы, артисты, жанры. Обложки и фото артистов кешируются на диск, поэтому прокрутка большой коллекции не дёргается.

Плеер. Перемотка по форме волны трека, формат и битрейт файла, BPM и тональность. Всё это считается на сервере при загрузке трека.

Тексты. Синхронизированные тексты с караоке‑подсветкой. Для японских песен есть фуригана (чтение над иероглифами) и ромадзи (текст латиницей), а для любых — перевод.

Итоги месяца и года. Как Spotify Wrapped, только по вашей собственной музыке. Все же любят посмотреть сколько они наслушали?
А ещё: эквалайзер с импортом профилей AutoEq, совместное прослушивание (джем), перенос воспроизведения между телефоном и компьютером с той же секунды, статус в Discord, умные плейлисты, теги и оценки.
Как всё связано

Главная идея: сервер необязателен. Приложение на телефоне и приложение на компьютере работают и сами по себе, с папками на устройстве. Сервер добавляет то, что без него невозможно: стриминг, синхронизацию, джем и итоги по всем устройствам сразу.
Сервер написан на Rust (axum + SQLite) и общается с клиентами через REST и WebSocket. Дополнительно он частично реализует протокол OpenSubsonic, поэтому библиотеку можно слушать даже с iPhone через любой Subsonic‑клиент: Amperfy, play:Sub и другие. Своего приложения для iOS пока нет, а так музыка доступна уже сегодня.
Синхронизация: одна таблица вместо девяти
Первая по‑настоящему интересная задача: синхронизировать между устройствами плейлисты, оценки, теги, заметки, моменты в треках и историю прослушиваний. Устройства бывают офлайн, меняют одно и то же, а потом приходят со своими изменениями.
Классическое решение — стратегия last‑write‑wins, то есть побеждает последняя запись. Но если применять её ко всей записи целиком, теряются данные. Допустим, на телефоне я переименовал плейлист, а на компьютере добавил в него трек. Кто пришёл позже, тот и затёр изменения другого.
Нужна last‑write‑wins на уровне поля. Прямолинейная реализация — отдельная колонка *_updated_at у каждого поля каждой таблицы и отдельная ветка сравнения для каждой. Это девять наборов почти одинакового SQL, и их надо трогать при каждом новом поле.
Вместо этого состояние хранится по одной строке на поле:
CREATE TABLE state ( user_id INTEGER NOT NULL, entity TEXT NOT NULL, -- 'playlist', 'rating', 'tag', 'moment', ... id TEXT NOT NULL, field TEXT NOT NULL, -- 'name', 'stars', 'tracks', ... value TEXT NOT NULL, -- JSON updated_at INTEGER NOT NULL, PRIMARY KEY (user_id, entity, id, field) );
Тогда вся логика слияния — это один запрос (в реальном коде он ещё хранит предыдущее значение, чтобы отличить новую правку от повторно доставленного запроса):
INSERT INTO state (user_id, entity, id, field, value, updated_at) VALUES (?1, ?2, ?3, ?4, ?5, ?6) ON CONFLICT (user_id, entity, id, field) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at WHERE excluded.updated_at > state.updated_at;
Клиент отправляет пачку изменений вида {entity, id, field, value, updated_at}, а в ответ получает всё, что изменилось с его прошлого запроса. Удаление — это та же запись со специальным значением. Новая сущность в приложении не требует ни миграции, ни нового кода на сервере: достаточно начать отправлять новый entity.
Караоке: выравнивание текста нейросетью прямо на телефоне
Синхронизированных текстов с таймингом по словам почти не бывает. LRCLIB и другие базы в лучшем случае дают тайминг строк. А для караоке‑подсветки нужно знать, когда звучит каждое слово.
Решение — whisper.cpp с таймстемпами на уровне токенов, запущенный на самом телефоне. Модель распознаёт трек, получает слова со временем, и эти слова сопоставляются с уже известным текстом строк.
Обвязка написана на Rust и подключается к Kotlin через uniffi. Здесь я наступил на неочевидную проблему: whisper.cpp принимает 16 кГц моно в f32. Самый естественный интерфейс выглядит так:
#[uniffi::export] pub fn align(pcm: Vec<f32>) -> Vec<WordTiming> { /* ... */ }
И он роняет приложение по нехватке памяти. Сгенерированная Kotlin‑обвязка для последовательности f32 упаковывает каждый элемент в отдельный java.lang.Float. Трек длиной 4 минуты — это почти 4 миллиона сэмплов, то есть 4 миллиона объектов в куче. Стандартной куче приложения в 256 МБ этого хватает, чтобы умереть.
Исправление — передавать сырые байты:
#[uniffi::export] pub fn align(pcm_bytes: Vec<u8>) -> Vec<WordTiming> { let pcm: Vec<f32> = pcm_bytes .chunks_exact(4) .map(|b| f32::from_le_bytes([b[0], b[1], b[2], b[3]])) .collect(); }
Один массовый буфер вместо миллионов объектов. Распознавание полного трека на процессоре телефона всё равно занимает минуты, поэтому в интерфейсе есть индикатор прогресса. Его значение берётся из колбэка самого whisper.cpp.
Фуригана и ромадзи
Для японских песен текст без чтений — половина удовольствия. На телефоне и на компьютере работает одна и та же схема:
Морфологический анализатор kuromoji со словарём IPADIC разбивает строку на слова и даёт каждому чтение катаканой.
Над словами с иероглифами ставится чтение хираганой через HTML/Compose‑аналог
<ruby>.Ромадзи — это транслитерация тех же чтений по Хэпбёрну, с учётом сдвоенных согласных (
がっこう→gakkou) и слогов с маленькимиゃゅょ.
export function romanize(h: string): string { let out = ''; for (let i = 0; i < h.length; ) { if (h[i] === 'っ' && i + 1 < h.length) { const next = DI[h.slice(i + 1, i + 3)] ?? MONO[h[i + 1]] if (next) { out += next[0]; i++; continue } } const di = DI[h.slice(i, i + 2)] if (di) { out += di; i += 2; continue } out += MONO[h[i]] ?? h[i] i++ } return out }
Словарь весит около 17 МБ, поэтому он загружается только тогда, когда вы впервые включаете фуригану или ромадзи.
На десктопе нашлись свои подводные камни. Сборка kuromoji под ESM ломалась на встроенном gunzip, а Vite отдавал сжатые файлы словаря с заголовком Content-Encoding: gzip, и браузер распаковывал их раньше, чем библиотека. В итоге сработало так: UMD‑сборка подключается обычным <script>, а файлы словаря в режиме разработки отдаются как есть.
Звук: bit‑perfect и FFmpeg на пять декодеров
Для аудиофилов важно, чтобы файл 24 бит / 96 кГц дошёл до ЦАП без пересэмплирования и без системного микшера. На Android для этого пришлось написать собственный вывод на USB‑ЦАП в обход аудиостека системы. На Windows используется эксклюзивный режим WASAPI на частоте файла.
С форматами отдельная история. Android сам умеет FLAC, MP3, AAC, Opus и WAV, но не APE, WavPack, TAK и Musepack. К версии 1.0.33 APK разросся до 234 МБ. Сейчас FFmpeg собирается с флагом --disable-everything, и в нём включены только пять декодеров, которых нет в Android:
--enable-decoder=ape,wavpack,tak,mpc7,mpc8

Со следующей версии APK весит 96 МБ. Трекерная музыка (MOD, XM, IT, S3M) играется через libopenmpt, а музыка из игр (NSF, SPC, VGM) — через game‑music‑emu.
Приложение для ПК: почему Tauri, а не Electron
Десктопная версия написана на Tauri: интерфейс на React, всё остальное на Rust. Главный аргумент — звук не должен идти через браузер. HTML5 audio не даёт ни эксклюзивного режима, ни контроля над частотой вывода. В Tauri аудиодвижок работает в отдельном потоке на чистом Rust (rodio + symphonia), а WebView только рисует интерфейс.
Приятный побочный эффект — размер: установщик для Windows весит 26 МБ.

Отдельно расскажу про статус в Discord. Rich Presence работает через локальный IPC: это именованный канал на Windows и unix‑сокет на Linux к клиенту Discord на той же машине. Поэтому приложение на ПК публикует статус напрямую, а если Discord на компьютере не запущен, статус публикуется через сервер. Так в профиле видно и то, что играет на телефоне.
Сервер: 69 МБ памяти
Сервер — один статический бинарник на Rust. Установка на Linux выглядит так:
curl -fsSL https://raw.githubusercontent.com/MozzarellaCheesee/nami/main/install.sh | bash
Также есть установщик для Windows и образ Docker. Сервер сам:
сканирует папку с музыкой, читает теги и обложки;
считает форму волны, BPM, тональность и выравнивание громкости;
отдаёт трек в исходном качестве или перекодирует в HLS с AAC 128/192 для мобильного интернета;
находит тексты песен в LRCLIB и переводит их через DeepL, если указан ключ;
обновляется одной командой
nami update.
Для масштаба — живые цифры с моего VPS: библиотека 27 ГБ, 441 трек, два часа работы после обновления. Сервер занимает 69 МБ оперативной памяти и в простое не нагружает процессор. Бинарник весит 8 МБ.
Сравнение с другими плеерами

Честно о том, где Nami проигрывает:
Нет приложения для iOS. Пока выручают Subsonic‑клиенты. Настоящий bit‑perfect на iPhone невозможен в принципе: у iOS нет публичного доступа к USB‑аудио.
Исходный код закрыт. Релизы, установщики и документация лежат в публичном репозитории, но сами исходники приватные.
Нет каталога. Это плеер для своей музыки. Если вы открываете для себя новое через рекомендации стриминга, Nami его не заменит.
Что дальше
Приложение для iOS. Оценка и план уже готовы, это отдельный большой проект.
Рекомендации по собственной коллекции: что давно не слушали и что похоже на любимое.
Попробовать
Сайт: nami‑music.ru
Android (8.0 и новее): скачать APK
Windows и Linux: скачать для компьютера
Сервер: инструкция по установке
Буду рад фидбэку в комментариях: чего вам не хватает в музыкальных плеерах и что стоит сделать следующим.
Комментарии (36)

id_Alex
29.09.2026 11:26а как настраивает бит-перфект в вашем плеере?

AstolfoOwO Автор
29.09.2026 11:26Зависит от платформы.
На винде. Внизу окна есть кнопка "Звук" (иконка эквалайзера). В ней выбираете свой ЦАП и включаете "Эксклюзивный режим (bit-perfect)". Плеер занимает устройство целиком через WASAPI Exclusive и выводит звук с частотой и разрядностью файла, в обход микшера Windows. Там же видно, что сейчас реально идёт на выход, например "Сейчас: эксклюзивно, 96.0 кГц". Пока плеер держит устройство, другие программы вывести на него звук не могут.
Линукс. В том же разделе выбираете устройство вида hw:…. Звук идёт напрямую в ALSA, мимо PipeWire и PulseAudio.
Android. Настройки → Аудиотракт → "Bit-perfect по USB". Нужны Android 14+ и USB-ЦАП. Используется системный API Android 14 для bit-perfect вывода, поэтому результат зависит от прошивки и железа: на части телефонов производитель его не поддерживает. Если режим реально включился, приложение само отключает EQ, ReplayGain, dither и кроссфейд. На телефонах без поддержки есть режим "Hi-Fi": плеер не трогает сэмплы, но системный микшер Android с ресемплингом остаётся.
В любом режиме bit-perfect ломают эквалайзер, выравнивание громкости и регулировка громкости не на 100%. Громкость в этом режиме лучше крутить на самом ЦАПе.

foldr
29.09.2026 11:26Мне больше всего не хватает в классических музыкальных плеерах это отсутсвие рекомендаций - благодаря им я встретил много потрясающих исполнителей: известных, которых игнорировал раньше, переоткрыл заново (считай находился в вакууме собственной коллекиии), так и маленьких, о которых мало кто знает. Поэтому приходится сидеть на ужасных популярных клиентах типа яндекс музыки. Хочу, чтобы была и собственная коллекция, и качественные рекомендации, и плеер с человеческим лицом, и миксы. Раньше слушал или по исполнителям или по альбомам или по плейлистам (вручную утомительно делать) или все сразу. Да я готов платить подписку за использование api стриминговых сервисов, если это позволит реализовать все мои хотелки!

AstolfoOwO Автор
29.09.2026 11:26Я бы тоже хотел того же самого, и с радостью бы реализовал. Но к сожалению для этого нужны большие средства что бы привлекать исполнителей публиковать свою музыку на моей площадке. Из-за этого единственный вариант только собирать коллекцию самому(

foldr
29.09.2026 11:26Реализовать собственную площадку это слишком радикально :) Я про то, что существующих сервисов много, но отсутствует возможность пользоваться ими кроме как через собственные клиенты, со всеми их недостатками. Жаль, что нельзя переиспользовать имеющееся даже при возможности оплачивать такой доступ.

AstolfoOwO Автор
29.09.2026 11:26Ну если прям хочется, я реализовал на сервере OpenSubsonic, просто ставишь сервер через скрипт, настраиваешь домен и подключаешь. Потом в приложениях что поддерживают OpenSubsonic API вставляешь ссылку из веба сервера своего и слушаешь. Возможно я все еще не понимаю что ты пытался донести, сорян

foldr
29.09.2026 11:26У меня как-то давно еще была хотелка оперативно узнавать выходы новых релизов любимых исполнителей. Как это физически возможно? Делать парсилку миллионов соцсетей и сайтов? Вручную проверять? Стриминговые сервисы дают это из коробки

AstolfoOwO Автор
29.09.2026 11:26В основном они на ютубе публикуют анонсы (мб в соц сетях). Оформлять как бы подписку-проверку на анонс и получать уведомление. Идею ты мне интересную подкинул, может быть покумекаю как сделать можно) Спасибо

Serega_Biven
29.09.2026 11:26За тето и мику +, за вайбкод -, выходит ноль
P.S вот бы кто на линукс плеер разработал, пользоваться клементином адище ещё то

AstolfoOwO Автор
29.09.2026 11:26Визуал не мое, не умею придумывать, пришлось к клауду прибегнуть, так бы визуал шакальный был. А так плеер работает и на линухе) Ядро я кропотливо месяц ручками реализовывал. За тето благодарен)

Serega_Biven
29.09.2026 11:26Ну ладно, за ядро лайк поставлю.
А почему именно японские-то. Можно сделать плеер для фанатов бурзума или скриллекса
З. Ы кучу альбомов вокалоидов имею, пару фигурок, в секае 2 года и играм по вокалоидам до секая 3ку. Рэспэкт получается

AstolfoOwO Автор
29.09.2026 11:26Японский потому что душа упала туда, стремлюсь, язык учу) Чисто для себя делал ибо коллекции большие да в основном то чего на площадках нет (Demetori как пример). Подумал почему бы не поделиться с людьми как я, да и облегчить жизнь работягам)

Serega_Biven
29.09.2026 11:26Может вас заинтересует идея - читалка по манге и манхве, можно и не русскоязычные сайты. То что на рынке сейчас есть это дикий мусор, то проблемы с сервер-клиент, то подключение, то поиск. Есть одно приложение, оно для меня базовое уже 9 лет как читаю на английском (у нас жлобы и перевод глав это полгода). Может когда-нибудь реализуете в качестве эксперимента. Мобильные приложения не мой профиль, увы
У меня похожие проблемы, есть большая коллекция нирваны но сортировка это ужас. Приходится слушать одно и тоже по нескольку раз потому что концерт или особенный студийник. Беда..

AstolfoOwO Автор
29.09.2026 11:26Я подумаю над этим. Учитывая что сейчас достаточно сервисов по чтению японского/корейского творчества, можно как нибудь собирать это в одно место. Но советую лучше все равно приобретать бумажные копии, так удобнее, интереснее да и поддержать любимого мангаку тоже неплохо)

Serega_Biven
29.09.2026 11:26Я бы это назвал агрегатором сайтов. Нормального агрегатора у нас нет как и адекватных команд-переводчиков. Вы и сами прекрасно понимаете что те сайты которые предоставляют услуги чтения "за деньги", не заключают договора с японцами. По факту это тоже пальто
Да я б и покупал, только этого даже в продаже нет. Прям вообще

AstolfoOwO Автор
29.09.2026 11:26а как же амазон тот же, там навалом манги, лично я читаю в оригинале на японском, единственная проблема в том что ждать книженцию долго. А так идея хорошая, я себе пометку сделаю в обсидине. Покумекаю да может что выйдет)

Serega_Biven
29.09.2026 11:26На амазоне проверил Bouryoku banzai, уже 72 глвы вышло, а книженции в переводе как не было так и не
Удачи вам

AstolfoOwO Автор
29.09.2026 11:26Тогда могу посоветовать только учить язык оригинала, увы) Спасибо большое!)

akiha
29.09.2026 11:26Удивительные совпадения, как раз этой ночью искал какой-нибудь плеер для своего MIAD01 (мобильный фубар уж как-то совсем надоел), и вот, даже вне этой тематики, совершенно случайно наткнулся на данный релиз. Самое примечательно, что мне все это очень близко: и яп музыка, и локальность плеера как таковая, и возможность синхронизации своих мобильных и стационарных устройств и библиотек. Собственно, хабр почитываю давно, но именно данный пост заставил меня тут зарегистрироваться чтобы оставить коммент.
Сразу столкнулся с тем, что не до конца понимаю логику работы библиотеки. Я могу выбрать отслеживаемую папку на самом телефоне, приложение начинает сканировать ее, и потом начинается импорт, Нами зачем-то в свою папку, видимо, перекачивает треки и в итоге через пару минут память телефона забита в ноль. Судя по весу, это явно не инфа про тональность/волну промотки и обложки. Что я делаю не так? Заранее спасибо за ответ, буду рад пользоваться приложением.
Попробовав импортировать 1-2 альбома, первые впечатления очень положительные, позже дополню ответ.
AstolfoOwO Автор
29.09.2026 11:26Привет, да, это немного странно работает и скорее всего я это переделаю, просто изначально было задуманно что библиотека все равно у меня не голая лежит на телефоне, так что я просто импортировал их в нами а внутренний механизм брал их и собирал к себе с нужными названиями (у каждого трека свой uuid), но я думаю ты прав в том, что это нужно исправить

akiha
29.09.2026 11:26Да, как минимум стоит добавить возможность выбора импорта как такового и чтения с готовой базы, просто если у меня есть своя логика сортировки, то и она ломается, ну и я молчу про то что любое другое приложение доступа к музыке уже иметь не будет.
И еще не очень ясна группировка по папкам при таком подходе - все треки в итоге в папке Импортированное, и других нет.
Ну и в целом, я лично привык именно что к папочным плеерам, у меня много электронной музыки, а, например, у тех же hardcore*tanoc почти все альбомы - это компиляция треков разных исполнителей. Тут закрался еще один нюанс - логика группировки по альбомам полностью копирует группировку по исполнителю, только первое в виде плиток, второе в виде списка. То есть если на альбоме один трек от одного исполнителя, второй от другого и т.д., то это будут разные альбомы. Это надо исправить, либо дать возможность выбора, потому что я понимаю, что коллаб Х и Y исполнителя могут быть в одном альюоме, а могут быт в разных, мб такое надо кому разделение (хотя я сомневаюсь).
В любом случае, буду ковырять приложение дальше хотя бы на маленькой базе, если что подмечу, напишу. В остальном пока ощущения бомбезные, конкретно вывод на цап, правда, проверить не могу, у меня плеер сам аудиопотоки в обход микшера пинает .
А еще вопрос, планируются ли релизы на каких-то площадках, типа ф-дроид, иззи, гплей, гит релизы?

SaturnTeam
29.09.2026 11:26О, отлично, себе поставлю, как раз искал что-то подобное.
Один вопрос: кеширование есть на мобилках? Чтобы в самолёте слушать только скаченное, и с возможностью отдельно скачать пару любимых каталогов/групп?

AstolfoOwO Автор
29.09.2026 11:26Есть загрузка на телефон, изначально нацелено вообще на локальное прослушивание. Если поставили сервер то можно скачать трек на телефон и будет работать без сети

Darkreeal
29.09.2026 11:26Спасибо,буду сейчас знакомиться и на пк и на телефоне и на плеере под андройд .Чего лично мне не хватает в плеере ,у меня коллекция 28 000 треков и растёт каждый день ,утром и вечером нахожу новую для себя музыку через яндекс музыку ,а днем на работе слушаю свою библиотеку через колонку ,и вот что я заметил.ни один плеер из тех что я слушал не работает корректно с случайным воспроизведением,то есть хочешь слушать музыку в случайном порядке ,но без повторений пока не проиграется вся библиотека ,а по итогу треки постоянно попрпадают в повтор и такое ощущение что гоняет одни и те же треки по кругу ,причём треков 100 наверное ,в power amp нашёл в настройках случайного воспроизвидения настройку что бы типо не повторялось ,но увы и ах это не работает .буду следить за проектом .И еще прочитал про библиотеку ,что плеер куда то копирует музыку ,если это так ,то это бяда ,у меня на телефоне нет места под вторую библиотеку ,а на плеере стоит карта памяти на 1.5 Тб ,которая уже на 826 гигов занята ,да и на пк версии по сути аналогичная ситуация ,поэтому если дела обстоят как описано выше ,то смогу пользоваться только тогда когда плеер научится пользоваться файлами из указанного места .

Dancho67
29.09.2026 11:26Проект крутой, спасибо. Но есть пара “но”:
Ну ведь есть же Jellyfin, бесплатный, огромная экосистема плагинов, куча приложений, в том числе и под IOS. Даже если нужного функционала нету, это решается за пару минут самописным плагином. Но нет! Миру срочно нужна очередная жертва неудачного слоп аборта, поддержка у которого прекратится через месяц, когда подписка Claude кончится.
Если хочется своего, тогда вы бы выбрали себе один конкретный фреймворк мультиплатформенный и на нем пишите сразу клиент с прицелом под мультиплатформу, не распыляя свое время
и токенына поддержку индивидуальных клиентов для каждой платформы. Имхо, раз вы Jetpack затащили, тогда возьмите CMP, тот же Jetpack, только мультиплатформенный, переезд должен быть наименее болезненным. Tauri, хоть и заявляет поддержку мобилок, у него в этом плане все сложнее, чем у CMP\Flutter.Остальные желаемые свистоперделки реализуются патчами поверх уже существующих клиентов(Finamp к примеру). В лучшем случае, в будущем вы сделаете PR в мастер, который по итогу примут, в худшем случае у вас будет личный форк, который поддерживать явно попроще, чем самопис.

AstolfoOwO Автор
29.09.2026 11:26У меня он "почти" кросс-платформенный, если так можно сказать. Реализован проект на tauri, единственное что я использовал kotlin и Jetpack Compose для нативного интерфейса и что бы меньше костылей городить. Я вообще затеял это чисто для себя в первую очередь, что бы закрыть свои хотелки в интерфейсе и удобстве, пост накатил что бы опыт получать, я же все таки обычный студент который хочет развиваться в профессии. Claude я использовал для создания интерфейса в tauri (что что, а React я не очень то знаю), все остальное ручками собирал с начала сентября на rust и kotlin. Если вы считаете что другие платформы лучше, я не заставляю и не призываю вас пользоваться моим софтом, я просто рассказываю с чем я сталкиваюсь в ходе разработки когда уже есть хотя бы какой-нибудь продукт который можно использовать

voldemar_d
29.09.2026 11:26я же все таки обычный студент который хочет развиваться в профессии. Claude я использовал для создания интерфейса в tauri (что что, а React я не очень то знаю), все остальное ручками собирал с начала сентября на rust и kotlin
Желаю Вам удачи - всем бы студентам иметь столько желания развиваться и работоспособности. Отдельно хочу отметить, насколько многие (включая меня) недооценивают возможности современных средств разработки с помощью ИИ. Есть правильная фраза про то, что одни ищут возможности, а другие - причины (ничего не делать).
CrystalSnake
Сегодня я узнал что оказывается можно тональность прямо в плеере определять... Поставлю пожалуй плагин в foobar себе.
AstolfoOwO Автор
Мне это было необходимо так как я играю на муз. инструментах, я подумал что это может быть полезно многим.
voldemar_d
А если в композиции тональность меняется несколько раз, плеер что и как определяет?
AstolfoOwO Автор
общую, среднюю по всему треку, это было бы слишком расточительно по ресурсам если бы я измерял каждый момент трека(
voldemar_d
А можете вкратце рассказать, как определяется тональность композиции? ИМХО, это вполне может потянуть на рассказ в виде отдельной статьи.
AstolfoOwO Автор
Я бы с радостью составил статейку на эту тему, но я так понял мой технический уровень недотягивает до уровня хабра(
Попозже могу описать как я решил эту задачу, отдельным комментарием
voldemar_d
Напишите, пожалуйста, это реально интересно. Я хоть и сам музыкант, но не очень понимаю, как программно определять тональность даже с использованием нейросетей. Просто бывает, что слушаешь какую-нибудь симфонию Прокофьева до-диез мажор, а в её звучании мажор как-то не очень присутствует :-) Вот и как определять здесь тональность?
Да и в более простой музыке это совсем непросто может оказаться.
AstolfoOwO Автор
Хорошо, сегодня подготовлю статейку об этом)