pyglet.media
子模块
细节
音频和视频播放。
Pyglet可以播放wav文件,如果安装了FFmpeg,还可以播放许多其他音频和视频格式。
回放由 Player
类,该类从 Source
对象,并提供暂停、查找、调整音量等方法。这个 Player
类实现可用的最佳音频设备。**
player = Player()
A Source
用于对任意音频和视频文件进行解码。它通过将It::排队与单个玩家相关联:
source = load('background_music.mp3')
player.queue(source)
使用 Player
来控制回放。
如果源包含视频,则 Source.video_format()
属性将为非None,并且 Player.texture
属性将包含与音频同步的当前视频图像。
解码声音可能会占用大量处理器,并且可能会导致延迟,特别是对于必须快速播放的短声音,例如子弹或爆炸。您可以强制将此类声音解码并保留在内存中,而不是通过将源文件包装在 StaticSource
**
bullet_sound = StaticSource(load('bullet.wav'))
的另一个优点是 StaticSource
它可以在任意数量的玩家上排队,因此可以同时玩很多次。
当玩家完成对源文件的播放时,Pyglet依靠Python的垃圾收集器来释放资源。通过这种方式,可以延迟一些可能影响应用程序性能的操作。
播放器提供了一个 Player.delete()
方法,该方法可用于立即释放资源。
班级
- class Player
高级音视频播放器。
方法
- queue(source: Source | Iterable[Source]) None
将此播放器上的信号源排入队列。
如果玩家没有信号源,该玩家将立即开始比赛或暂停,取决于其
playing
属性。
- seek(timestamp: float) None
在当前信号源上搜索播放到指示的时间戳。
时间戳以秒为单位表示。如果时间戳在源的持续时间之外,它将被钳制到最后。
- 参数:
timestamp (float) -- 在哪里寻找源头的时间。
- get_texture() Texture
获取当前视频帧的纹理。
您应该在每次显示一帧视频时调用此方法,因为可能会使用多个纹理。如果当前源中没有视频,则返回值为None。
自 1.4 版本弃用: 使用
texture
取而代之的是
- update_texture(dt: float = None) None
从当前源手动更新纹理。
这是自动发生的,因此您不需要调用此方法。
- 参数:
dt (float) -- 自上次调用以来经过的时间
update_texture
。
事件
- on_eos()
当前源耗尽了数据。
默认行为是在播放列表中的下一个源
loop
属性设置为False
。如果loop
属性设置为True
,当前信号源将重新开始播放,直到next_source()
被调用或loop
设置为False
。- 活动:
- on_player_eos()
这位球员已经没有消息来源了。播放列表为空。
- 活动:
- on_player_next_source()
播放器开始播放播放列表中的下一个排队源。
这是调整窗口大小以适应新源的有用事件
VideoFormat
例如。- 活动:
属性
- cone_outer_angle
外锥体的内角。
角度以度为单位,默认为360度。当监听器位于外锥体定义的体积内,但位于内锥体定义的体积外时,应用的增益是
volume
和cone_outer_gain
。
- cone_orientation
声音在3D空间中的方向。
方向被指定为浮点数(x,y,z)的元组,并且没有单位。默认方向为(0,0,-1)。仅当其他圆锥体属性从其缺省值更改时,方向效果才明显。
- min_distance
音量减半之后不应用衰减的距离。
最小距离控制声音在远离收听者时衰减的速度。增益被钳制在最小距离内的标称值。默认情况下,该值为1.0。
单位默认为米,但可以使用侦听器属性进行修改。
- max_distance
不应用进一步衰减的距离。
当收听者与播放器之间的距离大于此值时,将按照距离值计算衰减。默认情况下,最大距离为无穷大。
单位默认为米,但可以使用侦听器属性进行修改。
- pitch
适用于声音的音调变化。
标称节距为1.0。2.0的音调听起来会高出一个八度,演奏速度会快一倍。0.5的音调听起来会低一个八度,演奏速度会慢一倍。不允许间距为0.0。
- playing
只读。确定播放器状态是否正在播放。
这个 playing 属性与是否实际存在要播放的信号源无关。如果 playing 是
True
并且一个信号源被排队,它将立即开始播放。如果 playing 是False
,则暗示玩家暂停。没有其他可能的状态。- 类型:
布尔尔
- position
声音在3D空间中的位置。
位置以浮点数(x,y,z)的元组形式给出。单位默认为米,但可以使用侦听器属性进行修改。
- source
只读。海流
Source
,或None
。- 类型:
来源
- texture
获取当前视频帧的纹理。
您应该在每次显示一帧视频时调用此方法,因为可能会使用多个纹理。如果当前源中没有视频,则返回值为None。
- time
只读。当前信号源的当前播放时间。
播放时间是以秒为单位的浮点数,0.0是媒体的开始。返回的播放时间代表播放器主时钟时间,用于同步音频和视频。
- 类型:
浮动
- volume
声音播放的音量级别。
名义水平为1.0,0.0为静默。
音量大小受距离收听者(如果位置)的影响。
- loop
无限期地循环电流源或直到
next_source()
被称为。默认为False
。- 类型:
布尔尔
在 1.4 版本加入.
- class AudioFormat(channels: int, sample_size: int, sample_rate: int)
音频详细信息。
此类的一个实例由具有音轨的源提供。您不应修改这些字段,因为它们在内部用于描述源提供的数据格式。
- class VideoFormat(width: int, height: int, sample_aspect: float = 1.0)
视频详细信息。
这个类的一个实例由视频流的源提供。您不应修改这些字段。
请注意,样本纵横比与视频图像的纵横比无关。例如,采用样例纵横比2.0的640x480视频图像应以1280x480显示。执行此扩展是应用程序的责任。
- class AudioData(data: bytes | Array, length: int, timestamp: float = 0.0, duration: float = 0.0, events: List[MediaEvent] | None = None)
单包音频数据。
此类由Piglet在内部使用。
- 参数:
data (bytes, ctypes array, or supporting buffer protocol) -- 样本数据。
length (int) -- 样本数据的大小,以字节为单位。
timestamp (float) -- 第一个样本的时间,以秒为单位。
duration (float) -- 总数据持续时间,以秒为单位。
events (List[
pyglet.media.drivers.base.MediaEvent
]) -- 此数据包中包含的事件列表。事件的时间戳是相对于该音频分组的。
自 2.0.10 版本弃用: timestamp 和 duration 都是未使用的,最终将被移除。
- class SourceInfo
源元数据信息。
如果信息不可用,则字段为空字符串或零。
- 参数:
在 1.2 版本加入.
- class Source
音频和/或视频源。
- 参数:
audio_format (
AudioFormat
) -- 此信号源中的音频格式,或None
如果信号源是静默的。video_format (
VideoFormat
) -- 此源中的视频格式,或None
如果没有视频的话。info (
SourceInfo
) -- 源元数据,如标题、艺术家等;或None
如果这些信息不可用。。。版本添加::1.2
- get_animation() Animation
将所有视频帧导入内存。
如果源没有视频,则返回空动画。否则,动画将包含所有未播放的视频帧(如果尚未在播放器上排队,则为整个源)。在创建动画后,源将位于EOS(流结束)。
这种方法不适合播放超过几秒的视频。
在 1.1 版本加入.
- 返回:
pyglet.image.Animation
- get_audio_data(num_bytes: int, compensation_time=0.0) AudioData | None
获取下一包音频数据。
- 参数:
自 2.0.10 版本弃用: Compensation_Time:将始终作为
0.0
。- 返回:
下一包音频数据,或
None
如果没有(更多)数据。- 返回类型:
- get_next_video_frame() AbstractImage | None
获取下一个视频帧。
在 1.1 版本加入.
- 返回:
下一个视频帧图像,或
None
如果视频帧无法解码或没有更多的视频帧。- 返回类型:
- get_next_video_timestamp() float | None
获取下一个视频帧的时间戳。
在 1.1 版本加入.
- 返回:
下一个时间戳,或
None
如果没有更多的视频帧。- 返回类型:
- get_queue_source() Source
返回
Source
用作玩家的队列源。默认实现返回
self
如果此源的精度与is_precise()
或者如果imprecise_ok
给出了论证。否则,一个新的PreciseStreamingSource
包装此源将返回。- 返回:
- is_precise() bool
布尔:这个消息来源是否被认为是准确的。
x
源上的字节数s
如果符合以下条件,则被视为对齐x % s.audio_format.bytes_per_frame == 0
,因此在返回的数据中不会有部分音频帧。源是精确的If-对于对齐的请求
x
字节-它返回:如果
x
或更多字节可用,x
字节。如果不再有足够的字节可用,
r
字节数,其中r < x
和r
是对齐的。
一个消息来源是 not 如果它执行以下任一操作,则精确:
返回值小于
x
的对齐请求的字节数x
字节,但数据仍然保留,因此其他请求将返回AudioData
/NOTNone
。返回的字节数多于请求的字节数。
为对齐的请求返回未对齐的字节数。
可以保证,pyglet的内部永远不会发出未对齐的请求或小于1024字节的请求。
如果此方法返回
False
,pyglet将把源代码包装在一个强制对齐的缓冲区中,从而产生额外的开销。如果重写此方法以返回
True
虽然信号源不符合上述要求,但在最好的情况下,音频播放可能会受到负面影响,在最坏的情况下,可能会发生内存访问违规。- 退货:
布尔:消息来源是否准确。
- save(filename: str, file: BinaryIO | None = None, encoder: MediaEncoder | None = None) None
将此源文件保存到文件。
- 参数:
- filename应力
用于设置文件格式,如果是,则打开输出文件 file 未指明。
- file类文件对象或无
要向其写入音频数据的文件。
- encoder媒体编码器或无
如果未指定,则尝试与文件扩展名匹配的所有编码器。如果所有操作都失败,则会引发第一次尝试的异常。
- class StreamingSource
基类:
Source
在播放时被解码的信号源。
源文件一次只能在任何
Player
。- get_queue_source() StreamingSource
返回
Source
被用作球员的来源。默认实现返回SELF。
- 返回:
- class StaticSource(source: Source)
基类:
Source
已在内存中完全解码的信号源。
该源可以在多个玩家中排队任意次数。
构建一个
StaticSource
对于中的数据source
。- 参数:
source (Source) -- 要从中读取和解码音频和视频数据的源。
- get_audio_data(num_bytes: float, compensation_time: float = 0.0) AudioData | None
StaticSource不提供音频数据。
当StaticSource在
Player
,它创建了一个StaticMemorySource
包含其内部音频数据和音频格式。- 抛出:
RuntimeError --
- get_queue_source() StaticMemorySource | None
返回
Source
用作玩家的队列源。默认实现返回
self
如果此源的精度与is_precise()
或者如果imprecise_ok
给出了论证。否则,一个新的PreciseStreamingSource
包装此源将返回。- 返回:
- class StaticMemorySource(data, audio_format: AudioFormat)
基类:
StaticSource
的默认实现的Helper类
StaticSource
。不要直接使用。此类由Piglet在内部使用。
- 参数:
data (readable buffer) -- 音频数据。
audio_format (AudioFormat) -- 音频格式。
- is_precise() bool
布尔:这个消息来源是否被认为是准确的。
x
源上的字节数s
如果符合以下条件,则被视为对齐x % s.audio_format.bytes_per_frame == 0
,因此在返回的数据中不会有部分音频帧。源是精确的If-对于对齐的请求
x
字节-它返回:如果
x
或更多字节可用,x
字节。如果不再有足够的字节可用,
r
字节数,其中r < x
和r
是对齐的。
一个消息来源是 not 如果它执行以下任一操作,则精确:
返回值小于
x
的对齐请求的字节数x
字节,但数据仍然保留,因此其他请求将返回AudioData
/NOTNone
。返回的字节数多于请求的字节数。
为对齐的请求返回未对齐的字节数。
可以保证,pyglet的内部永远不会发出未对齐的请求或小于1024字节的请求。
如果此方法返回
False
,pyglet将把源代码包装在一个强制对齐的缓冲区中,从而产生额外的开销。如果重写此方法以返回
True
虽然信号源不符合上述要求,但在最好的情况下,音频播放可能会受到负面影响,在最坏的情况下,可能会发生内存访问违规。- 退货:
布尔:消息来源是否准确。
- class AbstractListener
位置音频的侦听器属性。
您可以通过调用以下方法获取此类的Singleton实例
AbstractAudioDriver.get_listener()
。- property forward_orientation
给出听者所面对的方向的矢量。
方向以浮点数(x,y,z)的元组形式给出,并且没有单位。向前方向应垂直于向上方向。
- 类型:
三元组浮点数
- property position
监听者在3D空间中的位置。
位置以浮点数(x,y,z)的元组形式给出。单位默认为米,但可以使用侦听器属性进行修改。
- 类型:
三元组浮点数
- property up_orientation
一个给出听众“向上”方向的向量。
方向以浮点数(x,y,z)的元组形式给出,并且没有单位。向上方向应垂直于向前方向。
- 类型:
三元组浮点数
- property volume
用于播放声音的主音量。
在播放之前,所有的音量都要乘以这个主音量。值为0将静默播放(但仍会消耗资源)。名义成交量为1.0。
- 类型:
浮动
功能
- get_audio_driver()
获取当前平台的首选音频驱动程序。
看见
pyglet.options
audio
,和编程指南,章节 播放声音和视频 有关设置首选驱动程序的详细信息,请参阅。- 返回:
该平台的首选音频驱动程序的具体实现。
- 返回类型:
AbstractAudioDriver
- load(filename, file=None, streaming=True, decoder=None)
从文件加载源。
将尝试为文件扩展名注册的所有解码器。如果均未成功,则引发来自第一个解码器的异常。您还可以专门传递一个解码器来使用。
- 参数:
- filename应力
用于猜测媒体格式,并在以下情况下加载文件 file 未指明。
- file类文件对象或无
任何受支持格式的媒体数据源。
- streaming布尔尔
如果 False 一种
StaticSource
将返回;否则(默认)为StreamingSource
被创造出来了。- decoderMediaDecoder或无
您希望使用的特定解码器,而不是依赖于自动检测。如果指定,则不会尝试其他解码器。
- 返回类型:
例外情况
- exception CannotSeekException
- exception MediaException
- exception MediaFormatException