国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一起用Python做個自動化彈鋼琴腳本,我竟然彈出了《天空之城》!

Kylin_Mountain / 2795人閱讀

摘要:突然靈機一動,能不能用自動化腳本彈奏一曲美妙的鋼琴曲呢今天就一起帶大家如何用實現自動化彈出一首天空之城首先一起來看看最終實現的演奏效果下面,我們就開始介紹如何實現這個自動化彈鋼琴腳本的。

前言

小時候一直有一個想成為鋼琴家的夢想,最近在網上看到了一個開源的鋼琴演奏網頁autopiano,可以支持鍵盤按鍵彈奏、鼠標點擊彈奏。

突然靈機一動,能不能用Python自動化腳本彈奏一曲美妙的鋼琴曲呢?今天就一起帶大家如何用Python實現自動化彈出一首《天空之城》!

首先一起來看看最終實現的演奏效果:

下面,我們就開始介紹如何實現這個自動化彈鋼琴腳本的。

一、核心功能設計

總體的實現相對是比較簡單的,主要分為以下4步實現:

  • 實現演奏函數,通過手指及時間間隔模擬彈鋼琴
  • 添加各個演奏旋律線程,通過多線程模擬雙手演奏效果
  • 確定需要演奏的鋼琴樂譜,確認主旋律、和弦、右手拇指、右手食指、左手拇指、左手食指
  • 自動切換打開鍵盤鋼琴(auto piano)網頁,通過鍵盤鍵入實現模擬演奏功能

二、實現步驟

1. 演奏函數

我們首先需要模擬出演奏時,各個按鍵的停頓間隔時間,實現鍵盤控制,通過傳入的音樂樂符和時間實現各個現場手指的演奏。核心代碼如下:

# author:Dragon少年def play_piano(music, keytime):    for n in music:        if n.isupper():            keyboard.press(Key.shift)            time.sleep(0.001)            keyboard.press(n.lower())            time.sleep(keytime - 0.001)            keyboard.release(n.lower())            keyboard.release(Key.shift)        elif n == "|" or n == ")":            pass        elif n in "!@$%^*(":            keyboard.press(Key.shift)            time.sleep(0.001)            keyboard.press("1245689"["!@$%^*(".index(n)])            time.sleep(keytime - 0.001)            keyboard.release("1245689"["!@$%^*(".index(n)])            keyboard.release(Key.shift)        elif n != " " and n != "-":            keyboard.press(n)            if music.index(n) != len(music) - 1 and music[music.index(n) + 1] == ")":                time.sleep(keytime / 2)            else:                time.sleep(keytime)            keyboard.release(n)        elif n == "-":            time.sleep(2 * keytime)        else:            time.sleep(keytime)

2. 添加演奏旋律多線程

因為整首音樂彈奏的時候,有時候需要雙手同時控制演奏,所以我們需要通過線程模擬出主旋律、和弦、右手拇指、右手食指、左手拇指、左手食指各個部分的演奏效果,通過多線程開啟上面的演奏函數。核心代碼如下:

# author:Dragon少年def thread_play(play_piano, keytime, right="", left="", rightThumb="", rightIndexFinger="", leftThumb="",                leftIndexFinger=""):    # 運行線程    rt = threading.Thread(target=play_piano, args=(right, keytime))  # 主旋律線程    lt = threading.Thread(target=play_piano, args=(left, keytime))  # 和弦線程    rtt = threading.Thread(target=play_piano, args=(rightThumb, keytime))  # 右手拇指線程    rift = threading.Thread(target=play_piano, args=(rightIndexFinger, keytime))  # 右手食指線程    ltt = threading.Thread(target=play_piano, args=(leftThumb, keytime))  # 左手拇指線程    lift = threading.Thread(target=play_piano, args=(leftIndexFinger, keytime))  # 右手食指線程

3. 手指演奏曲譜

