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+ 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告