使用 Python 的 sounddevice 包录制系统声音
博客中的文章均為meelo原創(chuàng),請務(wù)必以鏈接形式注明本文地址
sounddevice是一個與Numpy兼容的錄音以及播放聲音的包。
安裝sounddevice包
直接通過pip就能安裝。
pip install sounddevice
播放音樂
首先,用numpy生成440Hz的正弦波
import numpy as np fs = 44100 # Hz f = 440 # Hz length = 5 #s myarray = np.arange(fs * length) myarray = np.sin(2 * np.pi * f / fs * myarray)
用sounddevice包播放音樂非常簡單。調(diào)用play函數(shù)來播放聲音,需要傳入需要播放聲音的波形,和采樣率。
import sounddevice as sd sd.play(myarray, fs)
查看聲音設(shè)備
計算機上可能有多個聲音播放/錄制設(shè)備,sounddevice會默認使用系統(tǒng)默認的設(shè)備。調(diào)用query_devices()函數(shù)會顯示系統(tǒng)所有的聲音設(shè)備。
sd.query_devices()
下面是我計算機上的聲音設(shè)備,>標(biāo)示為默認輸入設(shè)備,<表示默認的輸出設(shè)備,聲音設(shè)備名稱之前是序號。默認的設(shè)備也可以通過sd.default.device查看,返回的是一個列表,有兩個元素。第一個元素為默認的輸入設(shè)備,第二個元素為默認的輸出設(shè)備,設(shè)備是用序號來表示的。
0 Microsoft 聲音映射器 - Input, MME (2 in, 0 out) > 1 立體聲混音 (Realtek High Defini, MME (2 in, 0 out) 2 麥克風(fēng) (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 主聲音捕獲驅(qū)動程序, Windows DirectSound (2 in, 0 out) 6 立體聲混音 (Realtek High Definition Audio), Windows DirectSound (2 in, 0 out) 7 麥克風(fēng) (Realtek High Definition Audio), Windows DirectSound (2 in, 0 out) 8 主聲音驅(qū)動程序, 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 麥克風(fēng) (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 麥克風(fēng) (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)
修改默認的輸入設(shè)備為系統(tǒng)輸出聲音
系統(tǒng)默認的聲音輸入設(shè)備是麥克風(fēng),如果需要錄制系統(tǒng)聲音則需要將聲音設(shè)備切換成立體聲混音。有可能不存在立體聲混音這個選項,這時你需要升級你的聲卡驅(qū)動更新為比2013-5-10發(fā)布的6.0.10.1900更高的版本。
通過上面運行sd.query_devices()可以看到,我的計算機立體聲混音設(shè)備序號為1。因此我需要設(shè)置:
sd.default.device[0] = 1
錄制系統(tǒng)聲音
錄音和聲音播放一樣簡單,這時你需要調(diào)用rec函數(shù),傳入需要錄音的時長(采樣的點數(shù)),同時設(shè)置blocking=True表示錄音完成再返回,最后設(shè)置channels=1表示只錄制一個聲道。
fs = 44100 # Hz length = 5 # s recording = sd.rec(frames=fs * length, samplerate=fs, blocking=True, channels=1)
最后使用scipy.io將音頻保存為文件。
from scipy.io import wavfile
wavfile.write('recording.wav', fs, recording)
總結(jié)
以上是生活随笔為你收集整理的使用 Python 的 sounddevice 包录制系统声音的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32——SPI驱动SD卡
- 下一篇: ObjectARX常用类和函数