6个版本
0.1.5 | 2023年5月30日 |
---|---|
0.1.4 | 2023年4月20日 |
0.1.3 | 2023年3月19日 |
#783 in 音频
每月下载量24次
12KB
146 代码行
音频叠加
将一个数组的音频样本叠加到另一个数组上。您可以可选地扩展目标数组。
叠加函数可用于i8、i16、i32、i64、f32和f64。
变更日志
示例
此处为示例实现。 此示例依赖于两个不是audio_overlay
依赖项的crate:hound
(打开.wav文件并将它们转换为vecs)和rodio
(播放音频样本缓冲区)。
use rodio::{OutputStream, Sink};
use rodio::buffer::SamplesBuffer;
use hound;
use audio_overlay::overlay;
fn main()
{
// Set the framerate.
let framerate: u32 = 44100;
// Load the audio clips.
// Source: https://archive.org/download/NasaApollo11OnboardRecordings/11_highlight_2.ogg
let src: Vec<i16> = hound::WavReader::open("src.wav").unwrap().samples::<i16>().map(|s| s.unwrap()).collect::<Vec<i16>>();
// Source: https://archive.org/download/airship1904/airship1904.ogg
let mut dst: Vec<i16> = hound::WavReader::open("dst.wav").unwrap().samples::<i16>().map(|s| s.unwrap()).collect::<Vec<i16>>();
// Overlay the audio clips. The src clip will start 1.0 seconds after dst begins.
overlay(src.as_slice(), &mut dst, 1.0, framerate, true);
// Play the audio clips. Source: https://docs.rs/rodio/latest/rodio
let (_stream, stream_handle) = OutputStream::try_default().unwrap();
let source = SamplesBuffer::new(1, framerate, dst);
let sink = Sink::try_new(&stream_handle).unwrap();
sink.append(source);
sink.sleep_until_end();
}