999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Qt的WAV音頻剪切軟件的實(shí)現(xiàn)

2021-04-13 04:38:36
中國新技術(shù)新產(chǎn)品 2021年2期

徐 晉

(中國船舶集團(tuán)第七一五研究所,浙江 杭州 310000)

0 引言

在研究水聲目標(biāo)時,由于研究人員不知道什么時間會出現(xiàn)特征音頻,所以就會對整個實(shí)驗(yàn)進(jìn)行全程錄音;這就會出現(xiàn)錄音時長較長且錄音文件較大的問題,為后續(xù)對目標(biāo)音頻的特征分析帶來困難。為了解決該問題,研究人員可以使用音頻編輯軟件對感興趣的音頻進(jìn)行裁剪后再做分析?,F(xiàn)在市面上已經(jīng)有了許多非常優(yōu)秀的商業(yè)音頻編輯軟件,例如Cool Edit等。但是由于軟件版權(quán)和系統(tǒng)環(huán)境的限制,就導(dǎo)致了在某些特定場景下無法使用該類軟件。通過運(yùn)用Qt的跨平臺特性,可以開發(fā)1款擁有自主知識產(chǎn)權(quán)的跨平臺音頻編輯軟件。該文主要討論了如何開發(fā)1款基于Qt的WAV音頻剪切軟件,從而解決前文中所提到的問題。

該軟件使用Qt Creator平臺進(jìn)行開發(fā)。Qt Creator是Qt推出的1款輕量級集成開發(fā)環(huán)境,它包括項(xiàng)目生成向?qū)?、高級的C++代碼編輯器、瀏覽文件及類的工具、集成了Qt Designer、Qt Assistant、Qt Linguist、圖形化的 GDB 調(diào)試前端,集成 qmake構(gòu)建工具等。Qt Creator具有跨平臺的特性,其開發(fā)的軟件可以在Windows、Linux、VxWork以及移動平臺上部署[1]。

1 軟件架構(gòu)

WAV音頻裁剪軟件的功能模塊主要分為波形顯示模塊、播放控制模塊、音頻剪切模塊以及音頻錄制模塊。

波形顯示模塊主要具備繪制音頻文件的時域幅度圖像、繪制時長坐標(biāo)、管理水平Slider的樣式以及操作控制等功能。

播放控制模塊主要具備載入音頻文件、控制音頻文件的播放以及控制媒體音量等功能。

音頻裁剪模塊實(shí)現(xiàn)了對剪切音頻文件的靜態(tài)參數(shù),該函數(shù)的4個參數(shù)分別是待裁剪文件的絕對路徑、裁剪后文件的保存路徑、舍棄前段音頻文件時長以及舍棄的后端音頻文件時長。

音頻錄制模塊主要具備音頻錄制以及控制音頻錄制的功能。最后將各個模塊整合成音頻剪切軟件,打通功能模塊之間的接口并調(diào)用,從而實(shí)現(xiàn)功能菜單欄。

2 軟件實(shí)現(xiàn)

2.1 WAV文件介紹

WAV為微軟公司開發(fā)的1種聲音文件格式,它符合RIFF文件的規(guī)范,可以用來保存Windows平臺的音頻信息資源,廣泛應(yīng)用于Windows平臺及其應(yīng)用程序。WAV文件通常使用聲道數(shù)、采樣頻率和采樣位數(shù)來表示聲音。采樣位數(shù)分為8位、16位和24位;聲道分為單聲道和立體聲,單聲道振幅數(shù)據(jù)為n×1的矩陣點(diǎn),立體聲為n×2的矩陣點(diǎn),采樣頻率一般有11025 Hz(11 kHz)、22050 Hz(22 kHz)和44100 Hz(44 kHz)3種[2]。WAV文件的基本格式見表1。

表1 WAV文件的基本格式

通過解析WAV文件可以獲取各個時刻的音頻振幅信息,也可以按照其格式編輯WAV文件,從而達(dá)到剪切的效果。

2.2 波形顯示模塊

2.2.1 時域幅度圖像繪制

自定義1個基于QWiget的波形顯示類WaveDisplay,重載其PainEvent()函數(shù)。在PainEvent()函數(shù)中調(diào)用QPainter的drawLine()函數(shù)繪制時域幅度圖像,幅度數(shù)據(jù)可以通過對WAV文件數(shù)據(jù)塊解析的方式獲得。根據(jù)WAV文件聲道數(shù)的不同,采用不同的繪制方式。為了支持波形圖像的縮放功能,在繪制時需要代入圖像的尺寸信息,關(guān)鍵代碼如下。

2.2.2 時長坐標(biāo)繪制

