使用 Python 的 sounddevice 包錄製系統聲音

HOME

使用 Python 的 sounddevice 包錄製系統聲音

2017-03-12 / VIEWS: 12

博客中的文章均為meelo原創,請務必以鏈接形式註明本文地址

原文:https://hk.saowen.com/a/5ea76592448fa4f62a9dc727518ed6dd478f88c7f2189fc1eaa095b19ef9762d

 

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包播放音樂非常簡單。調用play函數來播放聲音,需要傳入需要播放聲音的波形,和採樣率。

import sounddevice as sd
sd.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 # 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)

 

關鍵詞:聲音 in out 設備 realtek windows audio 默認 high sounddevice

相關推薦:

DirectSound---輸出設備基本操作(枚舉、查詢等)

面向未來的建築可視化技術

QEMU 中音頻模擬如何工作

遊戲引擎重點

Microsoft releases new firmware update for Surface Book to improve sleep performance and more

Windows音頻SDK的發展歷程

WASAPI、DirectSound/DS、WaveOut、Kernel Streaming/KS

台式機上如何配置並使用蘋果iPhone的耳機麥克風 並且麥克風開啟降噪功能

第四百零七節,ffmpeg+pydub音頻處理

Santa Cruz 二代原型機上手體驗:最大的進步是鏡片和顯示器

meelo

Read more posts by this author.

Share this post
    掃文資訊 © 2017 / runtime 0.116162s / size: 5303published with  CoreCMS Alpha v0.1  CN |  TW |  HK
`sounddevice`是Python的一个库,用于音频录制、播放和实时处理。如果你想要使用它来录制音乐并保存到文件,可以按照以下步骤操作: 1. 首先,需要安装`sounddevice`库。如果尚未安装,可以通过pip来安装: ``` pip install sounddevice ``` 2. 导入必要的库: ```python import sounddevice as sd import numpy as np ``` 3. 设置录音参数,比如采样率(sampling rate)、帧长度(frames per buffer)和声道数: ```python fs = 44100 # 一般CD品质,可自定 duration = 5 # 记录时间,单位秒 nchannels = 2 if you_want_stereo else 1 ``` 4. 开始录制,并将数据存储到numpy数组中: ```python data = sd.rec(int(duration * fs), samplerate=fs, channels=nchannels) ``` 5. 确保录音完成后再停止: ```python sd.wait() ``` 6. 将numpy数组的数据保存为WAV文件: ```python from scipy.io.wavfile import write write('recording.wav', fs, data.T) # T用于转换单声道为立体声,若不需要则去掉 ``` 完整的示例代码: ```python import sounddevice as sd import numpy as np from scipy.io.wavfile import write # 参数设置 fs = 44100 duration = 5 nchannels = 2 # 可选参数,1 for mono, 2 for stereo # 开始录音 data = sd.rec(int(duration * fs), samplerate=fs, channels=nchannels) # 停止录音 sd.wait() # 保存为wav文件 write('recording.wav', fs, data.T) ``` 运行这段代码后,会有一个名为`recording.wav`的文件在当前目录下,记录了所录制的音乐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值