#波形 #PSG

无std psg_lite

此crate生成类似于AY-3-8910及其兼容芯片的PCM波形。

3个版本

0.1.2 2024年6月10日
0.1.1 2024年6月10日
0.1.0 2024年6月10日

#198音频


用于 fbd_sequencer_cli

MIT/Apache

18KB
242

PSG Lite

Crates.io Documentation Build Status Crates.io License

此crate生成类似于AY-3-8910及其兼容芯片的PCM波形。此crate不适用于高质量的音频应用。主要用例是在资源受限的环境中生成简单的声音效果和音调。它设计用于速度,可在8位CPU(如AVR[^1])上使用。模拟芯片不是目标。因此,在功能方面与AY-3-8910有显著差异。

  • 硬件包络:未实现。通道音量范围从0到15。
  • 噪声发生器:移位寄存器的位数不同。具体来说,它是16位而不是17位。
  • 音调周期:不能设置为0。最小值受时钟速率和采样率限制。

[^1]: 虽然C++实现(相同结构)在ATTiny上工作,但尚未用Rust证实。

采样率

PSG结构非常简单,但在2MHz时钟速率下,可生成的频率上限为125KHz。此crate通过简单地瘦化波形来降低处理负载,而不进行下采样。因此,在低采样率时,尤其是在高频范围,音质会显著下降。在约48000Hz的采样率下,音质通常是可接受的。如果指定250KHz的采样率,则波形生成的质量几乎无下降。

在PC环境中,大多数音频框架在输出到设备之前自动执行采样率转换。因此,通常可以在没有问题的情况下播放250KHz的采样率。

特性

此crate有以下features标志

float:启用以f32格式生成样本。默认启用。如果没有设置此标志,则不执行浮点运算。

用法

要使用此crate,创建一个SoundGenerator实例,配置通道的音调周期和模式,然后生成样本。接口简单,专为嵌入式系统设计。以下是一个基本示例。

use psg_lite::{SoundGenerator, Output};

fn main() {
    const CLOCK_RATE: u32 = 2_000_000;
    const SAMPLE_RATE: u32 = 48_000;

    let mut generator = SoundGenerator::new(CLOCK_RATE, SAMPLE_RATE);

    generator.set_mode(0, Output::TONE);
    generator.set_volume(0, 15);
    generator.set_period(0, 123);

    for _ in 0..SAMPLE_RATE {
        let sample: i16 = generator.next_sample();
        // Process the sample (e.g., send to DAC or audio buffer)
    }
}

许可

以下任一许可下

贡献

除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交给作品中的任何贡献都将双许可如上所述,没有任何额外条款或条件。

依赖项

~110KB