Вверх ↑
Этот топик читают: Гость
Ответов: 140
Рейтинг: 2
#1: 2017-11-10 19:43:18 ЛС | профиль | цитата
Есть такая информация
Данные по частотам
Соответствие цвета звуку строится по такому традиционному принципу — частотный диапазон звука разделялся по частотному принципу на три-четыре канала:
красные лампы — низкие частоты (диапазон до 200 Гц),
жёлтые — средне-низкие (диапазон от 200 до 800 Гц),
зелёные — средние (от 800 до 3500 Гц),
синие — выше 3500 Гц
Пытаюсь сделать цветомузыку на ардуинке Только вот не понимаю каким образом можно преобразовать FFT больше в 800Гц если у неё максимум 743
Полазил по форуму, но как преобразовывать эти значения в Гц так не смог найти
карма: 0
私はアニメが大好き
0
Ответов: 2059
Рейтинг: 132
#2: 2017-11-10 20:51:32 ЛС | профиль | цитата
Если используете FFT, то в результате Вы получите комплексную спектральную плотность.
Если вам нужен многополосный измеритель уровня, то никакой фурье не нужен, нужны полосовые фильтры, которые будут тупо делить сигнал на частотные полосы.
Надо IC писать.
карма: 6

0
Ответов: 8940
Рейтинг: 824
#3: 2017-11-10 20:51:38 ЛС | профиль | цитата
dimosikILA, максимальная частота в полосе FFT -- 16 кГц, а указанное вами цифра 743 это не частота а индекс значения данных в массиве амплитуд вычисленных FFT по 2048 точкам звука. Значения по индексам от 1 до 743 содержат амплитуды частот через каждые 21.533203125 Гц
44100/2048 = 21.5332*743 Гц
21.5332*743 = ~16000 Гц

--- Добавлено в 2017-11-10 20:55:06

44100/2048 = 21.5332 Гц конечно

Редактировалось 1 раз(а), последний 2017-11-10 20:55:06
карма: 19

0
Ответов: 2059
Рейтинг: 132
#4: 2017-11-10 21:31:16 ЛС | профиль | цитата
Леонид писал(а):
44100/2048 = 21.5332 Гц конечно

Мог и не писать, и так понятно, что описАлся.

А откуда эта цифирь 2048?
Это в компоненте заложено, или от bass именованная константа по умолчанию?

Редактировалось 3 раз(а), последний 2017-11-10 21:40:35
карма: 6

0
Ответов: 8940
Рейтинг: 824
#5: 2017-11-10 22:02:11 ЛС | профиль | цитата
flint2, BASS ограничил выдаваемый FFT 16 килогерцами, кроме того делает его около 20 раз в секунду независимо от длины выборки, поэтому запрашивать его чаще смысла нет, будут проскакивать одинаковые, вот тут-то и получается, что при дискретизации 44100 Гц самой подходящей будет выборка 2048 Хотя у BASS есть и 512, и 1024, и 4096.
карма: 19

0
Ответов: 2059
Рейтинг: 132
#6: 2017-11-10 22:42:58 ЛС | профиль | цитата
BASS ограничил выдаваемый FFT 16 килогерцами, кроме того делает его около 20 раз в секунду

Это наверное, да и куда больше-то? В BASS 24 это переменная (я слышал, что и winDOS №10 есть).
вот тут-то и получается

самой подходящей будет выборка 2048
Подходит к чему? К ..., - индикации столбиков (уже заложенных столбиков по умолчанию), спектра, или цветомузыки?

Я понял так, что цветомузыка и все балдеют - главное эффект.
Как не крути, Эта Буратино... лет на тридцать-сорок назад..., нет и тогда не пошло бы.


И как прикажете быть, когда закрытых производств нет?
Когда нет подходящей элементарной базы, чтоб папа с мамой плакали навзрыд!

Редактировалось 8 раз(а), последний 2017-11-10 23:24:32
карма: 6

0
Ответов: 8940
Рейтинг: 824
#7: 2017-11-11 11:34:40 ЛС | профиль | цитата
flint2 писал(а):
когда закрытых производств нет
Баловаться на компьютере
Баловство


