最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

何用Python實現(xiàn)一個 “系統(tǒng)聲音” 的實時律動掛件

 更新時間:2024年01月08日 11:51:40   作者:北橋蘇  
這篇文章將給大家介紹了如何用 Python 實現(xiàn)一個 “系統(tǒng)聲音” 的實時律動掛件,采集后直接實時地在電腦上繪制波形動畫,主要是用來作為 FL Studio 播放時的一個桌面小掛件,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下

前言

應(yīng)該是三年前,我用 Esp8266 和 ws2812 實現(xiàn)了一個音樂律動燈帶。就是電腦播放音樂時,燈帶會隨著系統(tǒng)內(nèi)部音樂播放的頻率而閃動不同色彩的燈珠。而當(dāng)時用來監(jiān)聽系統(tǒng)聲音的工具是一個博主提供的,除了實時采集聲音外還通過 UDP 傳遞數(shù)據(jù)到 Esp8266 上。

而這次,我就自己用 Python 實現(xiàn)一下,不過不傳數(shù)據(jù),就采集后直接實時地在電腦上繪制波形動畫,主要是用來作為 FL Studio 播放時的一個桌面小掛件。

環(huán)境

python3.8

pyaudio0.2.14

matplotlib

pyaudio 簡介

pyaudio 是一個跨平臺地音頻 I/O 庫,使用他可以在 Python 程序中進行播放,錄音和生成 wav 文件等。需要注意的是,如果要使用 pyaudio 時,python 的版本最好在 3.7 以上,不然 pip 安裝會報錯。因為以下例子是獲取系統(tǒng)內(nèi)部聲音,而 pyaudio 讀取的音頻流默認是麥克風(fēng),所以接下來介紹一下關(guān)于獲取的設(shè)備列表信息。

代碼獲取設(shè)備列表

# pyaudio實例
audio = pyaudio.PyAudio()
# 獲取設(shè)備總數(shù)
device_count = audio.get_device_count()
# 根據(jù)設(shè)備索引獲取設(shè)備詳細信息
for i in range(p.get_device_count()):
	devInfo = p.get_device_info_by_index(i)
	print(devInfo)

設(shè)備信息參數(shù)介紹

  • index: 設(shè)備的索引號,通常用于標(biāo)識系統(tǒng)中的設(shè)備順序。
  • structVersion: 結(jié)構(gòu)版本號,用于表示這個數(shù)據(jù)結(jié)構(gòu)的版本。
  • name: 設(shè)備的名稱,這里是 “Microsoft 聲音映射器 - Input”。
  • hostApi: 主 API 的標(biāo)識符,通常用于表示該設(shè)備屬于哪個 API 或系統(tǒng)。
  • maxInputChannels: 設(shè)備支持的最大輸入通道數(shù),這里是 2,表示設(shè)備支持 2 個輸入通道。
  • maxOutputChannels: 設(shè)備支持的最大輸出通道數(shù),這里為 0,表示該設(shè)備沒有輸出通道。
  • defaultLowInputLatency: 默認的低輸入延遲,以秒為單位,這里是 0.09 秒。
  • defaultLowOutputLatency: 默認的低輸出延遲,這里是 0.09 秒。
  • defaultHighInputLatency: 默認的高輸入延遲,這里是 0.18 秒。
  • defaultHighOutputLatency: 默認的高輸出延遲,這里是 0.18 秒。
  • defaultSampleRate: 默認的采樣率,這里是 44100.0 赫茲,這是 CD 質(zhì)量的音頻標(biāo)準(zhǔn)采樣率。

開始操作

開啟立體聲混音權(quán)限

打開電腦設(shè)置 - 系統(tǒng) - 聲音 - 管理聲音設(shè)備 - 立體聲混響,點擊啟用。

設(shè)置設(shè)備索引號

打開立體聲混音后,通過 pyaudio 獲取設(shè)備列表,找到帶有 “立體聲混音” 的名稱,和 hostApi 為 0 的,hostAPI = 0 表明是 MME 設(shè)備。然后拿到該設(shè)備索引號,打開音頻流時指定該內(nèi)錄設(shè)備序號。

def findInternalRecordingDevice(p):
    # 要找查的設(shè)備名稱中的關(guān)鍵字
    target = '立體聲混音'
    # 逐一查找聲音設(shè)備
    for i in range(p.get_device_count()):
        devInfo = p.get_device_info_by_index(i)
        print(devInfo)
        if devInfo['name'].find(target) >= 0 and devInfo['hostApi'] == 0:
            # print('已找到內(nèi)錄設(shè)備,序號是 ',i)
            return i
    print('無法找到內(nèi)錄設(shè)備!')
    return -1

全部代碼

import pyaudio
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import wave

FORMAT = pyaudio.paInt16
CHANNELS = 1  
RATE = 44100  
CHUNK = 4096  
# CHUNK = 1024  
WAVE_OUTPUT_FILENAME = 'audio_output.wav'

# 獲取內(nèi)錄設(shè)備序號,在windows操作系統(tǒng)上測試通過,hostAPI = 0 表明是MME設(shè)備
def findInternalRecordingDevice(p):
    # 要找查的設(shè)備名稱中的關(guān)鍵字
    target = '立體聲混音'
    # 逐一查找聲音設(shè)備
    for i in range(p.get_device_count()):
        devInfo = p.get_device_info_by_index(i)
        print(devInfo)
        if devInfo['name'].find(target) >= 0 and devInfo['hostApi'] == 0:
            # print('已找到內(nèi)錄設(shè)備,序號是 ',i)
            return i
    print('無法找到內(nèi)錄設(shè)備!')
    return -1

