看板 C_and_CPP 關於我們 聯絡資訊
現在在研究如何調整 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
LPH66:四捨五入吧? 和浮點數用 floor(some_double+0.5) 同理的樣子 03/17 01:31
loveme00835:就離散化囉 03/17 01:38
legnaleurc:了解,看來的確是四捨五入沒錯 03/17 02:08
purpose:用int做原本實數除法+四捨五入的工作?沒想到可以這樣寫 03/17 02:54
loveme00835:XD 這個用整數模擬浮點數的時候常用到阿 03/17 03:02
VictorTom:推整數來偷浮點數工作, 之前某些Color Convert會用XD 03/17 23:45