Python學習筆記35:進階篇(二十四)pygame的使用之音頻文件播放

前言

基礎模塊的知識通過這么長時間的學習已經有所了解,更加深入的話需要通過完成各種項目,在這個過程中逐漸學習,成長。

我們的下一步目標是完成python crash course中的外星人入侵項目,這是一個2D游戲項目。在這之前,我們先簡單學習一下pygame模塊。

私信我發送消息python資料,領取python crash course中文版PDF。

pygame

Pygame是一個開源的Python多媒體開發庫,專門用于開發2D游戲。它是Python編程語言的一個擴展,基于 SDL (Simple DirectMedia Layer) 庫,提供了豐富的功能來處理圖形、聲音、事件處理等游戲開發所需的基本要素,使得創建游戲變得更加簡單直接。

音頻

游戲中必不可少的就是游戲的BGM了,有的游戲對話的時候除了文字甚至還有對話內容的語音。這些音頻的功能,pygame當然也是提供的。

在pygame中,提供音頻功能的模塊主要有兩個:pygame.mixer 和 pygame.sndarray 。接下來我們就對這兩個模塊進行學習。

pygame.mixer

pygame.mixer 模塊是 Pygame 中用于處理音頻的部分,它主要分為兩個子模塊:Sound 和 Music。

需要注意Pygame 默認支持 .wav 和 .ogg 格式。對于 .mp3 或其他格式,你可能需要額外的解碼器。

文章上方提供一個.wav格式的文件,可以直接使用,后續有空出個教程安裝解碼器,可以播放MP3文件。

資源尋找的話我是在wav吧通過百度網盤下載的,當然大家也可以百度查詢一下其他資源獲取方式也沒關系。

pygame.mixer.Sound

pygame.mixer.Sound 類用于處理短音頻片段,比如游戲中的音效。

  1. 創建一個sound對象。
    pygame.mixer.Sound(file=None, buffer=None)

    • 參數:
      • file: 字符串,指定音頻文件的路徑。
      • buffer: 字節對象,包含音頻數據的緩沖區。
    • 返回值:sound對象
import pygamepygame.init()
pygame.mixer.init()# 沒啥用的窗口,單純為了關閉窗口退出音樂播放
screen = pygame.display.set_mode((1200, 800))# 創建 Sound 對象
sound_effect = pygame.mixer.Sound('葉倩文 - 情人知己.wav')
sound_effect.play()# 點擊關閉退出程序,這個后面再講,代碼可以先寫上。
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()

在這里插入圖片描述

文件執行,馬上就能聽到情人知己這首經典粵語歌曲了!

還有幾個函數也講一下,但是這里不進行單獨的示例,因為其他函數的功能,可能要學會了輸入以后,通過按鍵的方式來進行會體驗好一點。

  1. play(loops=0, maxtime=0, fade_ms=0): 播放聲音。學會按鍵輸入和事件監聽以后,可以通過空格來控制音樂播放和暫停。

    • loops: 整數,循環次數(默認不循環)。
    • maxtime: 整數,最大播放時間(單位:毫秒)。
    • fade_ms: 整數,淡入時間(單位:毫秒)。
  2. stop(): 停止播放聲音。學會按鍵輸入和事件監聽以后,可以通過空格來控制音樂播放和暫停。

  3. fadeout(time) 在指定時間內淡出聲音。

    • time: 整數,淡出時間(單位:毫秒)。
  4. set_volume(value): 設置音量。學會按鍵輸入和事件監聽以后,可以通過上下按鈕來控制音量的加減。

    • value: 浮點數,音量值(范圍:0.0 到 1.0)。
  5. get_num_channels(): 返回聲音對象使用的通道數。

  6. get_volume(): 獲取音量。

  7. get_length(): 返回聲音的長度(單位:秒)。

pygame.mixer.music

用于處理背景音樂,通常可以播放較長的音頻文件。

  1. load(filename): 加載音樂文件。
    • filename: 字符串,音樂文件的路徑。

和sound不一樣,sound可以顯式的進行使用,music沒有返回對象,可以簡單理解為設置的默認音頻對象。

import pygamepygame.init()
pygame.mixer.init()# 沒啥用的窗口,單純為了關閉窗口退出音樂播放
screen = pygame.display.set_mode((1200, 800))# 加載音樂
pygame.mixer.music.load('葉倩文 - 情人知己.wav')
# 循環播放
pygame.mixer.music.play(loops=-1)  # 循環播放# 點擊關閉退出程序,這個后面再講,代碼可以先寫上。
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()

在這里插入圖片描述

執行上述代碼,同樣發現電腦會進行情人知己的播放,根據設置的參數,大家耐心聽完會循環進行播放。

除了加載和播放的函數,music還提供了一些其他函數用于實現音頻的暫停,停止,繼續播放等功能。

