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

高级音视频播放器。

方法

play() None

开始播放当前信号源。

如果玩家已经在玩,这将不起作用。

pause() None

暂停当前信号源的播放。

如果玩家已经暂停,这将不起作用。

queue(source: Source | Iterable[Source]) None

将此播放器上的信号源排入队列。

如果玩家没有信号源,该玩家将立即开始比赛或暂停,取决于其 playing 属性。

参数:

source (Source or Iterable[Source]) -- 要排队的源。

seek(timestamp: float) None

在当前信号源上搜索播放到指示的时间戳。

时间戳以秒为单位表示。如果时间戳在源的持续时间之外,它将被钳制到最后。

参数:

timestamp (float) -- 在哪里寻找源头的时间。

seek_next_frame() None

步骤前进当前源中的一个视频帧。

get_texture() Texture

获取当前视频帧的纹理。

您应该在每次显示一帧视频时调用此方法,因为可能会使用多个纹理。如果当前源中没有视频,则返回值为None。

返回:

pyglet.image.Texture

自 1.4 版本弃用: 使用 texture 取而代之的是

next_source() None

立即移动到当前播放列表中的下一个信号源。

如果播放列表为空,则将其丢弃并检查是否有其他播放列表在排队。重新填充音频缓冲区时,可能会出现播放间隙。

delete() None

释放该播放器获取的资源。

内部音频播放器和纹理将被删除。

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_inner_angle

内锥的内角。

角度以度为单位,默认为360度。当收听者位于内锥定义的音量内时,声音以正常增益播放(请参见 volume )。

cone_outer_angle

外锥体的内角。

角度以度为单位,默认为360度。当监听器位于外锥体定义的体积内,但位于内锥体定义的体积外时,应用的增益是 volumecone_outer_gain

cone_orientation

声音在3D空间中的方向。

方向被指定为浮点数(x,y,z)的元组,并且没有单位。默认方向为(0,0,-1)。仅当其他圆锥体属性从其缺省值更改时,方向效果才明显。

cone_outer_gain

应用于圆锥体外部的增益。

当监听器位于外锥定义的音量之外时,将应用此增益,而不是 volume

min_distance

音量减半之后不应用衰减的距离。

最小距离控制声音在远离收听者时衰减的速度。增益被钳制在最小距离内的标称值。默认情况下,该值为1.0。

单位默认为米,但可以使用侦听器属性进行修改。

max_distance

不应用进一步衰减的距离。

当收听者与播放器之间的距离大于此值时,将按照距离值计算衰减。默认情况下,最大距离为无穷大。

单位默认为米,但可以使用侦听器属性进行修改。

pitch

适用于声音的音调变化。

标称节距为1.0。2.0的音调听起来会高出一个八度,演奏速度会快一倍。0.5的音调听起来会低一个八度,演奏速度会慢一倍。不允许间距为0.0。

playing

只读。确定播放器状态是否正在播放。

这个 playing 属性与是否实际存在要播放的信号源无关。如果 playingTrue 并且一个信号源被排队,它将立即开始播放。如果 playingFalse ,则暗示玩家暂停。没有其他可能的状态。

类型:

布尔尔

position

声音在3D空间中的位置。

位置以浮点数(x,y,z)的元组形式给出。单位默认为米,但可以使用侦听器属性进行修改。

source

只读。海流 Source ,或 None

类型:

来源

texture

获取当前视频帧的纹理。

您应该在每次显示一帧视频时调用此方法,因为可能会使用多个纹理。如果当前源中没有视频,则返回值为None。

类型:

pyglet.image.Texture

time

只读。当前信号源的当前播放时间。

播放时间是以秒为单位的浮点数,0.0是媒体的开始。返回的播放时间代表播放器主时钟时间,用于同步音频和视频。

类型:

浮动

volume

声音播放的音量级别。

名义水平为1.0,0.0为静默。

音量大小受距离收听者(如果位置)的影响。

loop

无限期地循环电流源或直到 next_source() 被称为。默认为 False

类型:

布尔尔

在 1.4 版本加入.

class PlayerGroup(players: Iterable[Player])

可以同时播放和暂停的一组玩家。

为给定的球员列表创建一个球员组。

该组中的所有球员当前不得属于任何其他组。

参数:

players (Iterable[Player]) -- 可重复的 Player S在这一群人中。

play() None

同时开始玩小组中的所有玩家。

pause() None

同时暂停组中的所有玩家。

class AudioFormat(channels: int, sample_size: int, sample_rate: int)

音频详细信息。

此类的一个实例由具有音轨的源提供。您不应修改这些字段,因为它们在内部用于描述源提供的数据格式。

