[問題] 聲音的bit轉換。。

看板C_and_CPP作者 (啤酒肚)時間15年前 (2010/11/26 18:57), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/4 (看更多)
對聲音不是很清楚啊,還請大大指點: 現在有聲音 原為32 bit 想costdown為 16 bit ,甚至8 bit 請問程式要怎寫呢?? 我是假設原本聲音為 32bit ,可用int(DWORD)表式 16就是short(WORD) 所以 int input;/*輸入*/ short output;/*輸出 被cost down的結果*/ output = (short)( SHRT_MAX*((double)input/INT_MAX) ) 請問是這樣轉換的嗎 還有wave裡面的資料型態到底是signed還是unsigned啊 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.158.204

11/26 19:15, , 1F
把數值 右移 16 或是 24 bit
11/26 19:15, 1F

11/26 19:23, , 2F
右移不是把振幅小的給砍了? 而不是等比例縮放啊。。
11/26 19:23, 2F

11/26 19:38, , 3F
& 0xFFFF
11/26 19:38, 3F

11/26 19:40, , 4F
把在之前你應該先把 32bit的值除以 16bit的最大值65536
11/26 19:40, 4F
真的不是很懂啊。 32bit的最大值可以寫成 0xffffffff, 不過最大值不是 -INT_MAX嗎 還是聲音訊號是用unsigned ? 那我上面寫的 output = (short)( SHRT_MAX*((double)input/INT_MAX) ) 該怎麼修正呢? 還請釋疑 謝謝。 ※ 編輯: DrStein 來自: 58.115.143.194 (11/26 23:48)

11/27 21:48, , 5F
有人可以回答一下嗎 謝謝
11/27 21:48, 5F
文章代碼(AID): #1CxvAh5C (C_and_CPP)
文章代碼(AID): #1CxvAh5C (C_and_CPP)