我刚刚发现了pygame中的sndarray模块,我想用它将音频波形转换为数字,以便我可以根据音频做一些比如缩放矩形等。这是我编写的一些代码:
audio = pygame.mixer.Sound("example.ogg")
audio.play(-1)
audArray = pygame.sndarray.array(audio)
ticks = pygame.time.get_ticks()
wavForm = audArray[ticks*16] #ticks*16 based on audio rate or something like that
这就是我被困的地方。我不确定wavForm对象的含义或如何将其转换为我可以用于上述示例的内容。谢谢你的帮助。
答案 0 :(得分:0)
我做了这样的事 - 但我不知道它是否有意义。
我使用了一些ogg
文件,我的freq
每秒超过22 000字节(22kHz)。
我使用clock.tick(freq)
每秒获得22 000个循环(并从每个循环的数组中打印一个值)
但我不知道PyGame是否每秒可以制作22000个循环。
import pygame
import pygame.mixer
pygame.init()
pygame.mixer.init()
#-----
audio = pygame.mixer.Sound("example.ogg")
print 'sound length (in seconds):', audio.get_length()
audio_array = pygame.sndarray.array(audio)
print 'array length (in bytes):', len(audio_array)
freq = len(audio_array)/audio.get_length() # frequences (loops per seconds)
print 'freq / bytes per second:', freq
#-----
clock = pygame.time.Clock()
#start_time = pygame.time.get_ticks()
raw_input("\npress ENTER ")
audio.play(-1)
for left, right in audio_array:
#current_time = pygame.time.get_ticks()
#play_time = current_time - start_time
print left, right
clock.tick(freq)