#fft #频谱图 #DFT #频谱仪

bin+lib sonogram

使用 Rust 编写的频谱图工具

15 个版本

0.7.1 2023 年 1 月 5 日
0.7.0 2022 年 10 月 4 日
0.6.2 2022 年 4 月 9 日
0.6.0 2022 年 2 月 6 日
0.3.0 2019 年 4 月 19 日

241图像

每月 34 次下载

GPL-3.0 或更高版本

1.5MB
857

Sonogram

从波形创建声谱图*,或导入 .wav 文件。

频谱图可以保存为 .png 文件、.csv 文件或在内存中。包含一个示例命令行应用程序,该应用程序将 .wav 文件转换为 .png 频谱图。

示例输出 .png

Sample sonogram

*注意:声谱图、频谱仪、频谱图或功率谱密度图是类似事物的常见名称。

构建和运行命令行应用程序

cargo build --release --bin sonogram --features=build-binary

./target/release/sonogram --wav samples/trumpet.wav --png output.png

保存到 .png 文件

let waveform: Vec<i16> = vec![/* ... some data ... */];

// Build the model
let spectrograph = SpecOptionsBuilder::new(2048)
  .load_data_from_memory(waveform)
  .build().unwrap();

// Compute the spectrogram giving the number of bins and the window overlap.
spectrograph.compute();

// Specify a colour gradient to use (note you can create custom ones)
let mut gradient = ColourGradient::create(ColourTheme::from(args.gradient));

// Save the spectrogram to PNG.
let png_file = std::path::Path::new("path/to/file.png");
spectrograph.to_png(&png_file, 
            FrequencyScale::Linear,
            &mut gradient,
            512,    // Width
            512,    // Height
        ).unwrap();

自定义颜色渐变

对于 .png 图像,您可以自定义颜色渐变

let mut gradient = ColourGradient::new();
gradient.add_colour(RGBAColour::new(0, 0, 0, 255));     // Black
gradient.add_colour(RGBAColour::new(55, 0, 110, 255));  // Purple
gradient.add_colour(RGBAColour::new(0, 0, 180, 255));   // Blue
gradient.add_colour(RGBAColour::new(0, 255, 255, 255)); // Cyan
gradient.add_colour(RGBAColour::new(0, 255, 0, 255));   // Green
spec_builder.set_gradient(gradient);

或使用内置的颜色渐变主题

let mut gradient = ColourGradient::rainbow_theme();
spec_builder.set_gradient(gradient);

许可证

此源代码根据 GPLv3 许可证发布。阅读 LICENSE 文件以获取法律信息。

依赖项

~6MB
~101K SLoC