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

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

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

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

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

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

Цитата:
Сообщение от raxp Посмотреть сообщение
совсем необязательно, но принцип тот же.

Вы получаете мгновенные значения сигнала на текущий момент, заносите в массив на n-точек и сразу отображаете эти n-точек, как только весь массив заполняется - начинаете сдвиг записывая новое текущее значение на самое последнее в массиве, таким образом окно у вас будет сдвигаться постоянно с получением каждого нового значения. Пример http://www.youtube.com/watch?v=u7XQPmh9bYE
Спасибо за совет. Если не трудно пример в виде кода.
А то у меня вот что получается.
Если я правильно понял то надо заполнять в так BASS_DATA_FFT2048.
Вложения
Тип файла: zip mp3_9c.zip (247.7 Кб, 24 просмотров)

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

Нет, FFT (БПФ) тут ни причем. Значения берите мгновенные.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.02.2014, 13:35   #23
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Нет, FFT (БПФ) тут ни причем. Значения берите мгновенные.
Что понимается под словом мгновенные и какой параметр необходимо для времени.
Если я правильно Вас понял надо брать
aLeft := 1 * LOWORD(alevel) / 32768;
aRight := 1 * HIWORD(alevel) / 32768;

а для времени

XPOS := Trunc(BASS_ChannelGetPosition(hs, BASS_POS_BYTE) / Mp3Len * PaintBox2.Width);

Так?
Abversoft вне форума Ответить с цитированием
Старый 01.02.2014, 13:53   #24
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

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

Цитата:
Сообщение от raxp Посмотреть сообщение
Мгновенное текущее значение и целый сэмпл на данный момент воспроизведения.
и как его получить целый сэмпл.
Abversoft вне форума Ответить с цитированием
Старый 01.02.2014, 15:29   #26
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Abversoft Посмотреть сообщение
и как его получить целый сэмпл.
Код:
BASS_ChannelGetData(mCh, @FFT, BASS_DATA_FFT2048);
ZuBy вне форума Ответить с цитированием
Старый 01.02.2014, 15:42   #27
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
Код:
BASS_ChannelGetData(mCh, @FFT, BASS_DATA_FFT2048);
Это и есть получение сэмпла.
Abversoft вне форума Ответить с цитированием
Старый 01.02.2014, 16:10   #28
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Нет, это получение данных спектрограммы. Надо так:
Код:
Type TWaveData = array [0..255] of DWORD;
...
var WaveData: TWaveData;
begin
 BASS_ChannelGetData(mCh, @WaveData, 256);
где: массив WaveData и будет массивом сырых отсчетов (огибающей сигнала), сэмплом на момент выборки.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.02.2014, 16:17   #29
Abversoft
Пользователь
 
Регистрация: 26.04.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Нет, это получение данных спектрограммы. Надо так:
Код:
Type TWaveData = array [0..255] of DWORD;
...
var WaveData: TWaveData;
begin
 BASS_ChannelGetData(mCh, @WaveData, 256);
где: массив WaveData и будет массивом сырых отсчетов (огибающей сигнала), сэмплом на момент выборки.
И соответственно вытаскивать для правого и левого канала.
А за сдвиг во времени что брать?
Abversoft вне форума Ответить с цитированием
Старый 01.02.2014, 16:34   #30
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Цитата:
И соответственно вытаскивать для правого и левого канала.
да.

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

Допустим на временной оси вашей визуализации вмещается окно на 4*n выборок. Как следует заполнять и смещать? Сначала заполняется окно 0..n, в следующий момент от n+1..2n, далее 2n+1..3n и наконец 3n+1..4n. Что делать при получении пятой выборки? Очевидно сместить все значения окна на n влево и поместить свежий буфер из n-значений в окно на место 3n+1..4n. Все последующие шаги повторяют предпоследний.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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