推 stool100:把數值 右移 16 或是 24 bit 11/26 19:15
→ DrStein:右移不是把振幅小的給砍了? 而不是等比例縮放啊。。 11/26 19:23
推 shuckmol:& 0xFFFF 11/26 19:38
→ shuckmol:把在之前你應該先把 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)
→ tropical72:拉到Note上面的圖,裡面的samples都是用hex表示,hex:無 11/28 01:17
→ tropical72:號數。所以你至少要先把samples buffer 都改 unsigned. 11/28 01:17
→ tropical72:至於你說要cost down. Y=AX+B,我看來不知除了除16之外 11/28 01:18
→ tropical72:還有什麼好方法可以解決.如果連續數值差異都在2^16-1之 11/28 01:19
→ tropical72:內的話,倒是有種方法可以試試.但對音效檔而已,這幾乎是 11/28 01:20
→ tropical72:不可能存在的事。 11/28 01:20
→ tropical72:另,除16我以為是等比例縮小,並非如您所說非等比例縮放. 11/28 01:23
→ DrStein:樓上 所以 只要 input>>16 就好了? 11/28 01:37
→ tropical72:專業的出現了,抱歉誘導了你 XD 11/28 01:46