#audio #pitch #speech #voice

bin+lib pyin

用Rust编写的Pyin音高检测算法

3个稳定版本

1.2.0 2024年7月21日
1.1.0 2024年7月21日
1.0.2 2022年4月3日

#229 in 算法

Download history 5/week @ 2024-07-12 184/week @ 2024-07-19 47/week @ 2024-07-26 5/week @ 2024-08-02

238 每月下载量
aus中使用

MIT 许可证

58KB
1K SLoC

用Rust编写的Pyin算法

Crates.io Version Docs.rs Crates.io Downloads

该包为音频信号的每一帧提供音高估计和一个概率,表明该帧是浊音区域。

该实现基于librosa。为了便于从Python + Numpy转换为Rust,实现是建立在ndarray包之上。

下载 & 运行

您可以从发布页面下载可执行二进制文件。

pyin <input_file> <output_npy_file> <fmin> <fmax> --frame_ms <frame length in miliseconds>

注意

  • 支持的音频文件:与Creak包相同。
    • 支持多通道音频文件。
  • 输出文件:npy文件包含输出ndarray,其形状为
    • 形状:(4, 输入音频中的通道数,帧数)
    • [0, :, :]: 时间戳 [秒]
    • [1, :, :]: f0数组 [Hz]
    • [2, :, :]: 浊音标志数组(浊音为1.0,非浊音为0.0)
    • [3, :, :]: 浊音概率数组
  • 如果使用"-"作为输出文件名,应用程序将输出数据发送到stdout。

构建 & 运行

您可以使用它作为可执行二进制文件和库(C共享库和Rust库)。构建时,您可以通过启用blas特性标志来使用BLAS。

作为可执行二进制文件

cargo run -F build-binary[,blas] --release <input_file> <output_npy_file> <fmin> <fmax> --frame_ms <frame length in miliseconds>

cargo build -F build-binary[,blas] --release
./target/release/pyin <input_file> <output_npy_file> <fmin> <fmax> --frame_ms <frame length in miliseconds>

示例:使用pYIN作为C共享库

示例在test/test.c中。要使用GCC构建和运行它,

./compile_test.sh [blas]
LD_LIBRARY_PATH=target/release ./test_pyin

使用pYIN作为Rust库

将以下内容添加到您的Cargo.toml

[dependencies]
pyin = "1.2.0"
# or, pyin = {version = "1.2.0", features = ["blas"]}

待办事项

  • 从stdio输入
  • 支持更多的命令行参数选项

依赖项

~16MB
~308K SLoC