AIMP Forum
AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: G-coder on August 30, 2010, 19:29:26
-
Можно ли при написании add-on плагина использвать функции визуализации?
Необходимо вывести спектр на внешний дисплей по USART
-
Сомневаюсь. А вам нужен только спектр?
-
В принципе нужен только спектр.
Но неплохо было бы еще Waveform. Хотя это из той же оперы.
Названия треков,длительность и т.д. не надо. Они просто не поместятся.
Пока что используется матрица 16х16 больших 8мм светодиодов. Как раз для спектра потянет.
-
В таком случае, вам хватит функционала предоставляемого для визуализации. Примеры исходников есть где-то на форуме.
-
Суть в том,чтобы внешний дисплей показывал спектр независимо от визуализации.
-
Сейчас, по другому не выйдет, разве что написать такую "переходник-визуализацию", которая бы сама подгружала другую визуализацию и одновременно производила вывод через USART.
-
Ну или найти красивую годную визуализацию с исходным кодом и прикрутить к ней вывод на дисплей
-
Вопрос: спектр режется линейно или нет?
Если линейно,то при частоте дескретизации 44,1 кГц это по 86 Гц на полосу...Не есть гуд
Или частоты среза можно выставить вручную?
-
ответил сам себе. Линейно. Проверил свипом от 10 до 22050 Гц Ширина полос примерно по 80 Гц
-
Как можно сделать так,чтобы плагин не переходил в полноэкранный режим?
-
Никак. :'(
-
Да штожеж это за такое то? :'(
-
Да штожеж это за такое то? :'(
Имхо, не стандартные идеи... Лучше будет описать, что для чего нужно и зачем.
-
Делаю внешний спектроанализатор.Пока в магаз не завезли нужных мне деталек, я потренировался в отрисовке правильного логарифмического спектра непосредственно в окне визуализации. Просто зеленые полоски с пиками.На весь экран мне не надо так как есть внешний дисплей.
Добавлено через 8 мин. 55 сек.
пока нет возможности собрать железяку для спектра, прикрутил к плагину линейку из 16 светодиодов в две строки и по LPT отображаю просто уровень.Был такой плаг для винампа в свое время.
-
Довольно специфическая задача, плагины на это не рассчитаны.
Как вариант, можно и на дисплее рисовать какую-нибудь картинку в добавок
-
не получится картинку. Дисплей-матрица 16х16 самоделка
-
ммм. не вижу помех...
-
Сегодня,думаю, фотки покажу. Почти готово уже.
-
Сабж в автономном режиме
-
Издалека лучше видно
-
ох ё.... 256 светодиодов ::) жеесть, я в шоке :o
-
немного не в тему:
Как в переменоой типа byte изменить значение какого-либо бита?
-
Как в переменоой типа byte изменить значение какого-либо бита?
Копипаст из FAQ Delphi Word (http://delphiworld.narod.ru/dw.html).
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Установка определенного бита в слове
Возвращает AWord с установленным битом номер ABit (c 0 по 15) в значение 1,
если AState = TRUE или 0, если AState = FALSE.
Стоит заметить, что в функцию передается именно номер бита, а не маска.
Проверка на правильный номер не производится.
Зависимости: System
Автор: Григорий Ситнин, gregor@gregor.ru, Москва
Copyright: Григорий Ситнин, 2003
Дата: 8 июля 2003 г.
***************************************************** }
function SetBit(AWord: word; ABit: byte; AState: boolean = true): word;
begin
if AState then
Result := AWord or (1 shl ABit)
else
Result := AWord and (not (1 shl ABit));
end;
Пример использования:
{$APPTYPE CONSOLE}
program test;
uses Bits; // В модуле Bits описана функция SetBit
var
z: word;
i: integer;
s: string;
begin
z := 0;
z := setbit(z, 0); // 0000000000000001
z := setbit(z, 2); // 0000000000000101
z := setbit(z, 9); // 0000001000000101
z := setbit(z, 14); // 0100001000000101
z := setbit(z, 15); // 1100001000000101
s := '';
for i := 15 downto 0 do
s := s + inttostr(Ord(CheckBit(z, i)));
writeln('value: ', z, ' dec = 1100001000000101');
writeln('result: ', s);
z := $FFFF;
z := setbit(z, 0, false); // 1111111111111110
z := setbit(z, 2, false); // 1111111111111010
z := setbit(z, 9, false); // 1111110111111010
z := setbit(z, 14, false); // 1011110111111010
z := setbit(z, 15, false); // 0011110111111010
s := '';
for i := 15 downto 0 do
s := s + inttostr(Ord(CheckBit(z, i)));
writeln('value: ', z, ' dec = 0011110111111010');
writeln('result: ', s);
end.
-
Спасибо большое. Я сделал через x:=x or 1 shl xx (xx-номер бита)
А DisplayRender точно вызывается раз в 33 мсек?
Я посылаю байт на com порт из DisplayRender, проходят только первые 7,8 посылок и всё отваливается напрочь. Если, например отправить при инициализации плагина, то сразу 32 байта проходят нормально.И из qt_comport с интервалом между посылками меньше 10мсек проходит неограниченный поток без проблем.
-
ВСЁ! Разобрался! Всё работает ! Всем спасибо! Всё замечательно!
Даёшь спектр на 256 светодиодов!
Результат выложу как приеду из командировки.
-
Вот девайс в работе
http://www.youtube.com/watch?v=NC6thVzJ4QQ
Вопорс: Будет ли интересна тема про внешние устройства визуализации?Всякие там светомузыки под управлением AIMP
-
Вот девайс в работе
http://www.youtube.com/watch?v=NC6thVzJ4QQ
Завораживает!
Вопорс: Будет ли интересна тема про внешние устройства визуализации?Всякие там светомузыки под управлением AIMP
Думаю да. На форуме найдутся люди интересующиеся этим.
-
Вживую еще круче. Камера искажает цвет очень сильно. Плюс еще пережато всякими мпегами.
-
Вживую еще круче. Камера искажает цвет очень сильно. Плюс еще пережато всякими мпегами.
А на основе чего сделан девайс? МК?
Добавлено через 33 сек.
зря наверное спросил, судя из подписи - мега 8 :)
Добавлено через 1 мин. 15 сек.
А может это в отдельную тему спихнуть?
-
Дак я вот и спросил, интересно ли будет,чтоб отдельную тему создать.
Контроллер мега8. Не слезу с него пока всё не выжму хотя бы на 8МГц внутреннего тактирования.
Только вот спихивать бездумно,думаю,не стоит, а сначала поразжевать немножко что да как.
-
А где создать такую тему? в Разработке?
-
Думаю, лучше в https://www.aimp.ru/forum/index.php?board=12.0
-
Вот только хорошего,годного плагина со свистелками и перделками я не написал.Делал то для себя, плюс дуб в Делфи и си++.Кодю для контороллеров, пока только на ассемблере.
В окне визуализации простенький спектр зеленого цвета прологарифмированный и выровненный коэффициентами, сделанный на заготовке из СДК, не растягивается на весь экран(я не приследовал такой цели и даже хотел отключить такую возможность, но увы). Можно его просто в качестве примера приложить вместе со схемой и прошивкой (если кто-то рискнет повторить мою железяку), описать формирование и отправку буфера изображения, и проч.
-
G-coder
Я вот не пойму, почему ты ещё не создал тему? Если она не подойдет к теме раздела, модераторы её обязательно перенесут, не беспокойся об этом.
P.S. Ну мы и нафлудили тут... Создавай новую тему, там продолжим ;D .
-
Пока не создавайте - разделим эту, тогда продолжите =)
-
Чего?..
-
какой ещё дисплей?
-
Вот только хорошего,годного плагина со свистелками и перделками я не написал.Делал то для себя, плюс дуб в Делфи и си++.Кодю для контороллеров, пока только на ассемблере.
В окне визуализации простенький спектр зеленого цвета прологарифмированный и выровненный коэффициентами, сделанный на заготовке из СДК, не растягивается на весь экран(я не приследовал такой цели и даже хотел отключить такую возможность, но увы). Можно его просто в качестве примера приложить вместе со схемой и прошивкой (если кто-то рискнет повторить мою железяку), описать формирование и отправку буфера изображения, и проч.
Интересная тема, хотел бы посмотреть на схемку. Насчет хорошей програмнной обертки к железке, могу допилить свой плаг под твой нужды, у меня он работает с ардиной(не все так круто как у тебя я просто меняю яркость светодиодов :)). Вот тут можно посмотреть https://www.aimp.ru/forum/index.php?topic=21540.msg106768#msg106768
-
...не все так круто как у тебя...
да ничего крутого=) костылёчки в виде логарифма и коэффициентов, так как БАСС походу очень уж упрощенно ДПФ делает=) схэмэ простой ощинь. как индикация в часах. Берем байы по усарту, складываем в кучку в оперативке, а по прерыванию таймера динамически выводим.
Ща я отосплюсь после командировки, возьму надфиль с тестером, и сделаю еще проще.Ну и сюда оформлю.
...я просто меняю яркость светодиодов... Это как? Горит-не горит или ШИМ?
Я делал по LPT вот так:
...
uses
Windows, AIMP_SDK,classes,sysutils;
function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';
...
var
volchar: array[0..8] of byte=(0,1,3,7,15,31,63,127,255); // маска-столбик
...
procedure TAIMP2DemoVisual.DisplayRender(DC: HDC; AData: PAIMPVisualData); stdcall;
var
...
data,olddata:byte;
...
data:=Trunc((AData^.LevelR+AData^.LevelL)/24);
if data>9 then data:=9; //на всякий
if olddata<=data then olddata:=data //плавный спад чтоб резко не прыгали
else olddata:=olddata-1 ;
Out32(888, volchar[olddata]);
вот както так: http://www.youtube.com/watch?v=Ewxo87wg5jk
-
ардино сам собирал или покупал?
ардино конечно хорошо, но ради таких мелких задач дороговато будет=)
я уж по страинке, с даташитами,ассемблером и напильником=) получается дешево и быстро(скорость выполнения кода)
-
да ничего крутого=)
я просто меняю яркость светодиодов... Это как? Горит-не горит или ШИМ?
Программный шим по 4 светика на канал + 4 фон. А круто я имел ввиду, что у тебя сделан сам спектор на светиках.
костылёчки в виде логарифма и коэффициентов
Да, тоже пришлось нормализовать уровни и суммировать, иначе никак.
ардино сам собирал или покупал?
Покупал, для новичка в МК самое то, смешно для такой задачи 328 использовать, но иначе я бы еще не скоро стал бы практиковаться )
-
Я начал с меги8. Она дешовая, шьётся по 5 проводкам(+5 резюков и 3 диода). Поставил Шпротеус, и если железку собирать влом, то симулирую в нём.
-
Я начал с меги8. Она дешовая, шьётся по 5 проводкам(+5 резюков и 3 диода). Поставил Шпротеус, и если железку собирать влом, то симулирую в нём.
Может и я дорасту и наконец не буду фюзы забывать выставлять правильно, а так это хобби, на которое к сожелению нет достаточно времени.
-
Может и я дорасту и наконец не буду фюзы забывать выставлять правильно
+5 ;D
я RSTDISBL однажды выставил ;D
Теперь я делаю по-другому: перед прошивкой читаю фьюзы, меняю в основном только тактовую частоту и пишу обратно