雙手彈琴那么就需要確認好整首音樂中,各個手指的彈奏節奏和彈奏內容。我們需要模擬出各個階段需要的演奏音樂并拼出整首音樂。下面就以《天空之城》為例,核心代碼如下:

# author:Dragon少年# 右手right = "s-as f |a --u |p -ops |" /            "o --uu|i-uis-|u - sss|a-Ii a |" /            "a --|"# 左手left = "etu --|0wr --|qet --|" /       "80w --|9qe --|80w --|7Qr --|" /       "370Wr |"# 演奏線程thread_play(play_piano, 0.3, right, left)right = "---op|s-as f |a --u |p -ops |" /        "o --uu|i-uis-|u - sss|a-Ii a |" /        "a --pa|s-as f |a --u |p -ops |"left = "----|etu --|0wr --|qet --|" /       "80w --|9qe --|80w --|7Qr --|" /       "370Wr u |etu --|0wr --|qet --|"# 演奏線程thread_play(play_piano, 0.25, right, left)# 右手right = "o --uu|i sa-s |d fs--|sap a O |" /        "p --sd|f-df h |d --o |s-as f |" /        "f --oo|pas asd |s-oo- |d s a p |"# 左手left = "80w --|9qe --|680 --|9ey 0 -|" /       "e ---|89w -t |579 --|60e -t |" /       "370 w -|q -q -|0 ---|9 ---|"# 右拇指rightThumb = "----|----|----|--W -|" /             "s ---|----|----|----|" /             "----|----|----|g f d s |"# 右食指rightIndexFinger = "----|----|----|--r -|" /                   "u ---|----|----|----|" /                   "----|e -r -|w ---|e ---|"# 左拇指leftThumb = "----|----|----|----|" /            "----|----|----|----|" /            "----|t -y -|t ---|t ---|"# 演奏線程thread_play(play_piano, 0.25, right, left, rightThumb, rightIndexFinger, leftThumb)# 右手right = "a --f |j -h -|fds -s |d-sd h |" /        "f --f |j -h -|"# 左手left = "3 %70Wru|60e 37w |48qer w |59q e t |" /       "80wty -|60e 37w |"# 右手拇指rightThumb = "f ---|----|----|----|" /             "----|----|"# 右食指rightIndexFinger = "----|----|----|----|" /                   "----|----|"# 左拇指leftThumb = "----|----|----|----|" /            "----|----|"# 演奏線程thread_play(play_piano, 0.25, right, left, rightThumb, rightIndexFinger, leftThumb)# 右手right = "fds -s |d-sd a |u --op|"# 左手left = "48qer w |7 -7 % |6 ---|"# 右拇指rightThumb = "----|9 ---|8"# 右食指rightIndexFinger = "----|q ---|0"# 左拇指leftThumb = "----|----|p"# 多線程模擬手指彈琴,按鍵時間為0.3sthread_play(play_piano, 0.3, right, left, rightThumb, rightIndexFinger, leftThumb)right = "s-as f |a --u |p -ops |" /        "o --uu|i-uis-|u - sss|a-Ii a |" /        "a --|"left = "etu --|0wr --|qet --|" /       "80w --|9qe --|80w --|7Qr --|" /       "370Wr |"thread_play(play_piano, 0.4, right, left)

4. 鋼琴模擬演奏

最后我們只需要打開鋼琴auto piano網頁,(注意:博主這里是直接通過桌面任務欄程序打開的瀏覽器窗口,所以需要手動瀏覽器先打開自由鋼琴網頁)通過控制鍵盤按鍵,實現手指演奏曲譜線程,就可以模擬彈奏出整首音樂了。核心代碼如下:

# author:Dragon少年# 控制鍵盤鍵入keyboard = Controller()# 切換到鍵盤鋼琴網頁端keyboard.press(Key.cmd)# 延時time.sleep(1)keyboard.press("d")keyboard.release("d")keyboard.release(Key.cmd)# 鏈接的方式點擊桌面任務欄的正在運行程序print_control_identifiers()dlg = Desktop(backend="uia").任務欄.運行中的程序.child_window(title="Google Chrome - 1 個運行窗口", auto_id="Chrome",                                                     control_type="Button").click()time.sleep(2)keyboard.press(Key.f11)keyboard.release(Key.f11)

