欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

環(huán)境

python3.8

pyaudio0.2.14

matplotlib

pyaudio 簡(jiǎn)介

pyaudio 是一個(gè)跨平臺(tái)地音頻 I/O 庫(kù),使用他可以在 Python 程序中進(jìn)行播放,錄音和生成 wav 文件等。需要注意的是,如果要使用 pyaudio 時(shí),python 的版本最好在 3.7 以上,不然 pip 安裝會(huì)報(bào)錯(cuò)。因?yàn)橐韵吕邮谦@取系統(tǒng)內(nèi)部聲音,而 pyaudio 讀取的音頻流默認(rèn)是麥克風(fēng),所以接下來(lái)介紹一下關(guān)于獲取的設(shè)備列表信息。

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

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

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

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

開(kāi)始操作

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

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

設(shè)置設(shè)備索引號(hào)

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

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è)備,序號(hào)是 ',i)
            return i
    print('無(wú)法找到內(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è)備序號(hào),在windows操作系統(tǒng)上測(cè)試通過(guò),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è)備,序號(hào)是 ',i)
            return i
    print('無(wú)法找到內(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實(shí)現(xiàn)一個(gè) “系統(tǒng)聲音” 的實(shí)時(shí)律動(dòng)掛件的詳細(xì)內(nèi)容,更多關(guān)于Python實(shí)時(shí)律動(dòng)掛件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 常用的基礎(chǔ)函數(shù)

    python 常用的基礎(chǔ)函數(shù)

    這篇文章主要介紹了python 77種常用的基礎(chǔ)函數(shù),學(xué)習(xí)python的朋友可以收藏一下,簡(jiǎn)單了解一下,方便后期使用
    2018-07-07
  • 使用Mac時(shí)psycopg2導(dǎo)入PyCharm失敗的解決

    使用Mac時(shí)psycopg2導(dǎo)入PyCharm失敗的解決

    這篇文章主要介紹了使用Mac時(shí)psycopg2導(dǎo)入PyCharm失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識(shí)解讀

    利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識(shí)解讀

    這篇文章主要介紹了利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識(shí)解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 為什么相對(duì)PHP黑python的更少

    為什么相對(duì)PHP黑python的更少

    在本篇內(nèi)容里小編給各位整理了關(guān)于為什么相對(duì)PHP黑python的更少的原因和知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-06-06
  • python高階函數(shù)使用教程示例

    python高階函數(shù)使用教程示例

    這篇文章主要為大家介紹了python高階函數(shù)使用教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python的裝飾器詳情介紹

    Python的裝飾器詳情介紹

    這篇文章主要介紹了Python的裝飾器詳情,主要介紹裝飾器定以、調(diào)用方式等相關(guān)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-03-03
  • TensorFlow 多元函數(shù)的極值實(shí)例

    TensorFlow 多元函數(shù)的極值實(shí)例

    今天小編就為大家分享一篇TensorFlow 多元函數(shù)的極值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python PaddleSpeech實(shí)現(xiàn)嬰兒啼哭識(shí)別

    python PaddleSpeech實(shí)現(xiàn)嬰兒啼哭識(shí)別

    這篇文章主要為大家介紹了python PaddleSpeech實(shí)現(xiàn)嬰兒啼哭識(shí)別操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python文本的藝術(shù)字符串處理技巧掌握

    Python文本的藝術(shù)字符串處理技巧掌握

    這篇文章主要為大家介紹了Python文本的藝術(shù)字符串處理技巧掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python實(shí)現(xiàn)多線程抓取知乎用戶

    python實(shí)現(xiàn)多線程抓取知乎用戶

    本文給大家分享的是如何使用Python實(shí)現(xiàn)多線程抓取知乎用戶的思路以及代碼,非常的詳細(xì),作者使用本程序成功抓取到了百萬(wàn)用戶,有需要的小伙伴可以參考下
    2016-12-12

最新評(píng)論