3个版本
0.1.2 | 2024年6月10日 |
---|---|
0.1.1 | 2024年6月10日 |
0.1.0 | 2024年6月10日 |
#198 在 音频
18KB
242 行
PSG Lite
此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(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT)供您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交给作品中的任何贡献都将双许可如上所述,没有任何额外条款或条件。
依赖项
~110KB