Add(BASS_FFT_2048,6826875,280,210)
{
 SoundStream="MySoundFile"
 IndexMin=1
 IndexMax=465
 link(onIndFreq,3396470:doValue,[(319,216)(319,146)])
 link(onAmpl,9978168:doCompare,[])
}
Add(MainForm,16148704,77,315)
{
 Left=200
 Top=100
 Width=378
 Height=316
 Caption="Цвет"
 Point(Handle)
 link(onCreate,10584020:doInit,[])
}
Add(BASS_Version,10386414,175,329)
{
 link(onCheckFailed,15920464:doMessage,[(215,342)(215,384)])
}
Add(Message,699574,175,378)
{
 Message="Error BASS initialization"
 Caption="Error"
 Icon=1
}
Add(Message,15920464,224,378)
{
 Message="Incorrect version of BASS library "
 Caption="Error"
 Icon=1
}
Add(BASS_Init,10584020,126,329)
{
 Device=1
 link(onInit,10386414:doCheck,[])
 link(onError,699574:doMessage,[(166,342)(166,384)])
 link(Handle,16148704:Handle,[(146,320)(118,320)(118,355)(83,355)])
}
Add(BASS_StreamCreateFile,665072,203,84)
{
 Name="MySoundFile"
 link(onCreate,7039979:doPlay,[])
 link(onError,15011742:doMessage,[(242,104)(242,132)])
}
Add(ODialog,3504749,112,84)
{
 link(onExecute,8264596:doEvent1,[])
}
Add(Message,15011742,252,126)
{
 Message="Incorrect version of BASS library "
 Caption="Error"
 Icon=1
}
Add(Timer,3026740,196,182)
{
 Interval=50
 Enable=1
 link(onTimer,7985684:doEvent1,[])
}
Add(Hub,7985684,245,182)
{
 OutCount=5
 link(onEvent1,14288503:doClear,[(718,188)(718,230)])
 link(onEvent2,9611191:doClear,[(662,195)(662,237)])
 link(onEvent3,5604344:doClear,[(606,202)(606,244)])
 link(onEvent4,14970704:doClear,[(550,209)(550,251)])
 link(onEvent5,6826875:doFFT,[])
}
Add(If_else,9978168,329,217)
{
 Type=3
 Op2=Integer(10)
 link(onTrue,14288503:doOperation,[])
 link(onFalse,2730178:doCompare,[])
 link(Op1,7771117:Var2,[])
}
Add(If_else,2730178,378,224)
{
 Type=3
 Op2=Integer(37)
 link(onTrue,9611191:doOperation,[])
 link(onFalse,16314774:doCompare,[])
 link(Op1,10660149:Var2,[])
}
Add(If_else,16314774,427,231)
{
 Type=3
 Op2=Integer(162)
 link(onTrue,5604344:doOperation,[])
 link(onFalse,6774799:doCompare,[])
 link(Op1,3965535:Var2,[])
}
Add(If_else,6774799,476,238)
{
 Type=3
 Op2=Integer(464)
 link(onTrue,14970704:doOperation,[])
 link(onFalse,7977717:doEvent1,[(515,251)(515,321)])
 link(Op1,3965535:Var3,[(482,180)])
}
Add(Math,14288503,735,217)
{
 Point(doClear)
 link(Op1,10080805:Var1,[(741,208)(727,208)(727,257)])
}
Add(Math,9611191,679,224)
{
 Point(doClear)
 link(Op1,14947317:Var1,[(685,215)(671,215)(671,264)])
}
Add(Math,5604344,623,231)
{
 Point(doClear)
 link(Op1,8273571:Var1,[(629,215)(615,215)(615,271)])
}
Add(Math,14970704,567,238)
{
 Point(doClear)
 link(Op1,7010810:Var1,[(573,215)(559,215)(559,278)])
}
Add(GetDataEx,7010810,567,273)
{
 link(Data,14970704:Result,[])
}
Add(GetDataEx,8273571,623,266)
{
 link(Data,5604344:Result,[])
}
Add(GetDataEx,14947317,679,259)
{
 link(Data,9611191:Result,[])
}
Add(GetDataEx,10080805,735,252)
{
 link(Data,14288503:Result,[])
}
Add(Hub,7977717,532,315)
{
 OutCount=4
 link(onEvent1,7488752:doCalc,[])
 link(onEvent2,7654984:doCalc,[])
 link(onEvent3,8054890:doCalc,[])
 link(onEvent4,11303960:doCalc,[])
}
Add(Hub,8264596,154,84)
{
 link(onEvent1,665072:doCreate,[])
 link(onEvent2,3026740:doTimer,[(186,97)(186,188)])
}
Add(Hub,1742348,154,112)
{
 link(onEvent1,665072:doDestroy,[(193,118)(193,97)])
 link(onEvent2,3026740:doStop,[(179,125)(179,195)])
}
Add(Memory,3396470,329,140)
{
 Default=Integer(0)
}
Add(GetDataEx,7771117,329,175)
{
 link(Data,3396470:Value,[])
}
Add(GetDataEx,10660149,378,175)
{
 Angle=3
 link(Data,7771117:Var3,[])
}
Add(GetDataEx,3965535,427,175)
{
 Angle=3
 link(Data,10660149:Var3,[])
}
Add(BASS_ChannelPlay,7039979,252,84)
{
 Channel="MySoundFile"
}
Add(ChildPanel,13650818,777,315)
{
}
BEGIN_SDK
  Add(EditMulti,14606757,21,21)
  {
   WorkCount=1
   link(doWork1,12335601:doEvent1,[(60,27)(60,76)])
  }
  Add(Panel,5415222,105,35)
  {
   Left=85
   Top=5
   Width=135
   Height=135
   Point(doColor)
  }
  Add(Hub,12335601,70,70)
  {
   OutCount=3
   link(onEvent1,5415222:doColor,[(95,76)(95,48)])
   link(onEvent2,1592569:doPosition,[])
   link(onEvent3,1592569:doColor,[])
  }
  Add(ProgressBar,1592569,105,77)
  {
   Width=130
   Height=5
   Align=2
   Max=255
   ProgressColor=255
   Point(doColor)
  }
