国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類

這篇具有很好參考價(jià)值的文章主要介紹了Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類,Python,python,pyglet

目錄

揚(yáng)聲器類

1. 繪制喇叭

2. 揚(yáng)聲器類

3. 禁音狀態(tài)?

4. 設(shè)置狀態(tài)

5. 切換狀態(tài)

6. 播放音樂


揚(yáng)聲器類

1. 繪制喇叭

本篇將教你用pyglet畫一個小喇叭,如上圖。這里要用到pyglety庫shapes模塊中的圓弧Arc和多邊形Pylygon畫出這個揚(yáng)聲器的圖片:

Arc(x, y, radius, segments=None, angle=6.283185307179586, start_angle=0, closed=False, color=(255, 255, 255, 255), batch=None, group=None)

x,y 是圓弧的圓心坐標(biāo);radius 是半徑;

angle是圓心角的弧度數(shù);

start_angle是圓弧起始的弧度數(shù),以水平線起始時,值為0;

圓弧控件沒有表示粗細(xì)的參數(shù),只能多畫幾個同心圓弧來加粗。

Polygon(*coordinates, color=(255, 255, 255, 255), batch=None, group=None)

coordinates是多邊形的各個端點(diǎn)的坐標(biāo)列表,也可以寫成元組方式;

多邊形控件是填充形狀,沒有粗細(xì)參數(shù)也不能只畫邊線。

代碼如下:

import pyglet

window = pyglet.window.Window(800,500)
batch = pyglet.graphics.Batch()

color = (255, 255, 255)
pi = 3.141592653589793
arc = []
x, y = 380, 250
for i in [*range(6),*range(18,24),*range(36,42)]:
    arc.append(pyglet.shapes.Arc(x=x, y=y, radius=50-i/2, angle=pi/2, start_angle=-pi/4, color=color, batch=batch))

coordinates = [x+10, y+8], [x, y+8], [x, y-8], [x+10, y-8], [x+16, y-14], [x+16, y+14]
polygon = pyglet.shapes.Polygon(*coordinates, color=color, batch=batch)


@window.event
def on_draw():
    window.clear()
    batch.draw()

pyglet.app.run()

2. 揚(yáng)聲器類

改寫為一個類便于調(diào)用,可以畫在任意坐標(biāo)處:

class Speaker:
? ? def __init__(self, x, y, color=(255, 255, 255)):
? ? ? ? self.arc = []
? ? ? ? pi = 3.141592653589793
? ? ? ? for i in [*range(6),*range(18,24),*range(36,42)]:
????????????????self.arc.append(pyglet.shapes.Arc(x=x, y=y, radius=50-i/2, angle=pi/2, start_angle=-pi/4, color=color, batch=batch))
????????coordinates = [x+10, y+8], [x, y+8], [x, y-8], [x+10, y-8], [x+16, y-14], [x+16, y+14]
????????self.polygon = pyglet.shapes.Polygon(*coordinates, color=color, batch=batch)

調(diào)用代碼:

import pyglet

window = pyglet.window.Window(800,500)
batch = pyglet.graphics.Batch()

class Speaker:
    def __init__(self, x, y, color=(255, 255, 255)):
        self.arc = []
        pi = 3.141592653589793
        for i in [*range(6),*range(18,24),*range(36,42)]:
            self.arc.append(pyglet.shapes.Arc(x=x, y=y, radius=50-i/2, angle=pi/2, start_angle=-pi/4, color=color, batch=batch))
        coordinates = [x+10, y+8], [x, y+8], [x, y-8], [x+10, y-8], [x+16, y-14], [x+16, y+14]
        self.polygon = pyglet.shapes.Polygon(*coordinates, color=color, batch=batch)

@window.event
def on_draw():
    window.clear()
    batch.draw()

speaker1 = Speaker(380, 250)
speaker2 = Speaker(600, 360)
pyglet.app.run()

運(yùn)行效果:

Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類,Python,python,pyglet

3. 禁音狀態(tài)?

再加兩條紅色直線表示禁音狀態(tài),shapes.Line用法:

Line(x, y, x2, y2, width=1, color=(255, 255, 255, 255), batch=None, group=None)

x,y, x2,y2 為直線兩端點(diǎn)的坐標(biāo);

width為直線粗細(xì),缺省默認(rèn)值為1,直線控件有粗細(xì)的。

代碼如下:

import pyglet

window = pyglet.window.Window(800,500)
batch = pyglet.graphics.Batch()