當然這些功能還是要在學會輸入和監聽事件后,配合使用體驗效果會好點。

  1. play(loops=0, start=0.0): 開始播放音樂。
    • loops: 整數,循環次數(默認不循環)。
    • start: 浮點數,開始播放的位置(單位:秒)。
  2. stop(): 停止播放音樂。
  3. pause(): 暫停播放音樂。
  4. unpause(): 繼續播放音樂。
  5. fadeout(time) 在指定時間內淡出音樂。
    • time: 整數,淡出時間(單位:毫秒)。
  6. set_volume(value): 設置音量。
    • value: 浮點數,音量值(范圍:0.0 到 1.0)。
  7. get_volume(): 獲取音量。
  8. queue(song, loops=0, start=0.0): 將一首歌加入隊列,當前歌曲結束后播放。
    • song: 字符串,音樂文件的路徑。
    • loops: 整數,循環次數(默認不循環)。
    • start: 浮點數,開始播放的位置(單位:秒)。

queue函數可以單獨試驗一下。

import pygamepygame.init()
pygame.mixer.init()# 沒啥用的窗口,單純為了關閉窗口退出音樂播放
screen = pygame.display.set_mode((1200, 800))# 加載音樂
pygame.mixer.music.load('葉倩文 - 情人知己.wav')
# 加入隊列
pygame.mixer.music.queue('容祖兒-小小.wav')
# 循環播放
pygame.mixer.music.play()  # 循環播放# 點擊關閉退出程序,這個后面再講,代碼可以先寫上。
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()

耐心聽完情人知己,后臺播放出了小小這首歌曲。

怎么樣,是不是有點音樂播放器的感覺了。

Python的魅力不僅于此哦!

結尾

關于音頻的學習就先到這里,主要介紹一下怎么使用pygame播放音頻文件,后續學習了輸入和事件監聽就可以嘗試進行切歌,暫停,繼續播放加減音量等功能編寫了。

作業

  1. 使用兩種方式播放你喜歡的歌曲。資源不會找的話就播放我提供的兩首歌曲吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43976.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

元組列表之案例

1.列表推導式 基本語法: [表達式 for語句1 if 語句1 for語句2 if語句2 ........ ] 1.零到九的平方列表 a [i*i for i in range(10)] print(a) 2.for 循環前面加if else #如果是偶數乘以2,如果是奇數直接輸出 a [i*2 if i%2 0 else i for i in ran…

什么是生成器函數?

生成器函數(Generator Function)是 JavaScript 中一種特殊的函數,它可以在執行過程中暫停并在之后恢復執行。生成器函數使用 function* 語法定義,并且內部使用 yield 表達式來暫停函數執行并返回一個值。每次調用生成器函數返回的…

rabbitmq集群創建admin用戶之后,提示can access virtual hosts是No access狀態

問題描述: 因業務需要使用的rabbitmq是3.7.8版本的,rabbitmq在3.3.0之后就允許使用guest賬號的權限了,所以需要創建一個administrator標簽的用戶。 如下操作創建的用戶: 創建完成之后就提示如下的報錯: 注&#xff1a…

php表單提交并自動發送郵件給某個郵箱(示例源碼下載)

只需要將以下代碼內容進行復制即可用到自己的程序/API接口中&#xff1a; <?php if(!empty($_POST[is_post]) && $_POST[is_post]1){$url "https://www.aoksend.com/index/api/send_email";$name $_POST[name];$email $_POST[email];$subject $_POS…

探索Mojo模型:解鎖機器學習模型的可解釋性之旅

探索Mojo模型&#xff1a;解鎖機器學習模型的可解釋性之旅 在人工智能和機器學習領域&#xff0c;模型的可解釋性是一個至關重要的議題。隨著模型變得越來越復雜&#xff0c;理解模型的決策過程成為了一個挑戰。Mojo模型作為一種模型序列化格式&#xff0c;提供了一種方法來部…

Python 給存入 Redis 的鍵值對設置過期時間

Redis 是一種內存中的數據存儲系統&#xff0c;與許多傳統數據庫相比&#xff0c;它具有一些優勢&#xff0c;其中之一就是可以設置數據的過期時間。通過 Redis 的過期時間設置&#xff0c;可以為存儲在 Redis 中的數據設置一個特定的生存時間。一旦數據到達過期時間&#xff0…

mybatis日志記錄方案

首先對指定表進行監控 對表進行監控,那么就要使用的是statementInterceptor 攔截器 使用攔截器那么就要寫intercepts寫攔截條件進行攔截 監控只對與增刪改 查詢不進行監控 對于字段的監控,是誰修改了字段,那么就進行報警,或者提醒 消息提醒使用釘釘機器人進行消息提醒 P…

軟鏈接node_modules

公司項目很多微應用的子項目公用同一套模板&#xff0c;也就會使用同一個node_modules 1.先創建3個同樣的項目,并安裝一個其中的一個node_modules給他丟到外邊 2.win r -------> cmd --------> ctrlshift enter(已管理員身份打開cmd) 3.在窗口分別執行以下代碼…

視頻減小技巧:十大頂級視頻壓縮軟件

