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

基于Qt的WAV音頻剪切軟件的實現

2021-04-13 04:38:36
中國新技術新產品 2021年2期

徐 晉

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

0 引言

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

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

1 軟件架構

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

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

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

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

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

2 軟件實現

2.1 WAV文件介紹

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

表1 WAV文件的基本格式

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

2.2 波形顯示模塊

2.2.1 時域幅度圖像繪制

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

2.2.2 時長坐標繪制

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

2.2.3 水平Slider的樣式管理

使用Qt自帶的QSlider來實現用水平Slider去表示當前顯示的幅度波形在全局幅度波形中的位置。QSlider總長度表示WAV文件的全長,滑塊長度表示當前可視范圍內的時長。通過設置QSlider的樣式表,可以控制滑塊的長度;調用QSlider的SetValue()函數可以設定滑塊的位置。

2.2.4 操作控制

按住鼠標左鍵拖拽可以實現選中的操作。需要重載鼠標按下事件(mousePressEvent)、鼠標移動事件(mouseMoveEvent)以及鼠標松開事件(mouseReleaseEvent)。按下鼠標左鍵時記錄按下點的位置坐標,拖拽時記錄下最新的位置坐標,松開鼠標左鍵視為完成拖拽操作,根據起始點與結束點生成選中區域。

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

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

2.3 播放控制模塊

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

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

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

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

2.4 音頻裁剪模塊

音頻裁剪模塊通過1個靜態函數來實現,靜態函數實際上是1個全局函數,不依賴1個類的對象,不創建對象也可以調用。靜態函數只能訪問類中靜態成員的變量。函數的4個輸入參數分別為待裁剪文件的絕對路徑、裁剪后文件的保存路徑、舍棄前段音頻文件的時長以及舍棄后段音頻文件的時長。函數中應當添加前后裁剪長度總和不得超過文件總長度的判斷條件。

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

2.5 音頻錄制模塊

QAudioInput類提供了1個接口,用于從音頻輸入設備中接收音頻數據。可以使用系統默認的音頻輸入設備來構建音頻輸入;也可以使用特定的QAudioDeviceInfo創建QAudioInput。創建音頻輸入時,還應該設定QAudioFormat用于確定錄制音頻的聲道數、采樣率以及采樣位數等參數。調用QAudioInput類的start()函數開始錄制,調用stop()函數結束錄制,并生成.raw格式的原始音頻文件。為.raw文件添加WAV的RIFF頭、數據類型標識符和格式塊,再另存為.wav格式就能得到WAV格式的錄音文件。格式塊中的聲道數、采樣率以及采樣位數等參數信息應當按照錄音文件的特征填寫。

3 結論

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

主站蜘蛛池模板: 日韩av电影一区二区三区四区 | 国产区成人精品视频| 欧美乱妇高清无乱码免费| 国产另类视频| 欲色天天综合网| 国产精品久久久久无码网站| 国产成人精品综合| 亚洲国产天堂久久九九九| 国产精品久久精品| 97视频精品全国在线观看| 成人免费视频一区| 免费无码AV片在线观看中文| 亚洲人成成无码网WWW| 国产成人精品视频一区二区电影 | 视频二区亚洲精品| 久久人搡人人玩人妻精品一| 欧美国产日韩一区二区三区精品影视| 乱人伦视频中文字幕在线| 国产精品黑色丝袜的老师| 国产情侣一区| 99ri精品视频在线观看播放| 欧美日韩精品一区二区在线线| 91美女在线| 国产精品网曝门免费视频| 成人小视频在线观看免费| www.亚洲天堂| 国产无遮挡猛进猛出免费软件| 日韩精品毛片| 免费观看亚洲人成网站| 国产在线一区视频| 孕妇高潮太爽了在线观看免费| 亚洲人成网站观看在线观看| 日韩a级片视频| 97久久精品人人做人人爽| 久久伊伊香蕉综合精品| 日本国产精品一区久久久| 国产小视频网站| 无码中文字幕精品推荐| 欧美激情第一区| 久久国产香蕉| 99在线视频精品| 国产18在线| 久久综合亚洲色一区二区三区| 亚洲无码视频喷水| 免费观看成人久久网免费观看| 狠狠色丁婷婷综合久久| aaa国产一级毛片| 精品福利视频网| 久久久久久高潮白浆| 国产在线观看91精品| 日韩精品一区二区三区免费在线观看| 日本黄网在线观看| 免费在线国产一区二区三区精品| 热久久国产| 亚洲日韩精品无码专区| 国产99精品视频| 小说区 亚洲 自拍 另类| 精品视频免费在线| 国产v精品成人免费视频71pao| 91精品久久久无码中文字幕vr| 亚洲美女AV免费一区| 国产十八禁在线观看免费| 精品无码一区二区三区电影| 在线精品视频成人网| 有专无码视频| 色综合天天综合| 国产精品一区在线观看你懂的| 一级一级特黄女人精品毛片| 9啪在线视频| 国产91九色在线播放| 国产自产视频一区二区三区| 亚洲欧美在线精品一区二区| 亚洲欧美日韩动漫| 国产在线拍偷自揄拍精品| 国产精品9| 婷婷色中文网| 中文字幕亚洲第一| 国产真实乱子伦视频播放| 亚洲国产日韩在线观看| 国产91色| 亚洲午夜福利在线| 午夜国产大片免费观看|