9个版本

0.4.1 2021年2月17日
0.4.0 2021年2月8日
0.3.1 2020年10月26日
0.3.0 2019年5月20日
0.1.2 2018年7月22日

#382 in 音频

Download history 26/week @ 2024-03-11 27/week @ 2024-03-18 53/week @ 2024-03-25 80/week @ 2024-04-01 26/week @ 2024-04-08 22/week @ 2024-04-15 38/week @ 2024-04-22 16/week @ 2024-04-29 110/week @ 2024-05-06 77/week @ 2024-05-13 31/week @ 2024-05-20 17/week @ 2024-05-27 28/week @ 2024-06-03 55/week @ 2024-06-10 27/week @ 2024-06-17 21/week @ 2024-06-24

每月133次下载
用于 caper

MIT/Apache

145KB
3K SLoC

ambisonic

创作和播放3D音频。

License Cargo Documentation

Tests

ambisonic库在rodio之上提供了3D声音场景的支持。它允许在虚拟听众周围自由定位和移动声音源,并通过声卡实时播放生成的空间混合。

功能

  • 逼真的方向性音频
  • rodio声音源放置在空间中
  • 移动声音的多普勒效应

使用方法

将此添加到您的Cargo.toml

[dependencies]
ambisonic = "0.4.0"

使用示例

Ambisonic可以为您生成正弦波

use std::thread::sleep;
use std::time::Duration;
use ambisonic::{rodio, AmbisonicBuilder};

let scene = AmbisonicBuilder::default().build();
let source = rodio::source::SineWave::new(440);
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]);

由于Ambisonic建立在Rodio之上,因此Rodio支持的任何文件格式都可以加载并定位在3D空间中。

let file = std::fs::File::open("path/to/your/file.wav").unwrap();
let source = rodio::Decoder::new(std::io::BufReader::new(file)).unwrap();
let source = source.repeat_infinite();

let mut sound = scene.play_at(source.convert_samples(), [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]);

技术细节

ambisonic围绕着声音场的中间表示概念构建,称为B格式。该B格式描述了听众应该听到什么,与他们的音频播放设备无关。这导致音频场景创作和渲染之间的明确分离。有关详细信息,请参阅维基百科

在其当前状态下,该库允许将单通道rodio源的空间组合到一阶B格式流。所选渲染器然后将B格式流解码为播放的音频信号。

目前,以下渲染器可用

  • 立体声:在两个立体声扬声器或耳机上的简单高效播放
  • HRTF:使用头部相关传递函数在耳机上实现逼真的3D声音

尽管目前只支持立体声输出,但B格式抽象应该使得在未来实现任意扬声器配置变得容易。

学习资源

https://github.com/mbillingr/ambisonic/blob/master/documents/info.md

许可证

根据以下任一许可证授权:

任选其一。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,旨在包含在作品中,将按照上述方式双重授权,无需任何附加条款或条件。

依赖关系

约2-6.5MB
约127K SLoC