#audio-samples #wav #wave #encoding

audio_overlay

将一个音频样本数组叠加到另一个上

6个版本

0.1.5 2023年5月30日
0.1.4 2023年4月20日
0.1.3 2023年3月19日

#783 in 音频

每月下载量24

MIT许可协议

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();
}

无运行时依赖