# Initialize PyAudio
audio = pyaudio.PyAudio()

# 這里input_device_index的2就是系統(tǒng)內(nèi)錄設(shè)備索引
stream = audio.open(input_device_index=2,
                    format=FORMAT,
                    channels=1,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

plt.ion()
fig, ax = plt.subplots()
x = np.arange(0, CHUNK)
line, = ax.plot(x, np.zeros(CHUNK))
ax.set_xlim(0, CHUNK)
ax.set_ylim(-32768, 32767)

wave_output_file = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wave_output_file.setnchannels(CHANNELS)
wave_output_file.setsampwidth(audio.get_sample_size(FORMAT))
wave_output_file.setframerate(RATE)

def update_plot(data):
    print(data)
    line.set_ydata(data)
    fig.canvas.draw()
    fig.canvas.flush_events()

def display_audio_waveform():
    while True:
        try:
            audio_data = np.frombuffer(stream.read(CHUNK), dtype=np.int16)
            # update_plot(audio_data*500)
            update_plot(audio_data)
            # wave_output_file.writeframes(audio_data)
        except KeyboardInterrupt:
            break

display_audio_waveform()

stream.stop_stream()
stream.close()
audio.terminate()

wave_output_file.close()
print('Audio saved to', WAVE_OUTPUT_FILENAME)

以上就是何用Python實現(xiàn)一個 “系統(tǒng)聲音” 的實時律動掛件的詳細內(nèi)容,更多關(guān)于Python實時律動掛件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實現(xiàn)修改Excel文件的元數(shù)據(jù)

    Python實現(xiàn)修改Excel文件的元數(shù)據(jù)

    這篇文章將通過使用Python、Openpyxl模塊以及wxPython庫,實現(xiàn)創(chuàng)建一個GUI界面來輸入元數(shù)據(jù),然后將這些元數(shù)據(jù)與Excel文件一起保存,感興趣的可以了解一下
    2023-04-04
  • 使用python獲取cpu每秒的使用率

    使用python獲取cpu每秒的使用率

    這篇文章主要介紹了使用python獲取cpu每秒的使用率,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Numpy數(shù)組的切片索引操作

    Numpy數(shù)組的切片索引操作

    本文主要介紹了Numpy數(shù)組的切片索引操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python中學(xué)習(xí)K-Means和圖片壓縮

    python中學(xué)習(xí)K-Means和圖片壓縮

    大家在python中會遇到關(guān)于K-Means和圖片壓縮的問題,我先通過本次文章學(xué)習(xí)一下基本原理吧。
    2017-11-11
  • 使用Python搭建虛擬環(huán)境的配置方法

    使用Python搭建虛擬環(huán)境的配置方法

    python 的虛擬環(huán)境可以為一個 python 項目提供獨立的解釋環(huán)境、依賴包等資源,既能夠很好的隔離不同項目使用不同 python 版本帶來的沖突,而且還能方便項目的發(fā)布。這篇文章主要介紹了使用Python虛擬環(huán)境,需要的朋友可以參考下
    2018-02-02
  • python獲取指定網(wǎng)頁上所有超鏈接的方法

    python獲取指定網(wǎng)頁上所有超鏈接的方法

    這篇文章主要介紹了python獲取指定網(wǎng)頁上所有超鏈接的方法,涉及Python使用urllib2模塊操作網(wǎng)頁抓取的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • python中Celery 異步任務(wù)隊列的高級用法

    python中Celery 異步任務(wù)隊列的高級用法

    Celery 是一個高效且可擴展的任務(wù)隊列框架,通過合理配置任務(wù)重試、分組工作流、優(yōu)先級管理以及監(jiān)控工具,可以顯著提升系統(tǒng)的可靠性和性能,感興趣的可以了解一下
    2025-09-09
  • Python?ChineseCalendar包主要類和方法詳解

    Python?ChineseCalendar包主要類和方法詳解

    ChineseCalendar?是一個?Python?包,用于獲取中國傳統(tǒng)日歷信息。這個包提供了中國農(nóng)歷、二十四節(jié)氣、傳統(tǒng)節(jié)日、黃歷等信息,這篇文章主要介紹了Python?ChineseCalendar包簡介,需要的朋友可以參考下
    2023-03-03
  • Python變量的作用域詳解

    Python變量的作用域詳解

    這篇文章主要為大家介紹了Python變量的作用域,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • selenium+PhantomJS爬取豆瓣讀書

    selenium+PhantomJS爬取豆瓣讀書

    這篇文章主要為大家詳細介紹了selenium+PhantomJS爬取豆瓣讀書,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論

怀集县| 龙陵县| 清涧县| 和静县| 夹江县| 始兴县| 民和| 小金县| 新民市| 敖汉旗| 东台市| 武宁县| 广宁县| 安仁县| 东平县| 正蓝旗| 根河市| 双柏县| 东乌珠穆沁旗| 杂多县| 项城市| 舟曲县| 永嘉县| 乌拉特后旗| 突泉县| 马龙县| 江油市| 米脂县| 罗山县| 北碚区| 西华县| 怀宁县| 榆林市| 河南省| 土默特左旗| 通江县| 太康县| 灵宝市| 安龙县| 贺兰县| 叙永县|