2014-04-24 49 views
0

我想知道在XNA Framework或其他任何方式中是否可以切断声音的开头。我记录声音通过麦克风和我处理声音的实例是这样的:剪切音效开始/沉默

流是这样定义的:

private MemoryStream stream = new MemoryStream(); 

是否有可能以某种方式修改流和削减声音的开始?

SoundEffect sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono); 
var soundInstance = sound.CreateInstance(); 

我将如何确定删除哪些字节?还是在某种程度上可以检测到“沉默”/“背景”,并在听到真人的声音之前自动将其切断?

谢谢

回答

1

您将不得不知道录制声音的确切WaveFormat格式。如果你有精确的WaveFormat(例如16位pcm单声道),你可以遍历所有的样本,检查它是否在特定的范围内。如果所有的样本都小于0.1,那么就是沉默。如果没有......播放数据。

+0

嘿,我知道采样率是16000hz,它是单声道的。我不确定这些位,但如果知道位的大小,如何遍历样本。我是否必须将它投射到其他物体以便于操作?或者我会只使用流? –

+1

基本上你必须先知道确切的格式。如果您知道这一点,您可以将流中的字节转换为样本。例如:如果它是16位pcm,则必须将2个字节对​​始终转换为16位整数。如果ieeefloat为32位,则必须将4个字节的对转换为范围从-1到1的浮点数。总而言之,当您获取样本时,可以查看它们的值。正如我之前所说。它们不会为零,但可以使用任何值,例如10%。如果它大于10%,则不存在“沉默”。 –