[問題] PCM 的音量

看板C_and_CPP作者 (CA)時間14年前 (2011/03/17 01:21), 編輯推噓3(303)
留言6則, 5人參與, 最新討論串1/1
現在在研究如何調整 PCM 的音量(沒修好這門課 orz) 看到 FFmpeg 這麼寫: // int audio_volume = 256; // short * volp = 目前的 sample int v = ( ( *volp ) * audio_volume + 128 ) >> 8; if( v < -32768 ) v = -32768; if( v > 32767 ) v = 32767; *volp++ = v; 我想問的是,乘以 audio_volume 再除以 256 我可以理解 它假設 100% 是 256 (我猜是因為 65536 的平方根,short 的值域) 但它加的 128 是什麼意思? 是為了那 0.5 的精確度嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.248.119

03/17 01:31, , 1F
四捨五入吧? 和浮點數用 floor(some_double+0.5) 同理的樣子
03/17 01:31, 1F

03/17 01:38, , 2F
就離散化囉
03/17 01:38, 2F

03/17 02:08, , 3F
了解,看來的確是四捨五入沒錯
03/17 02:08, 3F

03/17 02:54, , 4F
用int做原本實數除法+四捨五入的工作?沒想到可以這樣寫
03/17 02:54, 4F

03/17 03:02, , 5F
XD 這個用整數模擬浮點數的時候常用到阿
03/17 03:02, 5F

03/17 23:45, , 6F
推整數來偷浮點數工作, 之前某些Color Convert會用XD
03/17 23:45, 6F
文章代碼(AID): #1DWF6aWW (C_and_CPP)