標籤: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包來錄音