qt double 相减不为0_Qt音视频开发25-ffmpeg音量设置
一、前言
音視頻的播放、關(guān)閉、暫停、繼續(xù)這幾個(gè)基本功能,絕大部分人都是信手拈來(lái)的搞定,關(guān)于音量調(diào)節(jié)還是稍微饒了下彎彎,最開(kāi)始打算采用各個(gè)系統(tǒng)的api來(lái)處理,坐下來(lái)發(fā)現(xiàn)不大好,系統(tǒng)的支持不完美,比如有些api限定了win7,而xp確沒(méi)有,而且這玩意控制的是全局的音量,不好,大部分時(shí)候需要控制的是當(dāng)前播放的媒體的音量,估計(jì)vlc和mpv這類播放器在處理聲音的時(shí)候也有過(guò)如此的場(chǎng)景分析,后面還測(cè)試過(guò)用ffmpeg的filter濾鏡代碼控制音頻數(shù)據(jù)的分貝值,比較繁瑣,代碼量也大,不方便初學(xué)者學(xué)習(xí),最后靈機(jī)一動(dòng)去找QAudioOutput的函數(shù)看下有沒(méi)有volume的函數(shù),果真有臥槽,原來(lái)自帶了,對(duì)Qt的愛(ài)慕之情又猛增了幾十分,這里要注意的是QAudioOutput的音量值參數(shù)是0-1的范圍double類型,而不是像vlc等播放器是0-100的值,所以需要自行轉(zhuǎn)換。 如果搞定了音量的控制,那靜音的設(shè)置當(dāng)然分分鐘啦,無(wú)非就是記住之前的音量,然后將音量設(shè)置0,取消靜音的時(shí)候自動(dòng)設(shè)置音量為最后記住的音量值即可。
二、功能特點(diǎn)
三、效果圖
四、相關(guān)站點(diǎn)
五、核心代碼
bool FFmpegThread::getMute() {return (getVolume() == 0); }int volume = 0; void FFmpegThread::setMute(bool mute) {//先記住之前的音量以便重新設(shè)置if (mute) {volume = getVolume();setVolume(0);} else {setVolume(volume);} }int FFmpegThread::getVolume() {if (this->isRunning()) { #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))return audioOutput->volume() * 100; #endif} else {return 0;} }void FFmpegThread::setVolume(int volume) {if (this->isRunning()) { #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))//查閱手冊(cè)說(shuō)范圍值是 0.0 - 1.0audioOutput->setVolume((float)volume / 100.0); #endif} }總結(jié)
以上是生活随笔為你收集整理的qt double 相减不为0_Qt音视频开发25-ffmpeg音量设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sqlmap自动扫描注入点_SQLmap
- 下一篇: lstm中look_back的大小选择_