好吧,不能拿出一個好主題。通過此代碼更改音頻採樣率當前更改位深度?
重點是,我有一個代碼,我得到了幫助,將位深度從32位改爲16位,不知道它是如何工作的,但我認爲它只是刪除了其他所有位,沒有任何幻想。
所以如果可以用代碼來做到這一點,應該可以改變採樣率。 另外我不想在這裏看到什麼奇怪的東西,因爲它更多的是用於調試,我只是想把它變成一些其他的採樣率,它不一定是「重採樣」。
例如,如果音頻是48khz,並且在播放到47khz時重新採樣它,它聽起來不會像它仍然認爲它是48khz一樣,這意味着它會播放得更慢。
換句話說,我打算用它來以非常簡單的方式改變音頻的速度。
這是更改位深度的代碼,我希望可以對此重用。
Int32 bytesrecorded = e.BytesRecorded;
byte[] newArray16Bit = new byte[bytesrecorded/2];
fixed (byte* sourcePtr = e.Buffer)
fixed (byte* targetPtr = newArray16Bit)
{
float* sourceTyped = (float*)sourcePtr;
short* targetTyped = (short*)targetPtr;
Int32 count = bytesrecorded/4;
for (int i = 0; i < count; i++)
{
targetTyped[i] = (Int16)(sourceTyped[i] * Int16.MaxValue);
}
}
e.Bytesrecorded
=音頻緩衝區的大小,
e.Buffer
=實際緩衝
正如我不完全理解這一點,我只是看一下/ 2,並假設它只是分歧長度的大小,那麼/ 4部分將移動字節,使其適合。
雖然我不知道如何使用它來改變採樣率,因爲這只是字節的移動,它不應該很難爲採樣率做些什麼。
感謝
更改位深和採樣率是完全不同的過程。此代碼不會幫助你。 –
好的,很高興知道這一點。 不存在類似的方法嗎? 正如我只是想減少採樣率,這將意味着,以某種方式刪除一些字節。 – Zerowalker
不,你不只是刪除字節。我在這個問題的答案中詳細討論了兩個:http://stackoverflow.com/questions/15087668/how-to-convert-pcm-samples-in-byte-array-as-floating-point-numbers-in範圍 –