class Speaker:
    def __init__(self, x, y, color=(255, 255, 255)):
        self.arc = []
        pi = 3.141592653589793
        for i in [*range(6),*range(18,24),*range(36,42)]:
            self.arc.append(pyglet.shapes.Arc(x=x, y=y, radius=50-i/2, angle=pi/2, start_angle=-pi/4, color=color, batch=batch))
        coordinates = [x+10, y+8], [x, y+8], [x, y-8], [x+10, y-8], [x+16, y-14], [x+16, y+14]
        self.polygon = pyglet.shapes.Polygon(*coordinates, color=color, batch=batch)
        self.line1 = pyglet.shapes.Line(x, y-24, x+48, y+24, width=3, color=(255, 0, 0), batch=batch)
        self.line2 = pyglet.shapes.Line(x, y+24, x+48, y-24, width=3, color=(255, 0, 0), batch=batch)

@window.event
def on_draw():
    window.clear()
    batch.draw()

speaker1 = Speaker(380, 250)
speaker2 = Speaker(600, 360)
pyglet.app.run()

運(yùn)行效果:

Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類,Python,python,pyglet

4. 設(shè)置狀態(tài)

再為Speaker類增加兩個屬性和一個方法,用于設(shè)置狀態(tài):

? ? ? ? self.line1.visible =?Flase
????????self.line2.visible = Flase

? ? def enabled(self, enabled=True):
? ? ? ? self.line1.visible = self.line2.visible = not enabled

調(diào)用代碼:

import pyglet
 
window = pyglet.window.Window(800,500)
batch = pyglet.graphics.Batch()

class Speaker:
    def __init__(self, x, y, color=(255, 255, 255)):
        self.arc = []
        pi = 3.141592653589793
        for i in [*range(6),*range(18,24),*range(36,42)]:
            self.arc.append(pyglet.shapes.Arc(x=x, y=y, radius=50-i/2, angle=pi/2, start_angle=-pi/4, color=color, batch=batch))
        coordinates = [x+10, y+8], [x, y+8], [x, y-8], [x+10, y-8], [x+16, y-14], [x+16, y+14]
        self.polygon = pyglet.shapes.Polygon(*coordinates, color=color, batch=batch)
        self.line1 = pyglet.shapes.Line(x, y-24, x+48, y+24, width=3, color=(255, 0, 0), batch=batch)
        self.line2 = pyglet.shapes.Line(x, y+24, x+48, y-24, width=3, color=(255, 0, 0), batch=batch)
        self.line1.visible = self.line2.visible = False
    def set_enabled(self, enabled=True):
        self.line1.visible = self.line2.visible = not enabled
 
@window.event
def on_draw():
    window.clear()
    batch.draw()
 
speaker1 = Speaker(380, 250)
speaker2 = Speaker(600, 360)
speaker2.set_enabled(False)

pyglet.app.run()

運(yùn)行效果:

Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類,Python,python,pyglet

5. 切換狀態(tài)

繼續(xù)增加鼠標(biāo)點(diǎn)擊切換狀態(tài)的功能,增加屬性和方法:

屬性:

? ? ? ? self.x = x
? ? ? ? self.y = y
? ? ? ? self.enabled = True

方法:
? ? def set_enabled(self, enabled=True):
? ? ? ? self.enabled = enabled
? ? ? ? self.line1.visible = self.line2.visible = not enabled
? ? def on_mouse_over(self, x, y):
? ? ? ? return self.x <= x <= self.x+50 and self.y-35 <= y <= self.y+35

增加鼠標(biāo)點(diǎn)擊事件:

@window.event
def on_mouse_press(x, y, button, modifier):
? ? if speaker1.on_mouse_over(x,y):
? ? ? ? speaker1.enabled = not speaker1.enabled
? ? ? ? speaker1.set_enabled(speaker1.enabled)
? ? if speaker2.on_mouse_over(x,y):
? ? ? ? speaker2.enabled = not speaker2.enabled
? ? ? ? speaker2.set_enabled(speaker2.enabled)

運(yùn)行效果:分別點(diǎn)擊兩個圖標(biāo),就能各自切換狀態(tài)

Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類,Python,python,pyglet

6. 播放音樂

使用 media 模塊調(diào)入mp3音樂,配合Speaker類播放

media = pyglet.media.load('voice1.mp3')
sound = pyglet.media.Player()
sound.queue(media)
sound.loop = True
sound.play()

鼠標(biāo)事件中增加音樂播放和暫停的代碼:

@window.event
def on_mouse_press(x, y, button, modifier):
? ? if speaker.on_mouse_over(x,y):
? ? ? ? speaker.enabled = not speaker.enabled
? ? ? ? speaker.set_enabled(speaker.enabled)
? ? ? ? if speaker.enabled:
? ? ? ? ? ? sound.play()
? ? ? ?
else:
? ? ? ? ? ? sound.pause()?

完整代碼:

import pyglet

