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

看板C_and_CPP作者 (啤酒肚)時間15年前 (2010/11/28 01:03), 編輯推噓0(0010)
留言10則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《DrStein (啤酒肚)》之銘言: : 對聲音不是很清楚啊,還請大大指點: : 現在有聲音 原為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,
把數值 右移 16 或是 24 bit
11/26 19:15

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

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

11/26 19:40,
把在之前你應該先把 32bit的值除以 16bit的最大值65536
11/26 19:40
真的不是很懂啊。 32bit的最大值可以寫成 0xffffffff, 不過最大值不是 -INT_MAX嗎 0xffffffff不是-1這數字嗎? 還是聲音訊號是用unsigned ? 那我上面寫的 output = (short)( SHRT_MAX*((double)input/INT_MAX) ) 該怎麼修正呢? & 0xFFFF 為何要按位,與1做與操作啊。。這什麼意思呢? 還請釋疑 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.143.194 ※ 編輯: DrStein 來自: 58.115.143.194 (11/28 01:05)

11/28 01:16, , 1F
http://ppt.cc/AL56 你第一個問題裡面就有跡可尋了.
11/28 01:16, 1F

11/28 01:17, , 2F
拉到Note上面的圖,裡面的samples都是用hex表示,hex:無
11/28 01:17, 2F

11/28 01:17, , 3F
號數。所以你至少要先把samples buffer 都改 unsigned.
11/28 01:17, 3F

11/28 01:18, , 4F
至於你說要cost down. Y=AX+B,我看來不知除了除16之外
11/28 01:18, 4F

11/28 01:19, , 5F
還有什麼好方法可以解決.如果連續數值差異都在2^16-1之
11/28 01:19, 5F

11/28 01:20, , 6F
內的話,倒是有種方法可以試試.但對音效檔而已,這幾乎是
11/28 01:20, 6F

11/28 01:20, , 7F
不可能存在的事。
11/28 01:20, 7F

11/28 01:23, , 8F
另,除16我以為是等比例縮小,並非如您所說非等比例縮放.
11/28 01:23, 8F

11/28 01:37, , 9F
樓上 所以 只要 input>>16 就好了?
11/28 01:37, 9F

11/28 01:46, , 10F
專業的出現了,抱歉誘導了你 XD
11/28 01:46, 10F
文章代碼(AID): #1CyJduiH (C_and_CPP)
文章代碼(AID): #1CyJduiH (C_and_CPP)