Added some of the algorithm

This commit is contained in:
Vindicator645 2018-12-28 23:09:59 +08:00
parent a41589cb15
commit 5464c22a33
2 changed files with 13 additions and 3 deletions

View File

@ -66,7 +66,7 @@ int main() {
std::cout << R << " " << G << " " << B;
std::cout << "\n"<< R << " " << G << " " << B;
}
double Get_RGB::hztospectrun(double hz) {
double Get_RGB::hztospectrum(double hz) {
double hbox;
hbox = hz;
for (;hbox > 800;hbox = hbox / 2);
@ -85,4 +85,4 @@ void Get_RGB::spectral_color(double &r, double &g, double &b, double l) // RGB
else if ((l >= 585.0) && (l < 639.0)) { t = (l - 585.0) / (639.0 - 585.0); g = 0.84 - (0.84*t); }
if ((l >= 400.0) && (l < 475.0)) { t = (l - 400.0) / (475.0 - 400.0); b = +(2.20*t) - (1.50*t*t); }
else if ((l >= 475.0) && (l < 560.0)) { t = (l - 475.0) / (560.0 - 475.0); b = 0.7 - (t)+(0.30*t*t); }
}
}

View File

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