2014-04-24 47 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%,則不存在「沉默」。 –