【问题标题】:Cut beginning of a sound effect / silence剪切声音效果/静音的开头
【发布时间】:2014-04-24 10:45:38
【问题描述】:

我想知道是否可以在 XNA Framework 或任何其他方式中剪切声音的开头。我通过麦克风录制声音,我正在处理这样的声音实例:

流定义如下:

private MemoryStream stream = new MemoryStream();

是否有可能以某种方式修改流并剪切声音的开头?

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

如何确定要删除的字节?或者是否有可能检测到“沉默”/“背景”并在听到真实人的声音之前自动将其删除?

谢谢

【问题讨论】:

    标签: c# audio windows-phone-8 xna xna-4.0


    【解决方案1】:

    您必须知道所录制声音的确切 WaveFormat。如果您有确切的 WaveFormat(例如 16 位 pcm 单声道),您可以遍历所有样本,检查它是否在特定范围内。例如,如果所有样本都小于 0.1,则为静音。如果没有...播放数据。

    【讨论】:

    • 嘿,我知道采样率为 16000hz 并且是单声道的。我不确定这些位,但如果您知道位大小,您将如何遍历样本。我是否必须将其转换为其他对象以便于操作?还是我只使用流?
    • 基本上你必须先知道确切的格式。如果您知道这一点,您可以将流中的字节转换为样本。例如:如果它是 16 位 pcm,您必须始终将 2 个字节对转换为 16 位整数。如果它是 ieeefloat 32 位,则必须将 4 字节对转换为范围从 -1 到 1 的浮点数。总而言之,当您获得样本后,您可以查看它们的值。正如我之前所说。它们不会为零,但您可以使用任何值,例如 10%。如果声音大于 10%,则表示没有“沉默”。
    猜你喜欢
    • 2012-10-20
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多