首页 > 解决方案 > Pyglet - 获取声音频率

问题描述

我想获得使用 media.load() 加载的声音的频率,以便以后可以将其可视化,有没有办法使用 pyglet 来做到这一点?

标签: pythonpyglet

解决方案


任何登陆这里的人,包括你 OP。
要浏览此信息(在许多其他情况下很有帮助),请尝试查看您正在使用的变量。

mport pyglet

music = pyglet.media.load('./test.wav')
music.play()

pyglet.app.run()

这是一个简单的音乐播放器,它可以工作(如果你想播放 .mp3 等,则需要 avbin7)

现在,你想得到频率吗?
如果您不知道如何,请始终从探索和/或变量开始:

print(dir(music))

这将立即给你一个死的放弃:

['__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_audio_buffer', '_audio_stream', '_audio_stream_index', '_buffered_audio_data', '_decode_audio_packet', '_decode_video_packet', '_duration', '_ensure_video_packets', '_events', '_file', '_get_duration', '_get_packet', '_get_queue_source', '_is_queued', '_packet', '_process_packet', '_video_stream', '_video_stream_index', '_video_timestamp', 'audio_format', 'delete', 'duration', 'get_animation', 'get_audio_data', 'get_next_video_frame', 'get_next_video_timestamp', 'info', 'is_queued', 'play', 'seek', 'video_format']

在这里,video_format向我伸出了手,看着我们找到的剩余的那堆东西audio_format

这应该像针一样戳你的眼睛。
下一个合乎逻辑的步骤是打印该变量,这些替代方案中的任何一个都是不错的选择:

print(music.audio_format)
print(music.audio_format())
print(dir(audio_format))

但第一个会给你:

AudioFormat(channels=2, sample_size=16, sample_rate=44100)

它就在那里,44100Hz. 您正在寻找的频率。

import pyglet

music = pyglet.media.load('./test.wav')
print(dir(music)) # find music.audio_format / music.video_format
print(music.audio_format) # try it out
# >>> AudioFormat(channels=2, sample_size=16, sample_rate=44100)
music.play()
pyglet.app.run()

推荐阅读