亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

一起用Python做個(gè)自動(dòng)化彈鋼琴腳本,我竟然彈出了《天空之城》!

Kylin_Mountain / 2920人閱讀

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

前言

小時(shí)候一直有一個(gè)想成為鋼琴家的夢(mèng)想,最近在網(wǎng)上看到了一個(gè)開源的鋼琴演奏網(wǎng)頁autopiano,可以支持鍵盤按鍵彈奏、鼠標(biāo)點(diǎn)擊彈奏。

突然靈機(jī)一動(dòng),能不能用Python自動(dòng)化腳本彈奏一曲美妙的鋼琴曲呢?今天就一起帶大家如何用Python實(shí)現(xiàn)自動(dòng)化彈出一首《天空之城》!

首先一起來看看最終實(shí)現(xiàn)的演奏效果:

下面,我們就開始介紹如何實(shí)現(xiàn)這個(gè)自動(dòng)化彈鋼琴腳本的。

一、核心功能設(shè)計(jì)

總體的實(shí)現(xiàn)相對(duì)是比較簡(jiǎn)單的,主要分為以下4步實(shí)現(xiàn):

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

二、實(shí)現(xiàn)步驟

1. 演奏函數(shù)

我們首先需要模擬出演奏時(shí),各個(gè)按鍵的停頓間隔時(shí)間,實(shí)現(xiàn)鍵盤控制,通過傳入的音樂樂符和時(shí)間實(shí)現(xiàn)各個(gè)現(xiàn)場(chǎng)手指的演奏。核心代碼如下:

# 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. 添加演奏旋律多線程

因?yàn)檎滓魳窂椬嗟臅r(shí)候,有時(shí)候需要雙手同時(shí)控制演奏,所以我們需要通過線程模擬出主旋律、和弦、右手拇指、右手食指、左手拇指、左手食指各個(gè)部分的演奏效果,通過多線程開啟上面的演奏函數(shù)。核心代碼如下:

# author:Dragon少年def thread_play(play_piano, keytime, right="", left="", rightThumb="", rightIndexFinger="", leftThumb="",                leftIndexFinger=""):    # 運(yùn)行線程    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. 手指演奏曲譜

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

# 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"# 多線程模擬手指彈琴,按鍵時(shí)間為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網(wǎng)頁,(注意:博主這里是直接通過桌面任務(wù)欄程序打開的瀏覽器窗口,所以需要手動(dòng)瀏覽器先打開自由鋼琴網(wǎng)頁)通過控制鍵盤按鍵,實(shí)現(xiàn)手指演奏曲譜線程,就可以模擬彈奏出整首音樂了。核心代碼如下:

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

至此,自動(dòng)化彈鋼琴就實(shí)現(xiàn)完成了,當(dāng)然如果需要實(shí)現(xiàn)別的鋼琴演奏,只需要會(huì)看樂譜,根據(jù)樂譜修改各個(gè)階段手指彈奏線程,就可以實(shí)現(xiàn)不同樂曲的鋼琴演奏啦!

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


若本篇內(nèi)容對(duì)您有所幫助,請(qǐng)三連點(diǎn)贊,關(guān)注,收藏支持下。

創(chuàng)作不易,白嫖不好,各位的支持和認(rèn)可,就是我創(chuàng)作的最大動(dòng)力,我們下篇文章見!

Dragon少年 | 文

如果本篇博客有任何錯(cuò)誤,請(qǐng)批評(píng)指教,不勝感激 !

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/119555.html

相關(guān)文章

  • [deviceone開發(fā)]-底部出選擇

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

    hedge_hog 評(píng)論0 收藏0
  • 「轉(zhuǎn)載」window.open詳解(javascript出頁面)

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

    xingpingz 評(píng)論0 收藏0
  • 如果上帝是程序員,他是如何創(chuàng)造世界上所有動(dòng)物的?

    摘要:后來他們談戀愛并且結(jié)婚了,有一天小明調(diào)用了自己的方法,并將小白作為參數(shù)傳入,隨后出了一個(gè)孩子小黑。但是小黑并沒有繼承小明的和小紅的,反倒是有了自己的私有屬性。 tips:本文盡量用樸實(shí)易懂的語言來解釋面向?qū)ο蟮乃枷搿?荒古時(shí)期 上帝首先創(chuàng)造了幾個(gè)原始類 original class。例如:動(dòng)物類Animal,植物類Plant,地形類Topography,氣象類Atmosphere等作...

    王陸寬 評(píng)論0 收藏0
  • JSONP原理剖析

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

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

    摘要:一個(gè)對(duì)應(yīng)相應(yīng)的狀態(tài)碼,狀態(tài)碼表示協(xié)議所返回的響應(yīng)的狀態(tài)。下面將狀態(tài)碼歸結(jié)如下繼續(xù)客戶端應(yīng)當(dāng)繼續(xù)發(fā)送請(qǐng)求。繼續(xù)處理由擴(kuò)展的狀態(tài)碼,代表處理將被繼續(xù)執(zhí)行。處理方式丟棄該狀態(tài)碼不被的應(yīng)用程序直接使用,只是作為類型回應(yīng)的默認(rèn)解釋。 本篇內(nèi)容為 python 網(wǎng)絡(luò)爬蟲初級(jí)操作,內(nèi)容主要有以下 3 部分: python 關(guān)于爬蟲的一些基本操作和知識(shí) 靜態(tài)網(wǎng)頁抓取 動(dòng)態(tài)網(wǎng)頁抓取 基本操作和知識(shí)...

    Ocean 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<