如何放大铁 rust 正弦波?

92dk7w1h  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(114)

我试图播放一个方向音频声音,但我似乎无法放大正弦波

fn main() {
    use std::thread::sleep;
    use std::time::Duration;
    use ambisonic::{rodio, AmbisonicBuilder};

    let scene = AmbisonicBuilder::default().build();
    let source = rodio::source::SineWave::new(440).amplify(0.5);
    let mut sound = scene.play_at(source, [50.0, 1.0, 0.0]);

// move sound from right to left
    sound.set_velocity([-10.0, 0.0, 0.0]);
    for i in 0..1000 {
        sound.adjust_position([50.0 - i as f32 / 10.0, 1.0, 0.0]);
        sleep(Duration::from_millis(10));
    }
    sound.set_velocity([0.0, 0.0, 0.0]);

}

此代码抛出此错误:

let source = rodio::source::SineWave::new(440).scale_amplitude(0.5);
  |                                            ^^^^^^^^^^^^^^^ method not found in `SineWave`

如果我删除放大功能,它工作正常有人知道为什么我有这个错误吗?
我在找一个可以放大的正弦波。

e4eetjau

e4eetjau1#

ambisonic当前有rodio的0.13版本作为依赖项。如果您的Cargo.toml中同时列出了rodioambisonic,则导入的traits可能会相互冲突。
由于ambisonic重新导出rodio,如果您将Source trait导入为:

use ambisonic::rodio::Source;

然后代码编译:

fn main() {
    use std::thread::sleep;
    use std::time::Duration;
    use ambisonic::{rodio, AmbisonicBuilder};
    use ambisonic::rodio::Source;

    let scene = AmbisonicBuilder::default().build();
    let source = rodio::source::SineWave::new(440).amplify(0.5);
    let mut sound = scene.play_at(source, [50.0, 1.0, 0.0]);

    // move sound from right to left
    sound.set_velocity([-10.0, 0.0, 0.0]);
    for i in 0..1000 {
        sound.adjust_position([50.0 - i as f32 / 10.0, 1.0, 0.0]);
        sleep(Duration::from_millis(10));
    }
    sound.set_velocity([0.0, 0.0, 0.0]);
}

相关问题