Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2014, 18:48
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию Массив и BASS.DLL (BASS_ChannelGetData)

Вопрос такой.

Код:
var
buffermy1 : array of array of Single;
b : integer;

......

  SetLength(buffermy1, 129); // SetLength(buffermy1, 129, 2);
  for b := 0 to 128 do
    SetLength(buffermy1, b, 2);  

 BASS_ChannelGetData(Channel, buffermy1, BASS_DATA_FFT256 or BASS_DATA_FFT_INDIVIDUAL);

Так не работает и тормоза.

А если так:

Код:
buffermy1 : array [0..128, 0..1] of Single;
b : integer;

......

 BASS_ChannelGetData(Channel, buffermy1, BASS_DATA_FFT256 or BASS_DATA_FFT_INDIVIDUAL);

Все прекрасно.

Почему первый варифнт не работает.
И еще пробовал так- же задать длинну массива, заполнить цифрами, а затем вывести в листбоксы и ве работает, а с BASS не проходит.
Где ошибка?
Ответить с цитированием
  #2  
Старый 16.12.2014, 19:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ты передаешь указатель на массив, а не на его первый элемент.
Хотя хз, эта библа то еще зло.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 16.12.2014, 19:09
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Во итором варианте массив статичен и поэтому: BASS_ChannelGetData(Channel, buffermy1, @BASS_DATA_FFT256 or BASS_DATA_FFT_INDIVIDUAL);
А есть варианты?
Ответить с цитированием
  #4  
Старый 16.12.2014, 21:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

А что получить то нужно? Дискретное преобразование Фурье? Характеристики звука?
Можно попробовать дискретное вейвлет-преобразование. Оно на порядок проще чем БПФ (собственно пример реализации: https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D 0%BE%D0%B5_%D0%B2%D0%B5%D0%B9%D0%B2%D0%BB%D0%B5%D1 %82-%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D 0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#.D0.90.D0.BB.D0 .B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC_.D0.9C.D0.B0.D0. BB.D0.BB.D0.B0).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 16.12.2014 в 21:55.
Ответить с цитированием
  #5  
Старый 16.12.2014, 22:16
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
А что получить то нужно?
Ваша тема?
Ответить с цитированием
  #6  
Старый 16.12.2014, 23:42
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Да.
Но я на басс.длл уже давным давно забил.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 17.12.2014, 00:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
... эта библа то еще зло.
Наверное поэтому я неоднократно встречал её в играх от солидных производителей.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 17.12.2014, 01:01
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Ну так есть что по теме? Пока сделал несколко массивов.

Код:
  buffermy128 : array  [0..128, 0..1] of Single;
  buffermy256 : array [0..256, 0..1] of Single;
  buffermy512 : array [0..512, 0..1] of Single;
  buffermy1024 : array [0..1024, 0..1] of Single;
Ответить с цитированием
  #9  
Старый 17.12.2014, 01:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Кто же знает что нужно. Не хочется выделять память заранее, определи массивы через type.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 17.12.2014, 11:05
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак вы так и не ответили, нужно спектр получить?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 19.12.2014, 17:25
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Дак вы так и не ответили, нужно спектр получить?
Да, для каждого канала(стерео).
Ответить с цитированием
  #12  
Старый 19.12.2014, 18:41
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Я делал так: беру вавку (с кодека, или еще как — не важно), получаю с нее информацию о каналах, битности, битрейте; далее, начинаю читать с заданной битностью окно, которое передаю в БПФ, с него получаю магнитуду, перевожу это в децибелы, выполняю квантование и получаю графический спектр.

http://delphiworld.narod.ru/base/fft.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #13  
Старый 20.12.2014, 01:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно также посмотреть пример Spectrum, поставляемый с библиотекой. Я его специально для Яна переводил на Дельфи и MASM.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 20.12.2014, 19:07
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Можно также посмотреть пример Spectrum, поставляемый с библиотекой. Я его специально для Яна переводил на Дельфи и MASM.
Спектр у меня работает(общий и индивидуально для канала).
Вопрос в другом: почемуто BASS не хочет работать с

Buff : array of array of single;
Ответить с цитированием
  #15  
Старый 20.12.2014, 22:10
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну если указанный пример работает, то там используется:
Код:
type
  TSingleArray	= array of Single;
var
  Buf		: TSingleArray;
begin
...
    SetLength(Buf, ci.chans * SPECWIDTH);
    BASS_ChannelGetData(chan, buf, (ci.chans * SPECWIDTH * SizeOf(Single)) or BASS_DATA_FLOAT); // get the sample data (floating-point to avoid 8 & 16 bit processing)
и всё работает. С двумерным масивом не пробовал.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter