Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2014, 22:57   #1
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию Визуальный спектр звука

Всем привет!
Не давно в плеере Aimp визуальный спектр на подобие движущийся осциллографа решил попробовать сделать. И вот что получилось.

procedure TfrMain.Draw_ChanelLevel(aLevel: DWORD);
var
aLeft, aRight: single;
SpecPos, x, y: integer;
mnog : single;
VisBuff : TBitmap;
const
ya : integer = 40;

procedure DrawLine(Canvas: TCanvas; X, Y, X2, Y2: Integer);
begin
Canvas.MoveTo(X, Y);
Canvas.LineTo(X2, Y2);
end;
begin

aLeft := 1 * LOWORD(alevel) / 32768;
aRight := 1 * HIWORD(alevel) / 32768;

VisBuff2.Canvas.Brush.Color := BkgColor;
VisBuff2.Canvas.Pen.Color := 0;

DrawLine(VisBuff2.Canvas,
SpecPos2, 0,
SpecPos2, VisBuff2.Height);

VisBuff2.Canvas.Pen.Color := $00E6C62D;
y := trunc(VisBuff2.Height / 2 - 1);

DrawLine(VisBuff2.Canvas,
SpecPos2, y,
SpecPos2, y - round(y * 0.95 * mnog * aleft));

DrawLine(VisBuff2.Canvas,
SpecPos2, y + 2,
SpecPos2, VisBuff2.Height - y + round(y * 0.95 * mnog * aright));

SpecPos2 := (SpecPos2 + 1) mod VisBuff2.Width;

VisBuff2.Canvas.Pen.Color := 10066329;

VisBuff2.Canvas.Pen.Color := 0;
VisBuff2.Canvas.Brush.Color := BkgColor;

BitBlt(img1.Canvas.Handle, 0, 0, VisBuff2.Width, VisBuff2.Height,
VisBuff2.Canvas.Handle, 0, 0, srccopy);
end;

Не могу заставить спектр двигаться как в Aimp. Для работы с медиа использую библиотеку bass.
Вложения
Тип файла: zip screenshot.zip (52.1 Кб, 46 просмотров)
Abversoft вне форума Ответить с цитированием
Старый 30.01.2014, 23:06   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Библиотека с анализаторами звука. 13 образов
(Spectrum 3, Wave 4, VU 3, Circle 3)

- Динамическая отрисовка
- Плавная смена цветов
- Картинка на задний фон
- Легка в применении

СКАЧАТЬ
ZuBy вне форума Ответить с цитированием
Старый 30.01.2014, 23:20   #3
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Не подходит. Данную библиотеку видел, это не то
Есть хорошие примеры визуализации звука http://jqbook.net.ru/delphi/bass_vis.htm.

Последний раз редактировалось Abversoft; 30.01.2014 в 23:24.
Abversoft вне форума Ответить с цитированием
Старый 31.01.2014, 03:15   #4
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Помогите сделать Scroll спектра звука
Abversoft вне форума Ответить с цитированием
Старый 31.01.2014, 09:28   #5
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Abversoft Посмотреть сообщение
Помогите сделать Scroll спектра звука
как понять скрол? что именно нужно?
ZuBy вне форума Ответить с цитированием
Старый 31.01.2014, 12:52   #6
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
как понять скрол? что именно нужно?
Чтоб спектр двигался на подобие осциллографа.
Смотри видео
Вложения
Тип файла: zip Video_.zip (303.4 Кб, 34 просмотров)

Последний раз редактировалось Abversoft; 31.01.2014 в 12:58.
Abversoft вне форума Ответить с цитированием
Старый 31.01.2014, 15:43   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Это не спектр. Это огибающая сигнала, его отсчеты во времени.

Цитата:
Чтоб ... двигался
берем выборку (окно) из всего массива, делаем сдвиг по времени - двигаем окно, отображаем. Профит.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 31.01.2014, 22:50   #8
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Это не спектр. Это огибающая сигнала, его отсчеты во времени.

берем выборку (окно) из всего массива, делаем сдвиг по времени - двигаем окно, отображаем. Профит.
если не трудно пример
Abversoft вне форума Ответить с цитированием
Старый 31.01.2014, 23:09   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Пример чего? Пример как выглядит у вас же на видео, вот еще как это на чарте выглядит http://www.youtube.com/watch?v=oREzyb4tyq4 (верхний тренд при задании масштаба по оси 0X, т.е. ширины окна и использовании скролла, т.е. смещение окна).

Или пример кода? Не, сами дотумкайте, даю алгоритм: к примеру у вас миллион отсчетов в полном массиве, нужно визуализировать временной интервал из 1000 отсчетов (точек) и иметь возможность смещать временной интервал (окно) от нуля до последнего значения. Как? Что будет, если я возьму из полного массива точки от нуля до 999 и отрисую их? Правильно, визуализирую окно на 1000 точек. А что, если сделаю выборку от 1 до 1001 точки? Правильно, тоже окно на 1000 точек, только уже со смещением вправо по времени. А если смещение (дельту) возьму на 15000 точек? Какие точки мне нужно взять для отображения окна шириной 1000 точек? Логично, что от 15000 до 16000. А если хочу менять ширину окна? Теперь-то ферштеен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 31.01.2014 в 23:17.
raxp вне форума Ответить с цитированием
Старый 01.02.2014, 00:27   #10
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Пример чего? Пример как выглядит у вас же на видео, вот еще как это на чарте выглядит http://www.youtube.com/watch?v=oREzyb4tyq4 (верхний тренд при задании масштаба по оси 0X, т.е. ширины окна и использовании скролла, т.е. смещение окна).

Или пример кода? Не, сами дотумкайте, даю алгоритм: к примеру у вас миллион отсчетов в полном массиве, нужно визуализировать временной интервал из 1000 отсчетов (точек) и иметь возможность смещать временной интервал (окно) от нуля до последнего значения. Как? Что будет, если я возьму из полного массива точки от нуля до 999 и отрисую их? Правильно, визуализирую окно на 1000 точек. А что, если сделаю выборку от 1 до 1001 точки? Правильно, тоже окно на 1000 точек, только уже со смещением вправо по времени. А если смещение (дельту) возьму на 15000 точек? Какие точки мне нужно взять для отображения окна шириной 1000 точек? Логично, что от 15000 до 16000. А если хочу менять ширину окна? Теперь-то ферштеен?
Если я Вас правильно понял надо с начала вытащить весь сигнал т.е сделать так как в примере (смотри архив). После начинать сдвигать по времени.
Если не так. То было бы не плохо пример кода
Вложения
Тип файла: zip mp3_9.zip (228.4 Кб, 48 просмотров)
Abversoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Музыкальный спектр Fiery Fox C# (си шарп) 5 14.06.2011 12:54
Спектр сигнала Zer0 Помощь студентам 6 01.05.2011 22:27
БПФ спектр Voxa7 Помощь студентам 3 18.04.2011 14:16
спектр различимости Gunslinger Помощь студентам 1 30.05.2010 10:54
Спектр в MediaPlayer-е ekzobyte Мультимедиа в Delphi 4 18.03.2009 20:11