通過調(diào)用播放控制模塊的預(yù)留接口, 可以將WAV文件的時長信息精確到毫秒。繪制時長坐標(biāo)分為繪制文字和繪制標(biāo)尺線;使用QPainter的drawText()函數(shù)繪制文字,由于文字顯示的“xx:xx:xx:xxx”字符串較長,如果要讓字符在首部與尾部完整的顯示,就需要進(jìn)行左右搬移,這就會導(dǎo)致字符串之間的間隔不統(tǒng)一,因此在首部與尾部不繪制文字。使用QPainter的drawLine()函數(shù)繪制標(biāo)尺線,標(biāo)尺分為長橫線和短豎線;為了適應(yīng)縮放,長橫線與時域幅度圖像等寬;短豎線每繪制若干格就標(biāo)注1個刻度信息。需要注意的是,每一格坐標(biāo)的長度會隨著縮放比例的變化而變化,如果單格長度過長就會顯得坐標(biāo)不夠美觀;因此,時長坐標(biāo)格數(shù)應(yīng)該隨著縮放比例的變化而變化。在該軟件中,當(dāng)縮放比例小于5倍時,2個標(biāo)注之間繪制5格;當(dāng)縮放比例大于5倍時,2個標(biāo)注之間繪制10格。

2.2.3 水平Slider的樣式管理

使用Qt自帶的QSlider來實(shí)現(xiàn)用水平Slider去表示當(dāng)前顯示的幅度波形在全局幅度波形中的位置。QSlider總長度表示W(wǎng)AV文件的全長,滑塊長度表示當(dāng)前可視范圍內(nèi)的時長。通過設(shè)置QSlider的樣式表,可以控制滑塊的長度;調(diào)用QSlider的SetValue()函數(shù)可以設(shè)定滑塊的位置。

2.2.4 操作控制

按住鼠標(biāo)左鍵拖拽可以實(shí)現(xiàn)選中的操作。需要重載鼠標(biāo)按下事件(mousePressEvent)、鼠標(biāo)移動事件(mouseMoveEvent)以及鼠標(biāo)松開事件(mouseReleaseEvent)。按下鼠標(biāo)左鍵時記錄按下點(diǎn)的位置坐標(biāo),拖拽時記錄下最新的位置坐標(biāo),松開鼠標(biāo)左鍵視為完成拖拽操作,根據(jù)起始點(diǎn)與結(jié)束點(diǎn)生成選中區(qū)域。

調(diào)用setContextMenuPolicy(Qt::ActionsContextMenu)函數(shù)設(shè)置菜單按照默認(rèn)方式彈出即右鍵彈出。在有選中區(qū)域的情況下單擊鼠標(biāo)右鍵,再單擊另存為按鈕就可以調(diào)用音頻裁剪模塊對選中區(qū)域進(jìn)行裁剪。

重載波形顯示模塊的鼠標(biāo)滾輪事件(wheelEvent)可以實(shí)現(xiàn)對鼠標(biāo)滾輪的操作。滾動滾輪調(diào)整可視窗口的前后位置;按住Ctrl鍵時,滾動滾輪調(diào)整縮放比例,縮放比例最小為1.0即不做縮放。

2.3 播放控制模塊

Qt為音視頻的播放和控制、相機(jī)拍攝以及收音機(jī)等多媒體應(yīng)用提供了強(qiáng)大的支持。Qt5使用了全新的Qt Multimedia模塊來實(shí)現(xiàn)多媒體的功能,Qt4中用來實(shí)現(xiàn)多媒體功能的Phonon模塊已經(jīng)被移除。該軟件使用Qt Multimedia模塊中的QMediaPlayer類來實(shí)現(xiàn)音頻的播放。QMediaPlayer類提供了一些接口函數(shù)來控制音頻播放,例如paly()、pause()以及stop()等。

播放控制模塊包括界面上的控制按鈕、播放進(jìn)度條以及音量條與時間信息的顯示。

新建類型為QMediaPlayer的指針,使用SetMedia()函數(shù)為其設(shè)置待播放的WAV文件。讀取WAV 的時長信息,并使用該信息繪制時長坐標(biāo)與設(shè)置進(jìn)度條。調(diào)用play()函數(shù)開始播放WAV文件。建立1個執(zhí)行周期為50 ms的計時器,每當(dāng)計時器完成1輪計時就可以獲取播放進(jìn)度,并使用播放進(jìn)度在波形顯示模塊繪制進(jìn)度標(biāo)識線以及更新播放時間的信息。根據(jù)播放的情況對播放按鈕設(shè)置不同的圖標(biāo)。

音量控制使用SetVolume()函數(shù),設(shè)定范圍在0音量~100音量之間,0表示靜音;根據(jù)靜音的情況為音量按鈕設(shè)置不同的圖標(biāo)。

2.4 音頻裁剪模塊

音頻裁剪模塊通過1個靜態(tài)函數(shù)來實(shí)現(xiàn),靜態(tài)函數(shù)實(shí)際上是1個全局函數(shù),不依賴1個類的對象,不創(chuàng)建對象也可以調(diào)用。靜態(tài)函數(shù)只能訪問類中靜態(tài)成員的變量。函數(shù)的4個輸入?yún)?shù)分別為待裁剪文件的絕對路徑、裁剪后文件的保存路徑、舍棄前段音頻文件的時長以及舍棄后段音頻文件的時長。函數(shù)中應(yīng)當(dāng)添加前后裁剪長度總和不得超過文件總長度的判斷條件。

