根据python中的时间将sndarray翻译成数字?

时间:2014-07-01 18:14:17

标签: python audio pygame

我刚刚发现了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对象的含义或如何将其转换为我可以用于上述示例的内容。谢谢你的帮助。

1 个答案:

答案 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)