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

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

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

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

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

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

Цитата:
Сообщение от raxp Посмотреть сообщение
да.

сдвигом во времени у вас будет смещение индекса массива отображения. В первый момент времени вы получили n-выборок, во второй момент времени еще n-выборок, в третий момент - еще n-выборок, в m-й момент времени - еще n-выборок.

Допустим на временной оси вашей визуализации вмещается окно на 4*n выборок. Как следует заполнять и смещать? Сначала заполняется окно 0..n, в следующий момент от n+1..2n, далее 2n+1..3n и наконец 3n+1..4n. Что делать при получении пятой выборки? Очевидно сместить все значения окна на n влево и поместить свежий буфер из n-значений в окно на место 3n+1..4n. Все последующие шаги повторяют предпоследний.
for i := 0 to 256 do
begin
L := LoWord(WaveData[i]);
R := HiWord(WaveData[i]);
bit.Canvas.MoveTo(PaintBox2.Width-SpecPos , ch- trunc((L / 32768) * ch));
bit.Canvas.LineTo(PaintBox2.Width-SpecPos , ch+ trunc((R / 32768) * ch) );
end;
SpecPos := (SpecPos + 1) mod PaintBox2.Width;// сдвиг
Заполняет экран и нет сдвига.
Что я делаю не так

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

Вы делаете все не так, в коде выше нет сдвига для массива. Перечитайте мой предыдущий пост до полного просветления.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.02.2014, 05:23   #33
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Вы делаете все не так, в коде выше нет сдвига для массива. Перечитайте мой предыдущий пост до полного просветления.
Несли не трудно помогите разобраться с этими массивами т.е как их надо заполнять.
Abversoft вне форума Ответить с цитированием
Старый 04.02.2014, 01:01   #34
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Нашел плагин с исходником для XMPlay. Только он написан для С++.
Помогите разобраться.
Вложения
Тип файла: zip TestPlug.source.zip (126.2 Кб, 16 просмотров)
Тип файла: zip TestPlug.zip (15.8 Кб, 12 просмотров)
Abversoft вне форума Ответить с цитированием
Старый 09.02.2014, 14:47   #35
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Я такую визуализацию делаю таким образом

Код:
ArrWave[0]:= round(SmallInt(LOWORD(WaveOscil[0]))/50);

for i:=0 to 249 do
begin
ArrWave[249-i]:= ArrWave[249-i-1];
end;
таким образом идёт сдвиг спектра

а дальше рисуем любыми способами
вот пример
Код:
for i:=0 to 249 do
begin
MoveTo(i, 600); LineTo(i, ArrWave[249-i]);
end;
если недостаточно скорости, делаем так
Код:
for i:=0 to 249 do
begin
MoveTo(i*5, 600); LineTo(i*5, ArrWave[249-i]);
MoveTo(i*5+1, 600); LineTo(i*5+1, ArrWave[249-i]);
MoveTo(i*5+2, 600); LineTo(i*5+2, ArrWave[249-i]);
MoveTo(i*5+3, 600); LineTo(i*5+3, ArrWave[249-i]);
MoveTo(i*5+4, 600); LineTo(i*5+4, ArrWave[249-i]);
end;
DJDrugsounD вне форума Ответить с цитированием
Старый 09.02.2014, 21:31   #36
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

а вот улучшенная с регулировкой скорости

Код:
procedure DrawWave();
var
i, j: integer;
WvWig: integer;
WvSpeed: integer; // скорость
begin
WvSpeed:= 5;
WvWig:= Round(Form1.Panel1.Width/WvSpeed); // ширина области визуализации делённая на скорость

for j:=0 to WvSpeed do
begin
ArrWave[j][0]:= round(SmallInt(LOWORD(WaveOscil[j]))/50);
for i:=0 to WvWig do
begin
ArrWave[j][WvWig-i]:= ArrWave[j][WvWig-i-1];
end;

end;

for i:=0 to WvWig do
begin
for j:=0 to WvSpeed do
begin
MoveTo(i*WvSpeed+j, 0);
LineTo(i*WvSpeed+j, ArrWave[j][WvWig-i]);
end;
end;
end;
только тут на один канал, на два канала доделать думаю проблем не составит

Последний раз редактировалось DJDrugsounD; 09.02.2014 в 21:33. Причина: подправил код
DJDrugsounD вне форума Ответить с цитированием
Старый 11.02.2014, 01:16   #37
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от DJDrugsounD Посмотреть сообщение
а вот улучшенная с регулировкой скорости

Код:
procedure DrawWave();
var
i, j: integer;
WvWig: integer;
WvSpeed: integer; // скорость
begin
WvSpeed:= 5;
WvWig:= Round(Form1.Panel1.Width/WvSpeed); // ширина области визуализации делённая на скорость

for j:=0 to WvSpeed do
begin
ArrWave[j][0]:= round(SmallInt(LOWORD(WaveOscil[j]))/50);
for i:=0 to WvWig do
begin
ArrWave[j][WvWig-i]:= ArrWave[j][WvWig-i-1];
end;

end;

for i:=0 to WvWig do
begin
for j:=0 to WvSpeed do
begin
MoveTo(i*WvSpeed+j, 0);
LineTo(i*WvSpeed+j, ArrWave[j][WvWig-i]);
end;
end;
end;
только тут на один канал, на два канала доделать думаю проблем не составит
Спасибо. Что такое ArrWave
Abversoft вне форума Ответить с цитированием
Старый 11.02.2014, 02:58   #38
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Abversoft Посмотреть сообщение
Спасибо. Что такое ArrWave
Код:
type
TWaveOscil = array [0..255] of LongWord;

var
WaveOscil: TWaveOscil;
ArrWave:array [0..900] of array [0..900] of Integer;
DJDrugsounD вне форума Ответить с цитированием
Старый 11.02.2014, 03:37   #39
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от DJDrugsounD Посмотреть сообщение
Код:
type
TWaveOscil = array [0..255] of LongWord;

var
WaveOscil: TWaveOscil;
ArrWave:array [0..900] of array [0..900] of Integer;
А так возможно ArrWave:array of array of Integer?
И еще
ArrWave[j][0] := round((LOWORD(WaveOscil[j]))/50);
точно надо делить на 50, а то спектр не списываться в канвас.
Abversoft вне форума Ответить с цитированием
Старый 11.02.2014, 04:25   #40
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Abversoft Посмотреть сообщение
А так возможно ArrWave:array of array of Integer?
многомерный массив, почему нет? :D

Цитата:
Сообщение от Abversoft Посмотреть сообщение
точно надо делить на 50, а то спектр не списываться в канвас.
можно вообще не делить, это я делал у себя потому что сильно большое значение получалось
DJDrugsounD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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