2018-12-29 08:12:46 +00:00
|
|
|
|
# 设计内容(算法部分)
|
|
|
|
|
---
|
2018-12-29 09:58:51 +00:00
|
|
|
|
## 对函数Data类的分析
|
2018-12-29 08:12:46 +00:00
|
|
|
|
1.函数Data2color根据左声道的音量变化率,决定输出颜色R的值;根据右声道的变化率,决定输出颜色B的值;根据声音的音量,决定输出颜色G的值。(皆为变化率越大,颜色值越大)中途会调用HSV内的函数,对色彩进行增益。
|
2018-12-29 08:43:47 +00:00
|
|
|
|
|
2018-12-29 09:58:51 +00:00
|
|
|
|
## 对HSV.hpp,HSV.cpp内函数的分析
|
2018-12-29 08:12:46 +00:00
|
|
|
|
1.此类用于实现RGB与HSV的相互转化,以便能通过改变S(饱和度)来调节画面的鲜艳程度。
|
|
|
|
|
2.函数hsv2rgb用来将hsv值转化回rgb。
|
|
|
|
|
3.函数rgb2hsv用来将rgb转化到hsv。
|
2018-12-29 08:43:47 +00:00
|
|
|
|
|
2018-12-29 09:58:51 +00:00
|
|
|
|
## 对Get_RGB类的分析
|
2018-12-29 08:12:46 +00:00
|
|
|
|
1.函数fftw3用于将给定区间内的音量时域信号(由“数据部分”读入在若干ms时间内每一时刻的音量响度)通过调用fftw3内的FFTW_MEASURE(调试阶段使用FFTW_ESTIMATE)分解为频域信号,从0到FR的频率每一个频率都对应一个复数,取这个复数的模长为该频率的振幅(假设采样频率为 FR , 采样点数为1024 (NN),那么横坐标第N个点代表的频率 X(N) = (FR / NN) * N)。将这些频率值传递给hzTospectrum。
|
2018-12-29 09:59:45 +00:00
|
|
|
|
|
2018-12-29 08:12:46 +00:00
|
|
|
|
2.函数hztospectrum用于将声音频率信号转化为光的频率信号,传递给spectral_color。方法是每次增加或减少一个八度(增加一个八度为频率值乘以2,减少一个八度为频率值除以2.)该计算方法来源于http://www.flutopedia.com/sound_color.html
|
2018-12-29 09:59:45 +00:00
|
|
|
|
|
2018-12-29 08:12:46 +00:00
|
|
|
|
3.函数spectral_color用于将每一个光的频率值转化为RGB值。公式来源于https://stackoverflow.com/questions/3407942/rgb-values-of-visible-spectrum
|
2018-12-29 09:59:45 +00:00
|
|
|
|
|
|
|
|
|
4.此类虽然更有科学依据,可能更为自然,贴近现实,但由于工程上过于复杂,尚未调试完成,加上对预期结果的存疑,因此暂时搁置使用,将来可能可以成为能在用户界面进行选择使用的一个算法。
|