END_SDK
Add(ChildPanel,3768545,63,84)
{
 link(onEvent1,3504749:doExecute,[])
 link(onEvent2,1742348:doEvent1,[(102,97)(102,118)])
}
BEGIN_SDK
  Add(EditMulti,12567687,21,21)
  {
   EventCount=2
   VarCount=4
   link(Var1,7108077:Position,[(27,173)(83,173)])
   link(Var2,14151973:Position,[(34,180)(125,180)])
   link(Var3,4063166:Position,[(41,187)(167,187)])
   link(Var4,12032338:Position,[(48,194)(209,194)])
  }
  Add(Panel,531907,49,49)
  {
   Width=80
   Height=278
   Align=1
  }
  Add(Button,12876091,203,35)
  {
   Left=5
   Top=5
   Caption="Open"
   link(onClick,12567687:onEvent1,[(242,41)(242,27)])
  }
  Add(Button,298707,203,77)
  {
   Left=5
   Top=35
   Caption="XX"
   link(onClick,12567687:onEvent2,[(249,83)(249,34)])
  }
  Add(ScrollBar,7108077,77,133)
  {
   Left=5
   Top=80
   Width=10
   Height=150
   Color=255
   Max=1000
   Page=50
   Position=250
   Kind=1
  }
  Add(ScrollBar,14151973,119,133)
  {
   Left=25
   Top=80
   Width=10
   Height=150
   Color=65535
   Max=1000
   Page=50
   Position=250
   Kind=1
  }
  Add(ScrollBar,4063166,161,133)
  {
   Left=45
   Top=80
   Width=10
   Height=150
   Color=65280
   Max=1000
   Page=50
   Position=250
   Kind=1
  }
  Add(ScrollBar,12032338,203,133)
  {
   Left=65
   Top=80
   Width=10
   Height=150
   Color=16711680
   Max=1000
   Page=50
   Position=250
   Kind=1
  }
END_SDK
Add(MathParse,11303960,567,336)
{
 MathStr="(round(%1*%2)*65536 < 16711680)*round(%1*%2)*65536 + (round(%1*%2)*65536 >= 16711680)*16711680"
 ResultType=0
 link(onResult,14017017:doWork1,[(606,342)(606,384)])
 link(X1,7010810:Var2,[])
 link(X2,3768545:Var4,[(580,285)(90,285)])
}
Add(MathParse,8054890,623,329)
{
 MathStr="(round(%1*%2)*256<65280)*round(%1*%2)*256 + (round(%1*%2)*256>=65280)*65280"
 ResultType=0
 link(onResult,3602490:doWork1,[(662,335)(662,370)])
 link(X1,8273571:Var2,[])
 link(X2,3768545:Var3,[(636,292)(83,292)])
}
Add(MathParse,7654984,679,322)
{
 MathStr="((round(%1*%2)*256 + round(%1*%2))<65535)*(round(%1*%2)*256 + round(%1*%2)) + ((round(%1*%2)*256 + round(%1*%2))>=65535)*65535"
 ResultType=0
 link(onResult,16150945:doWork1,[(718,328)(718,356)])
 link(X1,14947317:Var2,[])
 link(X2,3768545:Var2,[(692,299)(76,299)])
}
Add(MathParse,7488752,735,315)
{
 MathStr="((%1*%2)<255)*%1*%2 + ((%1*%2)>=255)*255"
 ResultType=0
 link(onResult,13650818:doWork1,[])
 link(X1,10080805:Var2,[])
 link(X2,3768545:Var1,[(748,306)(69,306)])
}
Add(ChildPanel,16150945,777,350)
{
}
BEGIN_SDK
  Add(EditMulti,6997819,21,21)
  {
   WorkCount=1
   link(doWork1,12915409:doEvent1,[(60,27)(60,76)])
  }
  Add(Panel,869147,105,35)
  {
   Left=220
   Top=5
   Width=135
   Height=135
   Point(doColor)
  }
  Add(Hub,12915409,70,70)
  {
   OutCount=3
   link(onEvent1,869147:doColor,[(95,76)(95,48)])
   link(onEvent2,7366405:doPosition,[])
   link(onEvent3,7366405:doColor,[])
  }
  Add(ProgressBar,7366405,105,77)
  {
   Width=130
   Height=5
   Align=2
   Max=65536
   ProgressColor=65535
   Point(doColor)
  }
