# 下载FFTW源代码 wget http://www.fftw.org/fftw-3.3.10.tar.gz tar -xzf fftw-3.3.10.tar.gz cd fftw-3.3.10 # 配置交叉编译 ./configure --host=arm-linux-gnueabihf --prefix=/path/to/install # 编译 make # 安装 make install #include <stdio.h> #include <stdlib.h> #include <fftw3.h> #define SAMPLE_RATE 44100 #define FFT_SIZE 1024 // 控制灯光 void controlLights(double frequency) { // 简单演示:频率越高,灯光亮度越高 int brightness = (int)(frequency * 255); // 控制灯光 printf("Light brightness: %d\n", brightness); } int main() { double audioInput[FFT_SIZE]; fftw_complex *out; fftw_plan plan; out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * FFT_SIZE); // 模拟读取音频PCM文件并转换为double数组 for (int i = 0; i < FFT_SIZE; i++) { audioInput[i] = (double)rand() / RAND_MAX; // 随机生成音频样本数据 } // 执行傅里叶变换 plan = fftw_plan_dft_r2c_1d(FFT_SIZE, audioInput, out, FFTW_ESTIMATE); fftw_execute(plan); // 输出音乐律动频谱并控制灯光 for (int i = 0; i < FFT_SIZE / 2 + 1; i++) { double magnitude = sqrt(out[i][0] * out[i][0] + out[i][1] * out[i][1]); printf("Frequency bin %d: %f\n", i, magnitude); controlLights(magnitude); } fftw_destroy_plan(plan); fftw_free(out); return 0; }
简单的音乐律动傅里叶频谱
于 2024-03-28 20:09:55 首次发布