Audio 开始播放时rodio中的连接噪波

Audio 开始播放时rodio中的连接噪波,audio,rust,Audio,Rust,我正在使用以下代码复制某些文件: extern crate rodio; use std::io::BufReader; use std::time::Duration; //.. let endpoint = rodio::get_default_endpoint().unwrap(); let file = std::fs::File::open("./sound/beep2.wav").unwrap(); let mut beep1 = rodio::play_once(&end

我正在使用以下代码复制某些文件:

extern crate rodio;
use std::io::BufReader;
use std::time::Duration;
//..
let endpoint = rodio::get_default_endpoint().unwrap();

let file = std::fs::File::open("./sound/beep2.wav").unwrap();
let mut beep1 = rodio::play_once(&endpoint, BufReader::new(file)).unwrap();

beep1.set_volume(0.1);
开始播放时,我会听到一种类似于开始时连接噪音的噪音。此示例文件()在普通播放器程序中播放时没有噪音

我创建了替代代码,但噪音保持不变:

//test duracion inicio

use rodio::Sink;
use rodio::Source;

let mut sink = Sink::new(&endpoint);
let source = rodio::Decoder::new(BufReader::new(file)).unwrap();

sink.append(source);
sink.set_volume(0.01);

我做错了什么?如何在复制开始时解决此噪声?

问题是您正在调用
set\u volume(0.1)
,这会导致波形不连续。理论上,这会导致扬声器锥体瞬间移动,听起来像砰的一声或咔嗒的一声。如果您删除
set\u volume
行,它应该可以解决您的问题。

如果我不得不猜测。。。我想说的是,您正在播放的soundifle的第一个样本值可能不是零。这会导致扬声器“瞬间”从0跳到该值的任何值。至于为什么它在以其他方式播放时不这样做:我可以想象,无论您使用什么方式播放文件,都会在播放开始时应用非常小的交叉淡入,以避免播放中出现此类弹出和单击。