使用fopen()函數(shù)讀取待剪裁WAV文件,并將WAV文件的RIFF頭、數(shù)據(jù)類型標(biāo)識符以及格式塊等信息存入本地定義的結(jié)構(gòu)。計算前后裁剪量后就可以得到裁剪后文件的大小。將裁剪后的文件大小填入之前保存的WAV文件的RIFF頭與格式塊,使用fwrite()函數(shù)將修改后的WAV文件的RIFF頭與格式塊寫入新的WAV文件,最后寫入裁剪后的數(shù)據(jù);具體實(shí)現(xiàn)代碼如下。

2.5 音頻錄制模塊

QAudioInput類提供了1個接口,用于從音頻輸入設(shè)備中接收音頻數(shù)據(jù)??梢允褂孟到y(tǒng)默認(rèn)的音頻輸入設(shè)備來構(gòu)建音頻輸入;也可以使用特定的QAudioDeviceInfo創(chuàng)建QAudioInput。創(chuàng)建音頻輸入時,還應(yīng)該設(shè)定QAudioFormat用于確定錄制音頻的聲道數(shù)、采樣率以及采樣位數(shù)等參數(shù)。調(diào)用QAudioInput類的start()函數(shù)開始錄制,調(diào)用stop()函數(shù)結(jié)束錄制,并生成.raw格式的原始音頻文件。為.raw文件添加WAV的RIFF頭、數(shù)據(jù)類型標(biāo)識符和格式塊,再另存為.wav格式就能得到WAV格式的錄音文件。格式塊中的聲道數(shù)、采樣率以及采樣位數(shù)等參數(shù)信息應(yīng)當(dāng)按照錄音文件的特征填寫。

3 結(jié)論

通過該文所論述的方法,可以開發(fā)1款基于Qt的WAV音頻剪切軟件。該軟件主要用于解決研究人員在研究過程中遇到的WAV音頻文件過大和時長過長等問題。該軟件利用了Qt的跨平臺特性,可以在多種平臺上運(yùn)行。開發(fā)該軟件的最初目的就是為了解決研究人員現(xiàn)階段所遇到的問題,因此難免存在適應(yīng)性窄以及界面不夠美觀等問題,未來可以繼續(xù)對該軟件進(jìn)行迭代優(yōu)化,添加更多功能,例如支持多種音頻文件格式、添加一系列降噪濾波算法、音頻的插入以及編輯等。

主站蜘蛛池模板: 久久国产精品波多野结衣| 精品视频免费在线| 国产精品刺激对白在线| 日韩欧美91| 国产午夜福利亚洲第一| 国产综合日韩另类一区二区| 欧美一级爱操视频| 亚洲三级成人| 亚洲综合18p| 国产福利免费在线观看| 99久久精品视香蕉蕉| 日韩欧美中文在线| WWW丫丫国产成人精品| 国产JIZzJIzz视频全部免费| AⅤ色综合久久天堂AV色综合| 欧美性猛交一区二区三区| 麻豆精品在线视频| 免费精品一区二区h| 亚洲有码在线播放| 国产在线精彩视频论坛| 麻豆国产在线观看一区二区| 波多野结衣久久高清免费| 在线网站18禁| 国产亚洲精久久久久久无码AV| 91久久精品国产| 国产欧美在线观看一区| 乱系列中文字幕在线视频| 久久精品视频一| 欧美午夜网站| 三上悠亚精品二区在线观看| 91av成人日本不卡三区| 99热这里只有精品免费国产| 久久国产精品波多野结衣| 超清无码一区二区三区| 午夜欧美理论2019理论| 欧美黄网在线| 国产成人综合久久精品下载| 99热国产这里只有精品9九| 婷婷六月综合| 免费无码AV片在线观看国产| 午夜一区二区三区| 国产日韩欧美中文| 曰韩人妻一区二区三区| 午夜无码一区二区三区在线app| 中文字幕资源站| 免费国产好深啊好涨好硬视频| 国产熟睡乱子伦视频网站| 97色婷婷成人综合在线观看| 美女无遮挡免费网站| 国产色偷丝袜婷婷无码麻豆制服| 手机成人午夜在线视频| 在线视频亚洲欧美| 国产a网站| 色偷偷一区二区三区| 色亚洲成人| 国产中文一区a级毛片视频| 国产制服丝袜91在线| 亚洲国产天堂久久九九九| 亚洲三级网站| 中文字幕66页| 制服丝袜在线视频香蕉| 亚洲欧洲日韩综合色天使| 在线欧美日韩| 六月婷婷精品视频在线观看| 亚洲乱码在线播放| 超清无码一区二区三区| 最新精品国偷自产在线| 国产精品久久久久鬼色| 日韩在线观看网站| 青青久视频| 亚洲熟女偷拍| 国产一二视频| 久久这里只有精品免费| 国产欧美在线| 久久国产精品嫖妓| 欧美第九页| 亚洲精品卡2卡3卡4卡5卡区| 1级黄色毛片| 日韩精品欧美国产在线| 欧美不卡视频一区发布| 欧美一区精品| 亚洲大学生视频在线播放|