参数:
  • channels (int) -- 声道数:单声道为1,立体声为2(Piglet尚不支持环绕声源)。

  • sample_size (int) -- 每个采样位数;仅支持8位或16位。

  • sample_rate (int) -- 每秒采样数(赫兹)。

class VideoFormat(width: int, height: int, sample_aspect: float = 1.0)

视频详细信息。

这个类的一个实例由视频流的源提供。您不应修改这些字段。

请注意,样本纵横比与视频图像的纵横比无关。例如,采用样例纵横比2.0的640x480视频图像应以1280x480显示。执行此扩展是应用程序的责任。

参数:
  • width (int) -- 视频图像的宽度,以像素为单位。

  • height (int) -- 视频图像的高度,以像素为单位。

  • sample_aspect (float) -- 单个视频像素的纵横比(宽度与高度)。

  • frame_rate (float) -- 视频的帧速率(每秒的帧)。。。版本添加::1.2

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 版本弃用: timestampduration 都是未使用的,最终将被移除。

class SourceInfo

源元数据信息。

如果信息不可用,则字段为空字符串或零。

参数:
  • title (str) -- 标题

  • author (str) -- 作者

  • copyright (str) -- 版权声明

  • comment (str) -- 评论

  • album (str) -- 专辑名称

  • year (int) -- 年

  • track (int) -- 磁道号

  • genre (str) -- 体裁

在 1.2 版本加入.

class Source

音频和/或视频源。

参数:
  • audio_format (AudioFormat) -- 此信号源中的音频格式,或 None 如果信号源是静默的。

  • video_format (VideoFormat) -- 此源中的视频格式,或 None 如果没有视频的话。

  • info (SourceInfo) -- 源元数据,如标题、艺术家等;或 None 如果这些信息不可用。。。版本添加::1.2

is_player_source

确定此源是否为播放器当前源。

查看某项 Player 如果此源是当前源。

类型:

布尔尔

get_animation() Animation

将所有视频帧导入内存。

如果源没有视频,则返回空动画。否则,动画将包含所有未播放的视频帧(如果尚未在播放器上排队,则为整个源)。在创建动画后,源将位于EOS(流结束)。

这种方法不适合播放超过几秒的视频。

在 1.1 版本加入.

返回:

pyglet.image.Animation

get_audio_data(num_bytes: int, compensation_time=0.0) AudioData | None

获取下一包音频数据。

参数:
  • num_bytes (int) -- 要返回的字节数的大小提示,但返回量可能更低或更高。

  • compensation_time (float) -- 由于主时钟和音频时钟之间的差异而进行补偿的时间(秒)。

自 2.0.10 版本弃用: Compensation_Time:将始终作为 0.0

返回:

下一包音频数据,或 None 如果没有(更多)数据。

返回类型:

AudioData

get_next_video_frame() AbstractImage | None

获取下一个视频帧。

在 1.1 版本加入.

返回:

下一个视频帧图像,或 None 如果视频帧无法解码或没有更多的视频帧。

返回类型:

pyglet.image.AbstractImage

get_next_video_timestamp() float | None

获取下一个视频帧的时间戳。

在 1.1 版本加入.

返回:

下一个时间戳,或 None 如果没有更多的视频帧。

返回类型:

float

get_queue_source() Source

返回 Source 用作玩家的队列源。

默认实现返回 self 如果此源的精度与 is_precise() 或者如果 imprecise_ok 给出了论证。否则,一个新的 PreciseStreamingSource 包装此源将返回。

返回:

Source

is_precise() bool

布尔:这个消息来源是否被认为是准确的。

x 源上的字节数 s 如果符合以下条件,则被视为对齐 x % s.audio_format.bytes_per_frame == 0 ,因此在返回的数据中不会有部分音频帧。

源是精确的If-对于对齐的请求 x 字节-它返回:

  • 如果 x 或更多字节可用, x 字节。

  • 如果不再有足够的字节可用, r 字节数,其中 r < xr 是对齐的。

一个消息来源是 not 如果它执行以下任一操作,则精确:

  • 返回值小于 x 的对齐请求的字节数 x 字节,但数据仍然保留,因此其他请求将返回 AudioData /NOT None

  • 返回的字节数多于请求的字节数。

  • 为对齐的请求返回未对齐的字节数。

可以保证,pyglet的内部永远不会发出未对齐的请求或小于1024字节的请求。

如果此方法返回 False ,pyglet将把源代码包装在一个强制对齐的缓冲区中,从而产生额外的开销。

如果重写此方法以返回 True 虽然信号源不符合上述要求,但在最好的情况下,音频播放可能会受到负面影响,在最坏的情况下,可能会发生内存访问违规。

退货:

布尔:消息来源是否准确。

play() Player

播放信号源。

这是一种方便的方法,可以为该源创建一个播放器并立即播放它。