視頻壓縮軟件會盡可能地壓縮視頻&#xff0c;以便上傳到各個網站。通常&#xff0c;4K 或更高質量的視頻體積更大。壓縮軟件有助于壓縮體積。在這里&#xff0c;我們來討論一下 10 款最佳視頻壓縮軟件。 十大頂級視頻壓縮軟件 1. 奇客壓縮寶 奇客壓縮寶是由Geekersoft公司開發…

基于SpringBoot+MySQL的租房項目+文檔

&#x1f497;博主介紹&#x1f497;&#xff1a;?在職Java研發工程師、專注于程序設計、源碼分享、技術交流、專注于Java技術領域和畢業設計? 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的老師 Wechat / QQ 名片 :) Java精品實戰案例《700套》 2025最新畢業設計選題推薦…

數據庫系統中的Undo和Redo

在數據庫管理系統&#xff08;DBMS&#xff09;中&#xff0c;undo 和 redo 是兩種用于事務管理和故障恢復的重要機制。它們主要涉及事務的提交、回滾以及系統故障后的數據恢復。 Undo&#xff08;撤銷&#xff09; 作用&#xff1a;undo 用于撤銷未提交事務所做的修改&#…

極狐Gitlab使用(1)

目錄 續接上篇&#xff1a;極狐Gitlab安裝部署-CSDN博客 1. 關閉注冊功能 2. 創建群組 3. 創建用戶 5. 邀請成員到群組 6. 設置導入導出項目源 7. 通過gitee導入庫 8. 通過倉庫URL導入 9. 自創建項目 10. 默認分支main的權限 11. 使用普通用戶進入自建庫 12. 創建用…

java的遍歷的方法對比 效率對比

在 Java 中&#xff0c;遍歷對象的方式主要取決于對象的類型和數據結構。以下是幾種常見的遍歷方式&#xff0c;以及它們的效率比較&#xff1a; 普通的 for 循環&#xff1a; 效率&#xff1a;高。使用普通的 for 循環可以直接根據索引來訪問元素&#xff0c;適用于數組和實現…

Ubuntu系統上安裝Apache和WordPress

** 第一步跟新系統包 ** 首先跟新系統包 sudo apt update sudo apt upgrade第二步下載安裝apache sudo apt install apache2 ##查看apache的狀態是否啟動成功 sudo systemctl status apache2 ##查看服務器的ip地址 sudo ip a通過ip地址進行訪問apache頁面 第三步下載安裝…

git patch怎么使用?

通常當我們提到 "patch" 時&#xff0c;我們可能指的是以下幾種情況&#xff1a; 1. **應用補丁文件**&#xff1a; 如果你有一個 .patch 文件&#xff0c;你可以使用 git apply 命令來應用它。 bash git apply your-patch-file.patch 這會將補丁文件中的更改應用到…

軟件架構之嵌入式系統設計

軟件架構之嵌入式系統設計 第 12 章&#xff1a;嵌入式系統設計12.1 嵌入式系統概論12.2 嵌入式系統的組成12.2.1 硬件架構12.2.2 軟件架構 12.3 嵌入式開發平臺與調試環境12.3.1 嵌入式系統軟件開發平臺12.3.2 嵌入式開發調試 第 12 章&#xff1a;嵌入式系統設計 隨著計算機…

力扣 1兩數之和

nums [2,7,6,3] target 9 需要在這個中找到 nums中數字下標&#xff0c;累加和等于target 也就是說既要數字下標&#xff0c;又要nums中數字&#xff0c;還要查找 因此&#xff0c;考慮map這種既有key 又有value的哈希表 問題是 map,unordered_map, muti_map用哪一個呢&a…

人工智能時代,零基礎學IT,我首推Python作為你編程入門語言!

人工智能時代為什么將 Python 稱為第一語言&#xff1f; 因為python適應了人工智能時代&#xff1a; 人工智能時代對于代碼的簡便性有很大要求&#xff0c;像傳統的C/CPP/Java學習較為復雜&#xff0c;學習路線長&#xff0c;對于很多零基礎的人入門困難。python的兼容性&…

k8s集群部署mysql8主備

一、搜索mysql8版本 # helm search repo mysql# helm pull bitnami/mysql --version:11.1.2# tar -zxf mysql-11.1.2.tgz# cd mysql 二、修改value.ysqml文件 動態存儲類自己提前搭建。 # helm install mysql8 -n mysql-cluster ./ -f values.yaml NAME: mysql8 LAST DEPLOYED…

Java:方法與類的奧秘——解鎖編程世界的鑰匙

探索編程的奧秘 在程序設計的廣闊海洋中&#xff0c;Java如同一艘穩健的航船&#xff0c;引領著無數開發者穿越代碼的波濤。本篇深度探索&#xff0c;將帶您潛入Java的內心深處&#xff0c;揭開“方法”與“類”的神秘面紗。這兩個概念&#xff0c;不僅是Java的基石&#xff0…