Python 中播放蜂鳴聲:winsound 模組


Python 的 winsound 模組是使用 Python 在 Windows 機器上播放音訊檔案的一種簡單方法。它具有簡單的介面,只需幾行程式碼即可播放聲音檔案和 MIDI 檔案,並控制 MIDI 裝置。

winsound 模組是 Python 標準庫的一部分,因此無需單獨安裝。雖然它有一些限制,例如僅支援有限數量的音訊檔案格式,但它對於 Python 中的簡單音訊任務來說是一個有用的工具。

在本教程中,我們將探討 winsound 模組的功能和特性,並瞭解如何使用它在 Python 中播放聲音以及處理聲音檔案和 MIDI 裝置。

安裝和匯入 winsound

winsound 模組是 Python 標準庫的一部分,因此無需單獨安裝。要在程式碼中使用它,只需使用以下程式碼行匯入它:

import winsound

播放聲音

winsound 模組的主要功能是 PlaySound,它可以從檔案或資料緩衝區播放聲音。以下是如何從檔案播放聲音的示例:

import winsound
winsound.PlaySound("sound.wav", winsound.SND_FILENAME)

在此示例中,“sound.wav”是包含聲音的檔名,winsound.SND_FILENAME 是一個標誌,告訴 PlaySound 將第一個引數視為檔名。

您還可以透過將位元組物件作為第一個引數並使用 winsound.SND_MEMORY 標誌來從資料緩衝區播放聲音:

import winsound
# bytes object containing sound data
data = b'\x00\x00\x02\x00\x10\x00...'
winsound.PlaySound(data, winsound.SND_MEMORY)

PlaySound 函式還有一些其他可選引數,您可以使用它們來自定義聲音的播放方式。例如,您可以使用 winsound.SND_ASYNC 和 winsound.SND_LOOP 標誌指定聲音的音量:

import winsound
winsound.PlaySound("sound.wav", winsound.SND_FILENAME | winsound.SND_ASYNC |
winsound.SND_LOOP)

在此示例中,winsound.SND_ASYNC 標誌告訴 PlaySound 非同步播放聲音,因此函式立即返回,聲音在後臺播放。winsound.SND_LOOP 標誌告訴 PlaySound 迴圈播放聲音,直到停止。

要停止在後臺播放的聲音,可以使用 winsound.PlaySound 函式和 winsound.SND_PURGE 標誌:

import winsound
winsound.PlaySound(None, winsound.SND_PURGE)

處理聲音檔案

winsound 模組還提供了一些用於處理聲音檔案的函式。

Beep 函式

Beep 函式是 Python winsound 模組的一部分,它提供了一個簡單的介面,用於在 Windows 機器上播放音訊檔案和控制 MIDI 裝置。

Beep 函式使用預設系統揚聲器播放簡單的蜂鳴聲。它有兩個引數:蜂鳴聲的頻率(以赫茲為單位)和蜂鳴聲的持續時間(以毫秒為單位)。

示例

以下是如何使用 Beep 函式播放一系列不同頻率的蜂鳴聲的示例:

import winsound
winsound.Beep(440, 500) # beep at 440 Hz for 0.5 seconds
winsound.Beep(880, 500) # beep at 880 Hz for 0.5 seconds
winsound.Beep(1760, 500) # beep at 1760 Hz for 0.5 seconds
winsound.Beep(3520, 500) # beep at 3520 Hz for 0.5 seconds

Beep 函式是 Python 中產生簡單蜂鳴聲的一種簡單方法,但它有一些限制。它只產生簡單的正弦波聲音,並且不提供任何控制音量或其他聲音設定的方法。如果您需要更高階的音訊功能,則可能需要考慮使用其他 Python 模組,例如 pyaudio 模組或 sounddevice 模組。

MessageBeep

MessageBeep 函式是 Python winsound 模組的一部分,它提供了一個簡單的介面,用於在 Windows 機器上播放音訊檔案和控制 MIDI 裝置。

MessageBeep 函式播放系統聲音或使用者定義的聲音。您可以使用它來播放其中一個標準的 Windows 系統聲音,例如“感嘆號”聲音或“問號”聲音,或者您可以使用它來播放來自檔案或資料緩衝區的使用者定義的聲音。

示例