END_SDK
Add(ChildPanel,3602490,777,364)
{
}
BEGIN_SDK
  Add(EditMulti,9863869,21,21)
  {
   WorkCount=1
   link(doWork1,8962210:doEvent1,[(60,27)(60,76)])
  }
  Add(Panel,14766402,105,35)
  {
   Left=85
   Top=140
   Width=135
   Height=135
   Point(doColor)
  }
  Add(Hub,8962210,70,70)
  {
   OutCount=3
   link(onEvent1,14766402:doColor,[(95,76)(95,48)])
   link(onEvent2,14810965:doPosition,[])
   link(onEvent3,14810965:doColor,[])
  }
  Add(ProgressBar,14810965,105,77)
  {
   Width=130
   Height=5
   Align=2
   Max=65536
   ProgressColor=65280
   Point(doColor)
  }
END_SDK
Add(ChildPanel,14017017,777,378)
{
}
BEGIN_SDK
  Add(EditMulti,234910,21,21)
  {
   WorkCount=1
   link(doWork1,16014047:doEvent1,[(60,27)(60,76)])
  }
  Add(Panel,10668822,105,35)
  {
   Left=220
   Top=140
   Width=135
   Height=135
   Point(doColor)
  }
  Add(Hub,16014047,70,70)
  {
   OutCount=3
   link(onEvent1,10668822:doColor,[(95,76)(95,48)])
   link(onEvent2,8622099:doPosition,[])
   link(onEvent3,8622099:doColor,[])
  }
  Add(ProgressBar,8622099,105,77)
  {
   Width=130
   Height=5
   Align=2
   Max=16711680
   ProgressColor=16711680
   Point(doColor)
  }
END_SDK
карма: 19

0
Ответов: 2059
Рейтинг: 132
#8: 2017-11-11 12:19:02 ЛС | профиль | цитата
Леонид, кто-бы сомневался!
Но ̶о̶л̶е̶н̶и̶̶ IC лучше.
карма: 6

0
Ответов: 140
Рейтинг: 2
#9: 2017-11-11 18:53:33 ЛС | профиль | цитата
flint2 писал(а):
Леонид, кто-бы сомневался!
Но ̶о̶л̶е̶н̶и̶̶ IC лучше.

К моему сожалению, я не знаю delphi, только СИ для микроконтроллеров

--- Добавлено в 2017-11-11 18:54:28

Леонид писал(а):
flint2 писал(а):
когда закрытых производств нет
Баловаться на компьютере
Баловство

Спасибо!
Но мне бы очень хотелось знать, откуда эти формулы?
Заранее спасибо!

Редактировалось 1 раз(а), последний 2017-11-11 18:54:28
карма: 0
私はアニメが大好き
0
Ответов: 8940
Рейтинг: 824
#10: 2017-11-11 19:32:01 ЛС | профиль | цитата
dimosikILA, почитайте про "преобразование Фурье" аналоговое и дискретное
карма: 19

0
Ответов: 2059
Рейтинг: 132
#11: 2017-11-11 19:35:06 ЛС | профиль | цитата
А это про Bass.
http://www.un4seen.com/doc/#bass/bass.html
http://www.tiflocomp.ru/games/design/sound_games/bass.php
http://www.un4seen.com/

Редактировалось 1 раз(а), последний 2017-11-11 19:35:29
карма: 6

0
Ответов: 140
Рейтинг: 2
#12: 2017-11-12 13:46:21 ЛС | профиль | цитата
Спасибо все, буду пытаться учиться писать IC
карма: 0
私はアニメが大好き
0
Ответов: 5227
Рейтинг: 587
#13: 2017-11-16 20:57:40 ЛС | профиль | цитата
честно говоря так и не понял т.з, фурье в контроллере или в винде нужно
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 140
Рейтинг: 2
#14: 2017-12-05 17:05:18 ЛС | профиль | цитата
andrestudio писал(а):
честно говоря так и не понял т.з, фурье в контроллере или в винде нужно

В программе на винде
карма: 0
私はアニメが大好き
0
Ответов: 5227
Рейтинг: 587
#15: 2017-12-05 22:23:18 ЛС | профиль | цитата
dimosikILA, всё реально, вот доказательства http://forum.hiasm.com/getfile/38261
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1BASS_SoniqueVis.zip [119.1KB] [517]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)