window = pyglet.window.Window(800,500)
batch = pyglet.graphics.Batch()

class Speaker:
    def __init__(self, x, y, color=(255, 255, 255)):
        self.arc = []
        pi = 3.141592653589793
        for i in [*range(6),*range(18,24),*range(36,42)]:
            self.arc.append(pyglet.shapes.Arc(x=x, y=y, radius=50-i/2, angle=pi/2, start_angle=-pi/4, color=color, batch=batch))
        coordinates = [x+10, y+8], [x, y+8], [x, y-8], [x+10, y-8], [x+16, y-14], [x+16, y+14]
        self.polygon = pyglet.shapes.Polygon(*coordinates, color=color, batch=batch)
        self.line1 = pyglet.shapes.Line(x, y-24, x+48, y+24, width=3, color=(255, 0, 0), batch=batch)
        self.line2 = pyglet.shapes.Line(x, y+24, x+48, y-24, width=3, color=(255, 0, 0), batch=batch)
        self.line1.visible = self.line2.visible = False
        self.x = x
        self.y = y
        self.enabled = True
    def set_enabled(self, enabled=True):
        self.enabled = enabled
        self.line1.visible = self.line2.visible = not enabled
    def on_mouse_over(self, x, y):
        return self.x <= x <= self.x+50 and self.y-35 <= y <= self.y+35

@window.event
def on_draw():
    window.clear()
    batch.draw()

@window.event
def on_mouse_press(x, y, button, modifier):
    if speaker.on_mouse_over(x,y):
        speaker.enabled = not speaker.enabled
        speaker.set_enabled(speaker.enabled)
        if speaker.enabled:
            sound.play()
        else:
            sound.pause()

speaker = Speaker(720, 450)

media = pyglet.media.load('voice1.mp3')
sound = pyglet.media.Player()
sound.queue(media)
sound.loop = True
sound.play()

pyglet.app.run()

運(yùn)行代碼后,就能播放音樂了,點(diǎn)擊揚(yáng)聲器圖標(biāo)可以切換音樂的播放和暫停狀態(tài)。


文章來源地址http://www.zghlxwxcb.cn/news/detail-838194.html

