#增益 #峰值 #标签 #分析 #数据 #分析

replaygain

分析音频数据以获取ReplayGain标签(增益、峰值)

2个稳定版本

使用旧的Rust 2015

1.0.1 2023年2月20日
1.0.0 2017年1月30日

#362 in 音频

LGPL-2.1

39KB
483

replaygain-rs

分析音频数据以获取ReplayGain标签(增益、峰值)。

这实际上只是ffmpeg的af_replaygain提供的replaygain分析功能的包装。然而,与af_replaygain不同,它提供了实际值,而不是只将它们打印到控制台然后丢弃。如此之近,却又如此遥远。

文档 Crates.io


lib.rs:

这实际上只是ffmpeg的af_replaygain提供的replaygain分析功能的包装。然而,与af_replaygain不同,它提供了实际值,而不是只将它们打印到控制台然后丢弃。如此之近,却又如此遥远。

先决条件

  • 立体声音频(不支持其他通道数量)
  • 支持的采样率:8000,11025,12000,16000,18900,22050,24000,32000,37800,4410048000,56000,64000,88200,96000,112000,128000,144000,176400,192000 (Hz)
  • 浮点编码(端序由您处理)

确实有些讽刺,大多数使用这个crate的用户可能实际上会使用ffmpeg将他们的音频转换为兼容的格式。

用法

use replaygain::ReplayGain;
let mut rg = ReplayGain::new(44100).unwrap();
let samples = []; // get data from somewhere
rg.process_frame(&samples);
let (gain, peak) = rg.finish();

示例

use std::{env, io, slice};
use std::io::Read;
use replaygain::ReplayGain;

fn main() {
    let mut args = env::args();
    args.next().unwrap(); // executable name
    let param1 = args.next().unwrap();

    let sample_rate = param1.parse().unwrap();
    let mut rg = ReplayGain::new(sample_rate).unwrap();

    // Just buffer everything up to keep things simple
    let mut input = Vec::new();
    {
        let stdin = io::stdin();
        let mut lock = stdin.lock();
        lock.read_to_end(&mut input).unwrap();
    }

    // Quick and dirty conversion
    let floats = unsafe { slice::from_raw_parts(&input[..] as *const _ as *const f32,
                                                input.len() / 4) };
    rg.process_samples(floats);

    let (gain, peak) = rg.finish();
    println!("track_gain = {} dB", gain);
    println!("track_peak = {}", peak);
}

无运行时依赖