以下是如何使用 MessageBeep 函式播放標準系統聲音的示例:

import winsound
# play the "exclamation" sound
winsound.MessageBeep(winsound.MB_ICONEXCLAMATION) 

在此示例中,winsound.MB_ICONEXCLAMATION 常量指定要播放的系統聲音型別。MessageBeep 函式有幾個常量,您可以使用它們來指定要播放的聲音型別。例如,winsound.MB_ICONERROR 播放標準的“錯誤”聲音,而 winsound.MB_ICONWARNING 播放標準的“警告”聲音。

您還可以使用 MessageBeep 函式從檔案或資料緩衝區播放使用者定義的聲音。為此,您可以將 winsound.MB_OK 常量作為第一個引數傳遞,並將檔名或資料作為第二個引數傳遞:

import winsound
# play a sound from a file
winsound.MessageBeep(winsound.MB_OK, "sound.wav")
# bytes object containing sound data
data = b'\x00\x00\x02\x00\x10\x00...'
# play a sound from a buffer of data
winsound.MessageBeep(winsound.MB_OK, data) 

midiOutOpen

winsound 模組還提供了一些用於處理 MIDI 裝置的函式。例如,midiOutOpen 函式開啟 MIDI 輸出裝置,而 midiOutClose 函式關閉它。

midiOutOpen 函式是 Python winsound 模組的一部分,它提供了一個簡單的介面,用於在 Windows 機器上播放音訊檔案和控制 MIDI 裝置。

midiOutOpen 函式開啟一個 MIDI 輸出裝置,允許您向該裝置傳送 MIDI 訊息。它有兩個引數:裝置識別符號和 HMIDIOUT 物件的控制代碼。裝置識別符號指定要開啟的 MIDI 裝置,控制代碼用於在隨後對 winsound 模組的呼叫中引用該裝置。

示例

以下是如何使用 midiOutOpen 函式開啟第一個 MIDI 輸出裝置的示例:

import winsound
# use the first MIDI device
device_id = 0
# create a handle to a MIDIOUT object
handle = winsound.HMIDIOUT()
winsound.midiOutOpen(handle, device_id, 0, 0, 0)

在此示例中,device_id 設定為 0,它指定系統上的第一個 MIDI 輸出裝置。控制代碼是一個 HMIDIOUT 物件,用於在隨後對 winsound 模組的呼叫中引用 MIDI 裝置。最後三個引數是保留的,應設定為 0。

使用 midiOutOpen 函式開啟 MIDI 輸出裝置後,您可以使用 winsound 模組中的其他函式向該裝置傳送 MIDI 訊息。例如,您可以使用 midiOutShortMsg 函式向裝置傳送簡短的 MIDI 訊息:

import winsound
# MIDI message to play a note on channel 1
message = 0x904040
winsound.midiOutShortMsg(handle, message)

在此示例中,訊息是一個 MIDI 訊息,它指定通道 1 上的“音符開啟”事件。midiOutShortMsg 函式使用從 midiOutOpen 函式獲得的控制代碼將訊息傳送到 MIDI 裝置。

完成使用 MIDI 輸出裝置後,應使用 midiOutClose 函式關閉它。

import winsound
winsound.midiOutClose(handle)

midiOutClose 函式關閉 MIDI 輸出裝置並釋放開啟裝置時分配的任何資源。完成使用裝置後關閉它非常重要,以避免浪費系統資源並防止潛在錯誤。

winsound 模組的限制

winsound 模組是在 Windows 機器上播放音訊檔案的一種非常簡單的方法,但它有一些限制。它只能播放有限數量的音訊檔案格式,包括 WAV、MIDI 和 RMI。它對控制音量或其他聲音設定的支援也有限。

如果您需要更高階的音訊功能,則可能需要考慮使用其他 Python 模組,例如 pyaudio 模組或 sounddevice 模組。這些模組提供更多功能並支援更廣泛的音訊格式,但它們可能更復雜。

結論

Python winsound 模組是一個簡單易用的工具,用於在 Windows 機器上使用 Python 播放音訊檔案和控制 MIDI 裝置。它具有簡單的介面,只需幾行程式碼即可播放聲音檔案和 MIDI 檔案,並控制 MIDI 裝置。

更新於:2024年2月22日

2K+ 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告