至此,自動化彈鋼琴就實現完成了,當然如果需要實現別的鋼琴演奏,只需要會看樂譜,根據樂譜修改各個階段手指彈奏線程,就可以實現不同樂曲的鋼琴演奏啦!

最后大家一起來欣賞欣賞Python演奏的鋼琴曲《天空之城》效果如何吧!


若本篇內容對您有所幫助,請三連點贊,關注,收藏支持下。

創作不易,白嫖不好,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!

Dragon少年 | 文

如果本篇博客有任何錯誤,請批評指教,不勝感激 !

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119555.html

相關文章

  • [deviceone開發]-底部出選擇

    摘要:底部彈出選擇,可滑動選擇選項,如果停留在選項中間,可自動校正位置,加了一點簡單的動畫效果,需要的朋友可以下載下來修改下應用到自己的項目中。 一、簡介 個人上傳的第一個示例源碼,兩天空閑時間寫的,一點簡單組件,寫的挺亂還沒啥注釋,僅供新手學習。 底部彈出選擇,可滑動選擇選項,如果停留在選項中間,可自動校正位置,加了一點簡單的動畫效果,需要的朋友可以下載下來修改下應用到自己的項目中。 De...

    hedge_hog 評論0 收藏0
  • 「轉載」window.open詳解(javascript出頁面)

    摘要:寫成一行參數解釋腳本開始彈出新窗口的命令彈出窗口的文件名彈出窗口的名字不是文件名,非必須,可用空代替窗口高度窗口寬度窗口距離屏幕上方的象素值窗口距離屏幕左側的象素值是否顯示工具欄,為顯示,表示菜單欄和滾動欄。 Window.Open詳解2006年11月09日 12:14 Window.Open詳解 一、window.open()支持環境: JavaScript1.0+/JScript...

    xingpingz 評論0 收藏0
  • 如果上帝是程序員,他是如何創造世界上所有動物的?

    摘要:后來他們談戀愛并且結婚了,有一天小明調用了自己的方法,并將小白作為參數傳入,隨后出了一個孩子小黑。但是小黑并沒有繼承小明的和小紅的,反倒是有了自己的私有屬性。 tips:本文盡量用樸實易懂的語言來解釋面向對象的思想。 荒古時期 上帝首先創造了幾個原始類 original class。例如:動物類Animal,植物類Plant,地形類Topography,氣象類Atmosphere等作...

    王陸寬 評論0 收藏0
  • JSONP原理剖析

    摘要:運行一下頁面,成功彈出提示窗口,的執行全過程順利完成到這里為止的話,相信你已經能夠理解的客戶端實現原理了吧剩下的就是如何把代碼封裝一下,以便于與用戶界面交互,從而實現多次和重復調用。 先說說JSONP是怎么產生的: 其實網上關于JSONP的講解有很多,但卻千篇一律,而且云里霧里,對于很多剛接觸的人來講理解起來有些困難,小可不才,試著用自己的方式來闡釋一下這個問題,看看是否有幫助。 1、...

    DangoSky 評論0 收藏0
  • 爬蟲初級操作(一)

    摘要:一個對應相應的狀態碼,狀態碼表示協議所返回的響應的狀態。下面將狀態碼歸結如下繼續客戶端應當繼續發送請求。繼續處理由擴展的狀態碼,代表處理將被繼續執行。處理方式丟棄該狀態碼不被的應用程序直接使用,只是作為類型回應的默認解釋。 本篇內容為 python 網絡爬蟲初級操作,內容主要有以下 3 部分: python 關于爬蟲的一些基本操作和知識 靜態網頁抓取 動態網頁抓取 基本操作和知識...

    Ocean 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<