Не знаю как у баса, но у винампа есть такая фича - осцилоскоп и анализатор спектра, осцилоскоп- время - амплитуда сигнала, анализатор - амплитуда частотных составляющих по времени (анализатор спектра). Данные идут в виде массивов с временными штампами и с опережением около 3 секунд. так что вопрос не простой, синхронизация и определение формата даннных в массиве на первом месте Данные идут из кодера, микшер не имеет на них влияние. Так что их обработку надо делать в плагине - формировать нужные фичи, передавать их в ммв нельзя так как он просто от них подавится
Не знаю как у баса, но у винампа есть такая фича - осцилоскоп и анализатор
Да все там, у баса, с этим делом в порядке. Не сумневайтесь! А вот как это будет реализовано...
Serg, я тут вспомнил, и покапался в своих ММВ-шных завалах... Собственно есть бас-плагин для ММВ, и уже давно. И даже не один! Вот к одному описание:
Quote
FreePlay PlugIn | Command Documentation
- MP3 playback - WMA playback - WAVE playback - setting of audio position - setting of audio volume (uses DirectX, so volume of played sound is being set, does not screw OS
mixer values) - setting & retrieving Knob position - retrieving audio duration - retrieving audio position - retrieving audio volume - DirectX Sound Filters : Echo, Reverb, Flanger - DirectX Equalizer : 10 bands - Sound Position Analog Meter - Sound Volume Analog Knob - low cpu utilization - optional sound event handling - customizable Analog Meter Background image - FREE, FREE & TOTALLY FREE
А вот картинка одной демки со спектрографом.
Я там все наспех проверил, работает в проследней версии ММВ, а в "деталях" сам уже разбирайся. Архив с плагинами относительно большой - на 2+ Мб, поэтому забирай его здесь. Как скачаешь, удалю. Пароль на архив см в ЛС.
Если у Петра будет хорошее настроение, я уверен, он и тебе кинет
YURIY, может, лучше будет плагины эти выложить здесь на сайте? На форуме файл размером больше 500кб не прикрепить.
Quote (Serg)
что то не работает, и ММБ глючить начинает.Версия не та?
Serg, у меня работает. Вот другая демка
Папку с библами и проч. надо закинуть в рабочую папку ММВ, т.е все должно находиться в рабочей папке приложения. Там в инструкции все написано. Я не разработчик этих плагинов, и курировать их не намерен! Глюки, наверное, в ММВ быть могут (далеко не редкость), а плагины достаточно старые. Но это хоть что-то, пробуй! Лучше, чем ждать у моря погоды. Я посмотрю вечерком ещё, что имеется.. Кстати, в ММВ свой собственный "анализатор" имеется, неинтересный А пока праздновать надо.
YURIY, может, лучше будет плагины эти выложить здесь на сайте?
Меня также смущает, что оно всё старинное какое-то... К 2011 году Sower вдруг нас порадует наконец своим плагином А пока - просто можешь выкинуть ссылку на обменник, без пароля.
Как я понял требуется получать уровень заданных пользователем частот сигнала, и уже дальше "прыгать". Пожалуй, теоретически с Bass это возможно, и подобные вещи можно забабахать, но есть два ограничениия: 1. Это можно забабахать только в Delphi (или С++), т.к.
Quote (Alex3A)
в ммв нельзя так как он просто от них подавится
Совершенно верно подмечено! В случае с плагином вся реализация (с заданными юзером параметрами) должна выполняться исключтительно самим плагином, а ММВ может сгодиться только как интерфейс для вывода конечного результата! 2. Для этого нужно ещё хорошо владеть этим самым Delphi, а не на уровне копи-пасте. Посему рекомендую позабыть эту затею.
Кстати, замое забавное, что подобные вопросы всплывали и на оффоруме Bass, но известие о конкретном решении так и не объявлено пока.
Quote (YURIY)
оно всё старинное какое-то
А разьве есть другое? Лично я альтернативы не вижу, даже в перспективе!
Quote (YURIY)
А пока - просто можешь выкинуть ссылку на обменник, без пароля
Я сейчас вспомнил, то уже как-то выкдалывал эти плагины в обменник ещё на CSoft. Видимо, ссылки потерялись. Наверное, нало оформить все как положено, чтобы было на виду. Мы же ведь ничего не теряем... Никто не может вернуться в прошлое и изменить свой старт. Но каждый может стартовать сейчас и изменить свой финиш!
Даже в сущесвующей версии моего плагина можно определить громкость частоты. Только эти данные не такие уж и удобные в плане размера чисел, но их можно "преобразовать" в шкалу от 0 до 100, что и делается для почастотной визуализации. В скрипте visual мы получаем такие данные. Берите плагин из прикрепления, он уже стал потяжелее из за tags.dll, функции уже добавились, но над ним я уже давно не работал, вскоре надеюсь потихоньку вернуться к работе. Остановился пока скорости и тональности воспоизведение (аддон bass_fx.dll).
Добавлено (08 Январь 2010, 13:03) --------------------------------------------- Все функции Bass Player (копипаст из исходника):
function CreateChannel(const num:integer; FileName:pchar):boolean; procedure PlayChannel(const num:integer); procedure PauseChannel(const num:integer); procedure StopChannel(const num:integer); function GetTime(i: DWORD): string; function GetPosTimeChannel(const num:integer):cardinal; function GetLengthTimeChannel(const num:integer):cardinal; procedure SetPositionForChannel(const num:integer; pos:float); procedure FreeChannel(const num:integer); function GetRLevelChannel(const num:integer):dword; function GetLLevelChannel(const num:integer):dword; function GetTagsChannel(const num:integer;typ:string):string; function GetBitrateChannel(const num: integer):dword; procedure SetVolumeChannel(const num,volume:integer); function GetFreqChannel(const num:integer):dword; function GetChansChannel(const num:integer):string; function GetActive(const num:integer):boolean; procedure BassInit(const handle: cardinal) ; procedure SetPanChannel(const num,pan:integer); function GetDataChannel20(const num,freq: integer):dword; function EqSetChannel(const num,fr,par:integer):string; procedure EqCreateChannel(const num:integer); procedure CreateTempoChannel(const num:integer); procedure SetBPMChannel(const num,temp:integer);
Даже в сущесвующей версии моего плагина можно определить громкость частоты.
Можно, только вот какой именно частоты? В принципе, мы можем вывести из FFT-массива куда потребуется значение амплитуды требуемой частоты, что и является её громкостью.
Длину FFT-массива мы определяем сами, частота дискретизации нам тоже известна. Так-что дело за малым - за конкретной реализацией....
Quote (Sower)
что и делается для почастотной визуализации.
Serg, особо не отчаивайся! Теретически, все вовсе не так грустно, и может на твоей улице тоже наступит, когда-нибудь, праздник!
Правда, дорогА ложка к обеду!... Впрочем, не исключено, что и в таком виде тебя это устроит...
Кстати, Sower, твои идеи навели меня на одну мысль: можно отрисовать и частоты ползунков эквалайзера. Thanx!..
Никто не может вернуться в прошлое и изменить свой старт. Но каждый может стартовать сейчас и изменить свой финиш!
В самом ММБ скрипт получает значения - огромные числа, в скрипте они преобразовываются в шкалу от 0 и до 100 (или любого другого числа, смотря на сколько высокие полоски нужны), эти данные используются дальше, чтобы полоски дергались . Здесь "вырисовывается" новая проблема - нагрузка на процессор, что подталкивает на другой способ рисования - создание таймера в самом плагине и рисование на форме ммб, этот способ хорошо тем, что не предется увеличивать размер плагина формой, как это делается (насколько я понял) в старом плагине, который показал Петр.
В принципе, мы можем вывести из FFT-массива куда потребуется значение амплитуды требуемой частоты, что и является её громкостью.
И вот там то и есть, только в скрипте visual вызывается функция GetDataChannel20, которая даёт всего 20 значений частот (не подряд конечно), но можно получить и 64 и 128 и 256.
Добавлено (09 Январь 2010, 09:43) --------------------------------------------- Ах да, всё хотел спросить, а зачем тебе эти данные, Serg ?
Сообщение отредактировал Sower - Суббота, 09 Января 2010, 06:23
Тут есть два подхода, первый, если удовлетворяет просто какое нибудь дерганье без особой привязки к звуку- покатит то что в примере. Второй, если действительно надо получить что то адекватное- то это надо делать в плагине. 64 и 128 и 256 это только количество частотных полос, эсли ты конечно правильно все понял, но есть еще и частота дискретизации-как часто выдаются значения этих полос. Если посмотреть, к примеру осцилографом или анализатором спектра на реальный сигнал, ты увидиш что значения меняются очень быстро, если нужно посчитать время- 1\частоту дискретизации. Взяв безсистемно некоторые отсчеты ты не получиш реальной картинки. Это получится типа стробоскопа, но с малой частотой вспышек, с такой что реальной картинки увидеть не получится.
Quote (Sower)
а зачем тебе эти данные, Serg ?
Я так думаю, что ему надо просто что бы что то дергалось приблизительно в такт с музыкой.
В советские времена приехал квартет чукчей на гастроли в Москву... А на концерте, за квартетом на заднем плане периодически вскивали по очереди и орали: "Красный", "Зеленый", "Синий", ещё трое. Ну, после концерта спрашивают их мол, что за чуваки такие кричали? А чукчи отвечают: - Цветомузыка, однако...
Никто не может вернуться в прошлое и изменить свой старт. Но каждый может стартовать сейчас и изменить свой финиш!
просто какое нибудь дерганье без особой привязки к звуку- покатит то что в примере
Ну а что поделать, если ммб такой медленный и передать данные для нужной частоты естественно не удастся синхронно (хотябы даже близко) со звуком Выход только
Quote (Sower)
создание таймера в самом плагине и рисование на форме ммб
А насчет получения информации, если это необходимо, то передавать в ммб с запозданием.
Я так думаю, что ему надо просто что бы что то дергалось приблизительно в такт с музыкой.
мм.. кстати, если воспроизводить звук средствами ммб, то его тоже можно визуализировать по своему, правда опять нужен плагин, просто анализировать звук на выходе звуковой карты это конечно бред, но тоже вариант
Дык в ммв есть такая фича - AudioVisualization, правда только втом объеме что в нее заложено, так и в плагине будет аналогично, только то что в него вложат. А вообще то нужда мне вполне понятна, мож не совсем в том ключе что я думаю, но наверняка что то аналогичное.
Quote (Peter)
- Цветомузыка, однако...
В давние, давние времена, когда "квартет чукчей" выступал видел я одну байду, товарищ один мой сделал (парень весьма заторможенный в смысле изучения чего либо, но чрезвычайно настойчивый и упорный, сорок раз заставит тебя объяснить пока не поймет), эстраду, на которой были лягушки-музыканты с разными инструментами, на вход байды подавался звуковой сигнал, через полосовые фильтры сигнал разделялся по частотам и подавался на электромагниты лягушек, в итоге они почти правильно выполняли свои партии. Байда была сделано очень кропотливо, я бы никогда не смог такое повторить, не хватило бы терпения настойчивости и усидчивости
В данном случае, есть один толковый выход- для этого надо определить оптимальную частоту обновления данных в ммв (частоту вызова скрипта) таким образом что бы он не тормозил проект и в то же время задержка визуализации была не сильно ощутима. Отсчеты по полосам, а их будет вполне предостаточно до 10, равномерно распределенных, сумируются за время обновления выбранное ранее, ну и далее в зависимости от нужды, вычисляется или среднее значение или минимум или максимум, результат передается в ммв. Конечно тут имеется недостаток, задержка, но если подойти с умом, ее можно сделать почти незаметной
таким образом что бы он не тормозил проект и в то же время задержка визуализации была не сильно ощутима
Совершенно невозможно!!! Просто огромное количество времени тратится на перемещение объектов в ммб, а полоски можно дергать только командой MoveObject, с изменением высоты полоски дело не пройдет, т.к. система отсчета координат от верхнего левого угла Короче смотри мой пример к плагину, там только одно можно модернизировать - это давать в ммб сразу готовые для использования числа, а не черт знает что, ну можно также уменьшить кол-во полосок, но это уже не очень красиво.
Quote (Alex3A)
Дык в ммв есть такая фича - AudioVisualization
Я про другое... Чё париться? Всёравно как в аимпе не сделаешь!!! Выход только рисовать плагином на форме ММБ.