用Python的sounddevice包來錄音

來源:互聯網
上載者:User

標籤:output   devices   聲音   元素   asa   div   out   tput   文章   

部落格中的文章均為meelo原創,請務必以連結形式註明本文地址

 

sounddevice是一個與Numpy相容的錄音以及播放聲音的包。

 

安裝sounddevice包

直接通過pip就能安裝。

pip install sounddevice

 

播放音樂

首先,用numpy產生440Hz的正弦波

import numpy as npfs = 44100 # Hzf = 440 # Hzlength = 5 #smyarray = np.arange(fs * length)myarray = np.sin(2 * np.pi * f / fs * myarray)

用sounddevice包播放音樂非常簡單。調用play函數來播放聲音,需要傳入需要播放聲音的波形,和採樣率。

import sounddevice as sdsd.play(myarray, fs)

 

查看聲音裝置

電腦上可能有多個聲音播放/錄製裝置,sounddevice會預設使用系統預設的裝置。調用query_devices()函數會顯示系統所有的聲音裝置。

sd.query_devices()

下面是我電腦上的聲音裝置,>標示為預設輸入裝置,<表示預設的輸出裝置,聲音裝置名稱之前是序號。預設的裝置也可以通過sd.default.device查看,返回的是一個列表,有兩個元素。第一個元素為預設的輸入裝置,第二個元素為預設的輸出裝置,裝置是用序號來表示的。

   0 Microsoft 聲音映射器 - Input, MME (2 in, 0 out)>  1 立體聲混音 (Realtek High Defini, MME (2 in, 0 out)   2 麥克風 (Realtek High Definition, MME (2 in, 0 out)   3 Microsoft 聲音映射器 - Output, MME (0 in, 2 out)<  4 擴音器 (Realtek High Definition, MME (0 in, 2 out)   5 主聲音捕獲驅動程式, Windows DirectSound (2 in, 0 out)   6 立體聲混音 (Realtek High Definition Audio), Windows DirectSound (2 in, 0 out)   7 麥克風 (Realtek High Definition Audio), Windows DirectSound (2 in, 0 out)   8 主聲音驅動程式, Windows DirectSound (0 in, 2 out)   9 擴音器 (Realtek High Definition Audio), Windows DirectSound (0 in, 2 out)  10 擴音器 (Realtek High Definition Audio), Windows WASAPI (0 in, 2 out)  11 立體聲混音 (Realtek High Definition Audio), Windows WASAPI (2 in, 0 out)  12 麥克風 (Realtek High Definition Audio), Windows WASAPI (2 in, 0 out)  13 Speakers (Realtek HD Audio output), Windows WDM-KS (0 in, 6 out)  14 立體聲混音 (Realtek HD Audio Stereo input), Windows WDM-KS (2 in, 0 out)  15 麥克風 (Realtek HD Audio Mic input), Windows WDM-KS (2 in, 0 out)  16 線路輸入 (Realtek HD Audio Line input), Windows WDM-KS (2 in, 0 out)

 

修改預設的輸入裝置為系統輸出聲音

系統預設的聲音輸入裝置是麥克風,如果需要錄製系統聲音則需要將聲音裝置切換成立體聲混音。有可能不存在立體聲混音這個選項,這時你需要升級你的音效卡驅動更新為比2013-5-10發布的6.0.10.1900更高的版本。

通過上面運行sd.query_devices()可以看到,我的電腦立體聲混音裝置序號為1。因此我需要設定:

sd.default.device[0] = 1

 

錄製系統聲音

錄音和聲音播放一樣簡單,這時你需要調用rec函數,傳入需要錄音的時間長度(採樣的點數),同時設定blocking=True表示錄音完成再返回,最後設定channels=1表示只錄製一個聲道。

fs = 44100 # Hzlength = 5 # srecording = sd.rec(frames=fs * length, samplerate=fs, blocking=True, channels=1)

最後使用scipy.io將音頻儲存為檔案。

from scipy.io import wavfilewavfile.write(‘recording.wav‘, fs, recording)

 

用Python的sounddevice包來錄音

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.