到了這里,關(guān)于Python 一步一步教你用pyglet制作可播放音樂的揚(yáng)聲器類的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python 一步一步教你用pyglet制作“彩色方塊連連看”游戲(續(xù))

    Python 一步一步教你用pyglet制作“彩色方塊連連看”游戲(續(xù))

    上期講到相同的色塊連接,鏈接見:?Python 一步一步教你用pyglet制作“彩色方塊連連看”游戲-CSDN博客 續(xù)上期,接下來要實(shí)現(xiàn)相鄰方塊的連線: 首先來進(jìn)一步擴(kuò)展 行列的類: class RC: ? ? def __init__(self, r=0, c=0): ? ? ? ? self.r, self.c = r, c ? ? def __repr__(self): ? ? ? ? return f\\\'Rc

    2024年04月08日
    瀏覽(24)
  • Python 一步一步教你用pyglet仿制鴻蒙系統(tǒng)里的時鐘

    Python 一步一步教你用pyglet仿制鴻蒙系統(tǒng)里的時鐘

    目錄 鴻蒙時鐘 1. 繪制圓盤 2. 創(chuàng)建表類 3. 繪制刻度 4. 刻度數(shù)值 5. 添加指針 6. 轉(zhuǎn)動指針 7. 聯(lián)動時間 8. 時鐘走動 本篇將用python pyglet庫復(fù)刻華為手機(jī)鴻蒙系統(tǒng)鬧鐘程序的時鐘,先在上圖中抓取出時分秒針及刻度、表盤的顏色RGB值: bHour = (42, 43, 48, 255) bMinute = (70, 71, 75, 255) rSe

    2024年03月12日
    瀏覽(29)
  • FastAPI + NGINX + Gunicorn:一步一步教你部署一個高性能的Python網(wǎng)頁應(yīng)用

    FastAPI + NGINX + Gunicorn:一步一步教你部署一個高性能的Python網(wǎng)頁應(yīng)用

    部署一個 FastAPI 應(yīng)用到你的服務(wù)器是一項(xiàng)復(fù)雜的任務(wù)。如果你對 NGINX 、 Gunicorn 和 Uvicorn 這些技術(shù)不熟悉,可能會浪費(fèi)大量的時間。如果你是剛接觸 Python 語言不久或者希望利用 Python 構(gòu)建自己的Web應(yīng)用程序,本文的內(nèi)容可能會讓你第一次部署時更節(jié)省時間。 FastAPI 是用于開發(fā)

    2024年02月05日
    瀏覽(24)
  • Android一步一步教你實(shí)現(xiàn)Emoji表情鍵盤

    Android一步一步教你實(shí)現(xiàn)Emoji表情鍵盤

    背景: 說到聊天,就離不開文字、表情和圖片,表情和圖片增加了聊天的趣味性,讓原本無聊的文字瞬間用表情動了起來,今天給大家?guī)淼氖潜砬殒I盤,教你一步一步實(shí)現(xiàn),先來看下效果圖: 效果圖 功能: 1、如何控制表情鍵盤與輸入法的切換 2、如何解析表情 3、如何處

    2024年02月16日
    瀏覽(17)
  • GitHub入門指南:一步一步教你使用GitHub

    GitHub入門指南:一步一步教你使用GitHub

    引言: GitHub是一個流行的代碼托管平臺,它提供了強(qiáng)大的版本控制和協(xié)作功能,對于開發(fā)者來說是一個不可或缺的工具。本文將一步一步地教你如何使用GitHub,從注冊賬號到代碼同步,讓你能夠快速上手并充分利用這個平臺。 打開GitHub官網(wǎng)(github.com)。 點(diǎn)擊右上角的\\\"Sign

    2024年02月15日
    瀏覽(21)
  • Midjourney:一步一步教你如何使用 AI 繪畫 MJ

    Midjourney:一步一步教你如何使用 AI 繪畫 MJ

    一步一步如何使用 Midjourney 教程:教學(xué)怎么用 MJ? 原文:如何使用 Midjourney 教程 https://bysocket.com/saas-digital-marketing-channel/ Midjourney是一款使用文字描述來生成高質(zhì)量圖像的AI繪畫工具。這篇文章主要介紹了Midjourney及其用途,并針對Midjourney的使用提供了一些指南。該工具可以幫

    2023年04月21日
    瀏覽(25)
  • 文本轉(zhuǎn)語音-微軟Azure-一步一步教你從注冊到使用

    文本轉(zhuǎn)語音-微軟Azure-一步一步教你從注冊到使用

    牙叔教程 簡單易懂 他們的中文也許還行, 但是英文我試了都不滿意, 我再網(wǎng)上搜到的我認(rèn)為最好的是 但是丫真貴 Best Free Text To Speech Voice Reader | Speechify 現(xiàn)在的匯率是 139 × 6.91 = 960.49 一年一千塊, 好像還行哈, 但是沒卡呀, 擦, 比來比去, 還是微軟Azure性價(jià)比最高, 沒有微軟Azure的

    2024年02月07日
    瀏覽(27)
  • 一步一步教你如何使用 Visual Studio Code 編譯一段 C# 代碼

    一步一步教你如何使用 Visual Studio Code 編譯一段 C# 代碼

    以下是一步一步教你如何使用 Visual Studio Code 編寫使用 C# 語言輸出當(dāng)前日期和時間的代碼: 1、下載并安裝 .NET SDK。您可以從 Microsoft 官網(wǎng)下載并安裝它。 2、打開 Visual Studio Code,并安裝 C# 擴(kuò)展。您可以在 Visual Studio Code 中通過擴(kuò)展菜單安裝它。 3、打開 Visual Studio Code 中的文

    2024年02月11日
    瀏覽(33)
  • 【沐風(fēng)老師】一步一步教你在3dMax中進(jìn)行UVW貼圖和展開UVW的方法

    【沐風(fēng)老師】一步一步教你在3dMax中進(jìn)行UVW貼圖和展開UVW的方法

    將簡單或程序材質(zhì)應(yīng)用于對象并不難。但是當(dāng)表面需要在其上顯示某種紋理時,它會變得更加復(fù)雜。任何紋理貼圖都放在材質(zhì)的 Diffuse 插槽中,但渲染的結(jié)果可能無法預(yù)測。這就是為什么我們需要了解 3DMAX 如何將紋理應(yīng)用于 3D 對象,什么是 UVW 貼圖,以及為什么要“展開”它

    2024年02月04日
    瀏覽(23)
  • 一步一步教你如何白嫖谷歌云Google Cloud服務(wù)器$300美金羊毛

    一步一步教你如何白嫖谷歌云Google Cloud服務(wù)器$300美金羊毛

    我們都知道,Depay(現(xiàn)在改名為Dupay了)卡平??梢杂糜谖⑿牛Ц秾?,美團(tuán)消費(fèi),直接用USDT做日常小額消費(fèi),還免收手續(xù)費(fèi),小額的話,這點(diǎn)還是很舒服的。 但其實(shí),Depay卡的用途遠(yuǎn)不止此,平??梢远嗤诰蛲诰?。今天教大家如何用Depay卡白嫖谷歌云服務(wù)器。申請成功后隨即可

    2024年02月04日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包