Вверх ↑
Этот топик читают: Гость
Ответов: 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
Ответов: 8926
Рейтинг: 823
#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
Ответов: 8926
Рейтинг: 823
#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
Ответов: 8926
Рейтинг: 823
#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
Ответов: 8926
Рейтинг: 823
#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] [489]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)