返回:

Player

save(filename: str, file: BinaryIO | None = None, encoder: MediaEncoder | None = None) None

将此源文件保存到文件。

参数:
filename应力

用于设置文件格式,如果是,则打开输出文件 file 未指明。

file类文件对象或无

要向其写入音频数据的文件。

encoder媒体编码器或无

如果未指定,则尝试与文件扩展名匹配的所有编码器。如果所有操作都失败,则会引发第一次尝试的异常。

seek(timestamp: float) None

寻求给定的时间戳。

参数:

timestamp (float) -- 在哪里寻找源头的时间。这个 timestamp 将钳制到源码的持续时间。

property duration: float

信号源的长度,以秒为单位。

并非所有源持续时间都可以确定;在本例中,该值为 None

只读。

类型:

浮动

class StreamingSource

基类:Source

在播放时被解码的信号源。

源文件一次只能在任何 Player

delete() None

释放此StreamingSource持有的资源。

get_queue_source() StreamingSource

返回 Source 被用作球员的来源。

默认实现返回SELF。

返回:

Source

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 包装此源将返回。

返回:

Source

class StaticMemorySource(data, audio_format: AudioFormat)

基类:StaticSource

的默认实现的Helper类 StaticSource

不要直接使用。此类由Piglet在内部使用。

参数:
  • data (readable buffer) -- 音频数据。

  • audio_format (AudioFormat) -- 音频格式。

get_audio_data(num_bytes: float, compensation_time: float = 0.0) AudioData | None

获取下一包音频数据。

参数:

num_bytes (int) -- 要返回的最大数据字节数。

返回:

下一包音频数据,或 None 如果没有(更多)数据。

返回类型:

AudioData

is_precise() bool

布尔:这个消息来源是否被认为是准确的。

x 源上的字节数 s 如果符合以下条件,则被视为对齐 x % s.audio_format.bytes_per_frame == 0 ,因此在返回的数据中不会有部分音频帧。

源是精确的If-对于对齐的请求 x 字节-它返回:

  • 如果 x 或更多字节可用, x 字节。

  • 如果不再有足够的字节可用, r 字节数,其中 r < xr 是对齐的。

一个消息来源是 not 如果它执行以下任一操作,则精确:

  • 返回值小于 x 的对齐请求的字节数 x 字节,但数据仍然保留,因此其他请求将返回 AudioData /NOT None

  • 返回的字节数多于请求的字节数。

  • 为对齐的请求返回未对齐的字节数。

可以保证,pyglet的内部永远不会发出未对齐的请求或小于1024字节的请求。

如果此方法返回 False ,pyglet将把源代码包装在一个强制对齐的缓冲区中,从而产生额外的开销。

如果重写此方法以返回 True 虽然信号源不符合上述要求,但在最好的情况下,音频播放可能会受到负面影响,在最坏的情况下,可能会发生内存访问违规。

退货:

布尔:消息来源是否准确。

seek(timestamp: float) None

寻求给定的时间戳。

参数:

timestamp (float) -- 在哪里寻找源头的时间。

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。

类型:

浮动

class MediaEvent(event, timestamp=0.0, *args)

媒体事件的表示形式。

这些事件由某些音频驱动程序实现在内部使用,以将事件传递给 Player 。一个例子是 on_eos 事件。

参数:
  • event (str) -- 事件描述。

  • timestamp (float) -- 此事件发生的时间。

  • *args -- 此事件所需的任何位置参数。

功能

get_audio_driver()

获取当前平台的首选音频驱动程序。

看见 pyglet.options audio ,和编程指南,章节 播放声音和视频 有关设置首选驱动程序的详细信息,请参阅。

返回:

该平台的首选音频驱动程序的具体实现。

返回类型:

AbstractAudioDriver

load(filename, file=None, streaming=True, decoder=None)

从文件加载源。

将尝试为文件扩展名注册的所有解码器。如果均未成功,则引发来自第一个解码器的异常。您还可以专门传递一个解码器来使用。

参数:
filename应力

用于猜测媒体格式,并在以下情况下加载文件 file 未指明。

file类文件对象或无

任何受支持格式的媒体数据源。

streaming布尔尔

如果 False 一种 StaticSource 将返回;否则(默认)为 StreamingSource 被创造出来了。

decoderMediaDecoder或无

您希望使用的特定解码器,而不是依赖于自动检测。如果指定,则不会尝试其他解码器。

返回类型:

StreamingSource or Source

have_ffmpeg()

检查FFmpeg库是否可用。

返回:

如果找到FFmpeg,则为True。

返回类型:

bool

在 1.4 版本加入.

例外情况

exception CannotSeekException
exception MediaException
exception MediaFormatException