[TOC]
# **pygame.mixer**
用于加載和播放聲音的pygame模塊
## **函數**
* pygame.mixer.init — 初始化混音器模塊
* pygame.mixer.pre\_init — 預設混音器初始化參數
* pygame.mixer.quit — 卸載混音器模塊
* pygame.mixer.get\_init — 測試混音器是否初始化
* pygame.mixer.stop — 停止播放所有通道
* pygame.mixer.pause — 暫停播放所有通道
* pygame.mixer.unpause — 恢復播放
* pygame.mixer.fadeout — 淡出停止
* pygame.mixer.set\_num\_channels — 設置播放頻道的總數
* pygame.mixer.get\_num\_channels — 獲取播放頻道的總數
* pygame.mixer.set\_reserved — 預留頻道自動使用
* pygame.mixer.find\_channel — 找到一個未使用的頻道
* pygame.mixer.get\_busy — 測試混音器是否正在使用
## 類
* pygame.mixer.Sound — 從文件或緩沖區對象創建新的Sound對象
* pygame.mixer.Channel — 創建一個Channel對象來控制播放
此模塊包含用于加載 Sound 對象和控制播放的類。混音器模塊是可選的,取決于SDL\_mixer。您的程序應該在使用它之前 測試 pygame.mixer 模塊是否可用并進行初始化。
混音器模塊具有有限數量的聲音播放聲道。通常程序會告訴 pygame 開始播放音頻,它會自動選擇一個可用的頻道。默認為8個并發通道,但復雜的程序可以更精確地控制通道數量及其使用。
所有聲音播放都混合在后臺線程中。當您開始播放Sound對象時,它會在聲音繼續播放時立即返回。單個Sound對象也可以自動播放多次。
混音器還有一個特殊流通道用于音樂播放,可通過 pygame.mixer.music 模塊訪問。
混音器模塊必須像其他 pygame 模塊一樣進行初始化,但它有一些額外的條件。pygame.mixer.init() 函數采用幾個可選參數來控制播放速率和樣本大小。Pygame將 默認為合理的值,但pygame無法執行聲音重采樣,因此應初始化混音器以匹配音頻資源的值。
注意:不要使用較少的延遲聲音,請使用較小的緩沖區大小。 默認設置為減少某些計算機上發出沙啞聲音的可能性。 您可以在 pygame.mixer.init() 或者 pygame.init() 之前 通過調用pygame.mixer.pre\_init()預設混合器初始化參數來更改默認緩沖區。 例如:pygame.mixer.pre\_init(44100,-16,2,1024)。在pygame 1.8中,默認大小從1024更改為3072。
## **函數詳解**
### **pygame.mixer.init()**
初始化混音器模塊
init(frequency=22050, size=-16, channels=2, buffer=4096) -> None
初始化混音器模塊以進行聲音加載和播放。默認參數可以被改變以提供特定的音頻混合。允許使用關鍵字參數。對于參數設置為零的向后兼容性,使用默認值(可能由pre\_init調用更改)。
size參數表示每個音頻樣本使用的位數。如果值為負,則將使用帶符號的樣本值。正值表示將使用不帶符號的音頻樣本。無效值會引發異常。
pygame 2中的新功能(使用SDL2編譯時) - 大小可以是32(32位浮點數)。
channels參數用于指定是使用單聲道還是立體聲。1表示單聲道,2表示立體聲。不支持其他值(負值被視為1,大于2的值被視為2)。
buffer參數控制混音器中使用的內部采樣數。默認值應適用于大多數情況。可以降低它以減少延遲,但可能會發生聲音丟失。它可以被提升到更大的值,以確保播放永遠不會跳過,但它會對聲音播放施加延遲。緩沖區大小必須是2的冪(如果不是,則向上舍入到下一個最接近的2的冪)。
某些平臺需要在 display 模塊初始化后初始化pygame.mixer 模塊。頂級pygame.init() 自動處理此問題,但無法將任何參數傳遞給 mixer init。為了解決這個問題,mixer 具有pygame.mixer.pre\_init() 函數在使用頂層初始化之前設置正確默認值。
多次調用是安全的,但是在初始化混音器后,如果沒有先調用 pygame.mixer.quit(),則無法更改播放參數 。
### **pygame.mixer.pre\_init()**
預設混音器初始化參數
pre\_init(frequency=22050, size=-16, channels=2, buffersize=4096) -> None
調用 pre\_init 可以更改調用 真正的初始化 pygame.mixer.init() 使用的默認值。允許使用關鍵字參數。設置自定義混音器播放值的最佳方法是 在調用頂級 pygame.init() 之前調用 pygame.mixer.pre\_init()。對于向后兼容性參數,零值將替換為啟動默認值。
### **pygame.mixer.quit(**)
退出混音器
quit() -> None
這將卸載 pygame.mixer,如果稍候重新初始化,則所有播放將停止并且任何加載的Sound對象可能與混音器不兼容。
### **pygame.mixer.get\_init()**
測試混音器是否初始化
get\_init() -> (frequency, format, channels)
如果混合器已初始化,則返回正在使用的播放參數。如果混音器尚未初始化,則返回None
### **pygame.mixer.stop()**
停止播放所有聲道
stop() -> None
這將停止所有活動混音器通道的播放。
### **pygame.mixer.pause()**
暫時停止播放所有聲道
pause() -> None
這將暫時停止活動混音器通道上的所有播放。稍后可以 通過 pygame.mixer.unpause() 恢復播放
### **pygame.mixer.unpause()**
恢復播放聲道
unpause() -> None
這將在暫停后恢復所有活動聲道。
### **pygame.mixer.fadeout()**
停止前淡出所有聲音的音量
fadeout(time) -> None
這將在設定時間上淡出所有活動通道上的音量,時間以毫秒為單位。聲音靜音后,播放將停止。
### **pygame.mixer.set\_num\_channels()**
設置播放頻道的總數
set\_num\_channels(count) -> None
設置調音臺的可用頻道數。默認值為8。可以增加或減少該值。如果該值減小,則截斷的通道上播放的聲音將停止。
### **pygame.mixer.get\_num\_channels()**
獲取播放頻道的總數
get\_num\_channels() -> count
返回當前活動的播放通道數。
### **pygame.mixer.set\_reserved()**
預留頻道自動使用
set\_reserved(count) -> None
調音臺可以保留任意數量的通道,這些通道不會被聲音自動選擇播放。如果聲音當前正在預留頻道播放,則不會停止。
這允許應用程序為重要聲音保留特定數量的聲道,這些聲音不得被丟棄或具有可保證的頻道。
### **pygame.mixer.find\_channel()**
找到一個未使用的頻道
find\_channel(force=False) -> Channel
這將找到并返回一個非活動的Channel對象。如果沒有非活動通道,則此函數將返回None。如果沒有非活動通道且force參數為True,則會找到運行時間最長的聲道并返回它。
如果調音臺有 pygame.mixer.set\_reserved() 保留頻道,則此處不會返回這些頻道。
### **pygame.mixer.get\_busy()**
測試mixer 是否正忙
get\_busy() -> bool
如果混音器正忙,則返回True。如果混音器處于空閑狀態,則返回False。
## 類
### **pygame.mixer.Sound**
從文件或緩沖區對象創建新的Sound對象
> Sound(filename) -> Sound
> Sound(file=filename) -> Sound
> Sound(buffer) -> Sound
> Sound(buffer=buffer) -> Sound
> Sound(object) -> Sound
> Sound(file=object) -> Sound
> Sound(array=object) -> Sound
* pygame.mixer.Sound.play - 開始播放聲音
* pygame.mixer.Sound.stop - 停止聲音播放
* pygame.mixer.Sound.fadeout - 淡出后停止聲音播放
* pygame.mixer.Sound.set\_volume - 設置此聲音的播放音量
* pygame.mixer.Sound.get\_volume - 獲取播放音量
* pygame.mixer.Sound.get\_num\_channels - 計算此聲音播放的次數
* pygame.mixer.Sound.get\_length - 得到聲音的長度
* pygame.mixer.Sound.get\_raw - 返回Sound樣本的bytestring副本。
從文件名,python文件對象或可讀緩沖區對象加載新的聲音緩沖區。將執行有限的重新采樣以幫助樣本匹配混音器的初始化參數。Unicode字符串只能是文件路徑名。Python 2.x字符串或Python 3.x字節對象可以是路徑名或緩沖區對象。使用’file’或’buffer’關鍵字來避免歧義; 否則Sound可能會猜錯。如果使用了array關鍵字,則該對象應該導出版本3,C級別數組接口,或者對于Python 2.6或更高版本,導出新的緩沖區接口(首先檢查該對象的緩沖區接口。)
Sound對象表示實際的聲音樣本數據。更改Sound對象狀態的方法將是Sound播放的所有實例。Sound對象還導出數組接口,對于Python 2.6或更高版本,還會導出新的緩沖區接口。
可以從OGG音頻文件或未壓縮的 WAV 文件加載聲音。
注意:緩沖區將在內部復制,不會在它與Sound對象之間共享數據。
目前緩沖區和數組支持與sndarray.make\_sound 數值數組一致,因為忽略了樣本符號和字節順序。這將通過正確處理符號和字節順序或在不同時引發異常來改變。此外,截斷源樣本以適合音頻樣本大小。這不會改變。
pygame.mixer.Sound(buffer)是pygame 1.8中新增的pygame.mixer.Sound關鍵字參數和數組接口支持pygame 1.9.2中的新功能。
### **play()**
開始播放聲音
play(loops=0, maxtime=0, fade\_ms=0) -> Channel
在可用頻道上開始播放聲音(即,在計算機的揚聲器上)。 這將強制選擇一個頻道,因此如有必要,播放可能會切斷當前正在播放的聲音。
loops參數控制第一次播放后樣本重復的次數。 值 5 表示聲音將播放一次,然后重復播放五次,因此共播放六次。 默認值(0)表示聲音不重復,因此只播放一次。 如果循環設置為-1,則Sound將無限循環(但是您仍然可以調用stop()來停止它)。
maxtime參數可用于在給定的毫秒數后停止播放。
fade\_ms參數將使聲音以0音量開始播放,并在給定時間內逐漸升至全音量。 樣本可以在淡入完成之前結束。
這將返回所選通道的Channel對象。
### **stop()**
停止聲音播放
stop() -> None
這將停止在任何活動頻道上播放此聲音。
### **fadeout()**
淡出后停止聲音播放
fadeout(time) -> None
這將在以毫秒為單位在時間參數上淡出后停止播放聲音。Sound會在所有播放的頻道上消失并停止。
### **set\_volume()**
設置此聲音的播放音量
set\_volume(value) -> None
這將設置此聲音的播放音量(響度)。如果正在播放,這將立即影響聲音。它也會影響此聲音的任何未來播放。參數是從0.0到1.0的值。
### **get\_volume()**
獲取播放音量
get\_volume() -> value
返回0.0到1.0之間的值,表示此Sound的音量。
### **get\_num\_channels()**
計算此聲音播放的次數
get\_num\_channels() -> count
返回此聲音正在播放的活動頻道數。
### **get\_length()**
得到聲音的長度
get\_length() -> seconds
以秒為單位返回此聲音的長度。
### **get\_raw()**
返回Sound樣本的bytestring副本。
get\_raw() -> bytes
將Sound對象緩沖區的副本作為字節(對于Python 3.x)或str(對于Python 2.x)對象返回。
pygame 1.9.2中的新功能。
## 類
### **pygame.mixer.Channel**
創建一個Channel對象來控制播放
Channel(id) -> Channel
* pygame.mixer.Channel.play - 在特定頻道播放聲音
* pygame.mixer.Channel.stop - 停止在頻道上播放
* pygame.mixer.Channel.pause - 暫時停止播放頻道
* pygame.mixer.Channel.unpause - 恢復暫停播放頻道
* pygame.mixer.Channel.fadeout - 淡出通道后停止播放
* pygame.mixer.Channel.set\_volume - 設置播放頻道的音量
* pygame.mixer.Channel.get\_volume - 獲得播放頻道的音量
* pygame.mixer.Channel.get\_busy - 檢查通道是否處于活動狀態
* pygame.mixer.Channel.get\_sound - 得到當前播放的聲音
* pygame.mixer.Channel.queue - 排隊Sound對象以跟隨當前
* pygame.mixer.Channel.get\_queue - 返回排隊的任何聲音
* pygame.mixer.Channel.set\_endevent - 播放停止時讓頻道發送事件
* pygame.mixer.Channel.get\_endevent - 獲取播放停止時頻道發送的事件
返回其中一個當前通道的Channel對象。id必須是從0到 值pygame.mixer.get\_num\_channels() 的值。
Channel對象可用于精確控制Sounds的播放。一個頻道只能播放一個聲音。使用頻道完全是可選的,因為pygame默認可以管理它們。
### **play()**
在特定頻道上播放聲音
play(Sound, loops=0, maxtime=0, fade\_ms=0) -> None
這將開始播放特定頻道上的聲音。 如果頻道正在播放任何其他聲音,它將被停止。
loops參數與Sound.play()中的含義相同:它是第一次重復聲音的次數。 如果是3,聲音將播放4次(第一次,然后是三次)。 如果循環為-1,則播放將無限重復。
與Sound.play()一樣,maxtime參數可用于在給定的毫秒數后停止播放聲音。
與Sound.play()一樣,fade\_ms參數可以在聲音中淡入淡出。
### **stop()**
停止在頻道上播放聲音
stop() -> None
停止在頻道上播放聲音。播放停止后,頻道可用于播放新的聲音。
### **pause()**
暫時停止播放頻道
pause() -> None
暫時停止在頻道上播放聲音。它可以在之后調用 Channel.unpause() 恢復
### **unpause()**
恢復暫停播放頻道
unpause() -> None
在暫停的頻道上恢復播放。
### **fadeout()**
淡出通道后停止播放
fadeout(time) -> None
在給定時間參數上淡出聲音后,以毫秒為單位停止播放通道。
### set\_volume()
設置播放頻道的音量
set\_volume(value) -> None
set\_volume(left, right) -> None
設定播放聲音的音量(響度)。當頻道開始播放時,其音量值將被重置。這只會影響當前的聲音。value參數介于0.0和1.0之間。
如果傳遞一個參數,則它將是兩個發言者的音量。如果傳遞兩個參數并且混音器處于立體聲模式,則第一個參數將是左揚聲器的音量,第二個參數將是右揚聲器的音量。(如果第二個參數為None,則第一個參數將是兩個揚聲器的音量。)
如果頻道正在播放set\_volume()已調用的聲音,則會同時考慮這兩個呼叫。例如:
> sound = pygame.mixer.Sound(“s.wav”)
> channel = s.play() # Sound plays at full volume by default
> sound.set\_volume(0.9) # Now plays at 90% of full volume.
> sound.set\_volume(0.6) # Now plays at 60% (previous value replaced).
> channel.set\_volume(0.5) # Now plays at 30% (0.6 \* 0.5).
### **get\_volume()**
獲得播放頻道的音量
get\_volume() -> value
返回當前播放聲音的通道音量。這沒有考慮到使用的立體聲分離 Channel.set\_volume()。Sound對象也有自己的音量,與音頻混合。
### **get\_busy()**
檢查通道是否處于活動狀態
get\_busy() -> bool
如果通道正在主動混合聲音,則返回true。如果通道空閑,則返回False。
### **get\_sound()**
得到當前播放的聲音
get\_sound() -> Sound
返回當前在此頻道上播放的實際Sound對象。如果通道空閑,則返回None。
### **queue()**
排隊Sound對象以跟隨當前
queue(Sound) -> None
當聲音在頻道上排隊時,它將在當前聲音結束后立即開始播放。每個通道一次只能排隊一個聲音。排隊的聲音僅在當前播放自動結束時播放。在對Channel.stop()或的任何其他呼叫中清除它 Channel.play()。
如果在頻道上沒有主動播放聲音,則聲音將立即開始播放。
### **get\_queue()**
返回排隊的任何聲音
get\_queue() -> Sound
如果聲音已在此頻道上排隊,則會返回該聲音。一旦排隊的聲音開始播放,它將不再在隊列中。
### **set\_endevent()**
播放停止時讓頻道發送事件
set\_endevent() -> None
set\_endevent(type) -> None
當為某個頻道設置了一個嘗試時,每當一個聲音在該頻道上播放時(不僅僅是第一次),它就會向一個游戲隊列發送一個事件。使用pygame.event.get()一旦它發送到檢索ENDEVENT。
請注意,如果您調用Sound.play(n)或Channel.play(sound,n),結束事件僅發送一次:聲音播放“n + 1”次后(請參閱Sound.play文檔)。
如果在聲音仍然播放時調用Channel.stop()或Channel.play()調用,則會立即發布事件。
type參數將是發送到隊列的事件id。這可以是任何有效的事件類型,但一個好的選擇是pygame.locals.USEREVENT和之間的值 pygame.locals.NUMEVENTS。如果沒有給出類型參數,那么Channel將停止發送事件。
### **get\_endevent()**
獲取播放停止時頻道發送的事件
get\_endevent() -> type
返回每次Channel完成聲音播放時要發送的事件類型。如果沒有功能返回該功能 pygame.NOEVENT。
- 一、Python基礎
- 1. 序言
- 1.1 Python簡介
- 1.2 安裝和使用IDE
- 1.3 語言特性和基礎概念
- 2. 基本數據類型
- 2.2 字符串型
- 2.2.2 ASCII簡介
- 2.2.4 字符串常用函數
- 3. 條件分支
- 3.3 閑聊條件判斷和運算符優先級
- 10.正則表達式
- 【降龍十八章】Python小技巧
- 18.1 學習網址
- 18.2 PIP切換源
- 18.3 使用whl來安裝
- 【工具優化】IDE優化技巧
- Anaconda
- Jupyter Notebook 的 Markdown 添加大綱
- Jupyter Notebook中圖片縮放和居左
- Anaconda設置環境變量
- Pycharm
- PyCharm新建文檔配置
- 設置字體和字號
- 設置主題和字體配色
- 保存和導入配置
- 設置對選擇內容自動添加引號
- 推薦安裝的插件
- Markdown
- 表格格式
- 二、Python進階
- copy和deepcopy
- 《零基礎入門學習 Python 》【小甲魚版】
- 001.和Python的第一次接觸+習題復習
- 002.用Python設計的第一個游戲 +習題復習
- Pygame詳解
- Pygame詳解:前言
- Pygame詳解(一):Color類
- Pygame詳解(二):display 模塊
- Pygame詳解(三):draw 模塊
- Pygame詳解(四):event 模塊
- Pygame詳解(五):font 模塊
- Pygame詳解(六):image 模塊
- Pygame詳解(七):key 模塊
- Pygame詳解(八):locals 模塊
- Pygame詳解(九):mixer 模塊
- Pygame詳解(十):mouse 模塊
- Pygame詳解(十一):Rect 對象
- Pygame詳解(十二):Surface 對象
- Pygame詳解(十三):time 模塊
- Pygame詳解(十四):music 模塊
- Pygame詳解(十五):pygame 模塊
- Pygame詳解(十六):cursors 模塊
- Pygame詳解(十七):joystick 模塊
- Pygame詳解(十八):mask 模塊
- Pygame詳解(二十一):BufferProxy 對象
- Pygame詳解(二十三):gfxdraw 模塊
- Pygame詳解(二十五):Overlay 對象
- Pygame詳解(二十八):sndarray 模塊
- Pygame詳解(三十一):camera 模塊
- Pygame詳解(三十二):cdrom 模塊
- Pygame詳解(三十六):version 模塊
- pygame rect相關知識
- Tkinter詳解
- Tkinter 組件詳解(一):Label
- Tkinter 組件詳解(二):Button