❶ 用python的tkinter開發界面 能不能加入聲音
當然可以播放音頻。之前排練一個話劇,有很多背景音效,在播放器中點,怕出錯。於是花了點時間用Python Tkinter寫了一個播放音頻的小軟體,打包成EXE文件可直接運行播放,很方便!
1首先定義一個按鈕:
這樣,點擊第一個左上Play按鈕,就可以播放對應的音頻了。
❷ 利用python和麥克風進行語音數據採集的流程
使用 Python 和麥克風進行語音數據採集的流程可能包括以下步驟:
安裝並導入相應的庫:需要安裝並導入 PyAudio 庫,這個庫可以讓你在 Python 中操作麥克風。
打開麥克風:使用 PyAudio 庫打開麥克風,並設置采樣率,采樣位數等參數。
開始錄音:使用 PyAudio 庫的 read 方法從麥克風中讀取語音數據。
存儲數據:使用 Python 的文件操作函數將讀取到的語音數據存儲到本地磁碟上。
關閉麥克風:使用 PyAudio 庫關閉麥克風。
處理數據:在結束採集之後可以對音頻數據進行處理,比如語音識別,語音合成,語音壓縮等.
注意:請確保在你的系統中已經安裝好了麥克風驅動,並且在 Python 代碼中有足夠的許可權訪問麥克風。
❸ Python程序運行結束如何加入提示音
#以下都是基於win xp+py 2.x;其他操作系統及py3.x沒試過...
1.電腦蜂鳴音:
print '\a'*7
#xp,py 2.6測試,這個絕對有BB...的聲音。。。
2.播放外部音頻文件
推薦外部模塊:winsound
代碼示例:
import winsound
PlaySound(sound)
#sound為wav文件名。
#還有其他播放其他多媒體格式的模塊,可自行google下。
3.文本語音發音
#這個我曾用文本語音來代替程序運行的文字提示,搭建平台:
winxp+MS語音庫+py_win32+py2.5(語音識別+文本發音)/py2.6(文本發音)+pyspeech(語音識別和發音模塊)/pytts(僅文本發音)
*pywin32:http://sourceforge.net/projects/pywin32/
*pyspeech:http://code.google.com/p/pyspeech/
*To download Speech SDK 5.1, Visit http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530; Only SpeechSDK51.exe and SpeechSDK51LangPack.exe are needed.
#如果僅僅是要發音:
speak('程序運行結束!')很簡單;僅需winxp+MS語音庫+py_win32+py2.5/py2.6
發音函數代碼可以自己寫!
❹ 如何用python讓樹莓派發出聲音
就是傳遞給函數raspberryTalk的參數。是不是很簡單呢?其實我們就是利用mplayer來播放從google翻譯傳來的真人發聲而已,就這么簡單。
此外,如果你想通過終端來調整揚聲器的音量,只需要輸入alsamixer,然後通過向上和向下箭頭來調整音量即可。 完整的代碼可以在這里找到。
❺ Python 簡單的擴音,音頻去噪,靜音剪切
數字信號是通過對連續的模擬信號采樣得到的離散的函數。它可以簡單看作一個以時間為下標的數組。比如,x[n],n為整數。比如下圖是一個正弦信號(n=0,1, ..., 9):
對於任何的音頻文件,實際上都是用這種存儲方式,比如,下面是對應英文單詞「skip」的一段信號(只不過由於點太多,筆者把點用直線連接了起來):
衡量數字信號的 能量(強度) ,只要簡單的求振幅平方和即可:
我們知道,聲音可以看作是不同頻率的正弦信號疊加。那麼給定一個聲音信號(如上圖),怎麼能夠知道這個信號在不同頻率區段上的強度呢?答案是使用離散傅里葉變換。對信號x[n], n=0, ..., N-1,通常記它的離散傅里葉變換為X[n],它是一個復值函數。
比如,對上述英文單詞「skip」對應的信號做離散傅里葉變換,得到它在頻域中的圖像是:
可以看到能量主要集中在中低音部分(約16000Hz以下)。
在頻域上,也可以計算信號的強度,因為根據Plancherel定理,有:
對於一般的語音信號,長度都至少在1秒以上,有時候我們需要把其中比如25毫秒的一小部分單獨拿出來研究。將一個信號依次取小段的操作,就稱作分幀。技術上,音頻分幀是通過給信號加一系列的 窗 函數 實現的。
我們把一種特殊的函數w[n],稱作窗函數,如果對所有的n,有0<=w[n]<=1,且只有有限個n使得w[n]>0。比如去噪要用到的漢寧窗,三角窗。
漢寧窗
三角窗
我們將平移的窗函數與原始信號相乘,便得到信號的「一幀」:
w[n+d]*x[n]
比如用長22.6毫秒的漢寧窗加到「skip」信號大約中間部位上,得到一幀的信號:
可見除一有限區間之外,加窗後的信號其他部分都是0。
對一幀信號可以施加離散傅里葉變換(也叫短時離散傅里葉變換),來獲取信號在這一幀內(通常是很短時間內),有關頻率-能量的分布信息。
如果我們把信號按照上述方法分成一幀一幀,又將每一幀用離散傅里葉變換轉換到頻域中去,最後將各幀在頻域的圖像拼接起來,用橫坐標代表時間,縱坐標代表頻率,顏色代表能量強度(比如紅色代表高能,藍色代表低能),那麼我們就構造出所謂 頻譜圖 。比如上述「skip」發音對應的信號的頻譜圖是:
(使用5.8毫秒的漢寧窗)
從若干幀信號中,我們又可以恢復出原始信號。只要我們適當選取窗口大小,以及窗口之間的平移距離L,得到 ..., w[n+2L], w[n+L], w[n], w[n-L], w[n-2L], ...,使得對k求和有:
從而簡單的疊加各幀信號便可以恢復出原始信號:
最後,注意窗函數也可以在頻域作用到信號上,從而可以起到取出信號的某一頻段的作用。
下面簡單介紹一下3種音效。
1. 擴音
要擴大信號的強度,只要簡單的增大信號的「振幅」。比如給定一個信號x[n],用a>1去乘,便得到聲音更大的增強信號:
同理,用系數0<a<1去乘,便得到聲音變小的減弱信號。
2. 去噪(降噪)
對於白噪音,我們可以簡單的用「移動平均濾波器」來去除,雖然這也會一定程度降低聲音的強度,但效果的確不錯。但是,對於成分較為復雜,特別是頻段能量分布不均勻的雜訊,則需要使用下面的 雜訊門 技術,它可以看作是一種「多帶通濾波器」。
這個特效的基本思路是:對一段雜訊樣本建模,然後降低待降噪信號中雜訊的分貝。
更加細節的說,是在信號的若干頻段f[1], ..., f[M]上,分別設置雜訊門g[1], ..., g[M],每個門都有一個對應的閾值,分別是t[1], ..., t[M]。這些閾值時根據雜訊樣本確定的。比如當通過門g[m]的信號強度超過閾值t[m]時,門就會關閉,反之,則會重新打開。最後通過的信號便會只保留下來比雜訊強度更大的聲音,通常也就是我們想要的聲音。
為了避免雜訊門的開合造成信號的劇烈變動,筆者使用了sigmoid函數做平滑處理,即雜訊門在開-關2個狀態之間是連續變化的,信號通過的比率也是在1.0-0.0之間均勻變化的。
實現中,我們用漢寧窗對信號進行分幀。然後對每一幀,又用三角窗將信號分成若干頻段。對雜訊樣本做這樣的處理後,可以求出信號每一頻段對應的閾值。然後,又對原始信號做這樣的處理(分幀+分頻),根據每一幀每一頻段的信號強度和對應閾值的差(diff = energy-threshold),來計算對應雜訊門的開合程度,即通過信號的強度。最後,簡單的將各頻段,各幀的通過信號疊加起來,便得到了降噪信號。
比如原先的「skip」語音信號頻譜圖如下:
可以看到有較多雜音(在高頻,低頻段,藍色部分)。採集0.25秒之前的聲音作為雜訊樣本,對信號作降噪處理,得到降噪後信號的頻譜圖如下:
可以明顯的看到大部分噪音都被清除了,而語音部分仍完好無損,強度也沒有減弱,這是「移動平均濾波器」所做不到的。
3. 靜音剪切
在對音頻進行上述降噪處理後,我們還可以進一步把多餘的靜音去除掉。
剪切的原理十分簡單。首先用漢寧窗對信號做分幀。如果該幀信號強度過小,則捨去該幀。最後將保留的幀疊加起來,便得到了剪切掉靜音部分的信號。
比如,對降噪處理後的「skip」語音信號做靜音剪切,得到的新信號的頻譜圖為: