diff --git a/document/算法部分.md b/document/算法部分.md index 3b4d083..60832f2 100644 --- a/document/算法部分.md +++ b/document/算法部分.md @@ -1,12 +1,13 @@ -##ԺDataķ -1.Data2color仯ʣɫRֵı仯ʣɫBֵɫGֵΪ仯ԽɫֵԽ;HSVڵĺɫʽ档 -##HSV.hppںķ -1.ʵRGBHSV໥תԱͨıSͶȣڻ޳̶ȡ -2.hsv2rgbhsvֵתrgb -3.rgb2hsvrgbתhsv -##Get_RGBķ -1.fftw3ڽڵʱźţɡݲ֡msʱÿһʱ̵ȣͨfftw3ڵFFTW_MEASURE(Խ׶ʹFFTW_ESTIMATE)ֽΪƵźţ0FRƵÿһƵʶӦһȡģΪƵʵƵΪ 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.ȻпѧݣܸΪȻʵڹϹڸӣδɣ϶ԤڽĴɣʱʹãܿԳΪûѡʹõһ㷨 - +# 设计内容(算法部分) +--- +##对函数Data类的分析 +1.函数Data2color根据左声道的音量变化率,决定输出颜色R的值;根据右声道的变化率,决定输出颜色B的值;根据声音的音量,决定输出颜色G的值。(皆为变化率越大,颜色值越大)中途会调用HSV内的函数,对色彩进行增益。 +##对HSV.hpp,HSV.cpp内函数的分析 +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.此类虽然更有科学依据,可能更为自然,贴近现实,但由于工程上过于复杂,尚未调试完成,加上对预期结果的存疑,因此暂时搁置使用,将来可能可以成为能在用户界面进行选择使用的一个算法。 \ No newline at end of file