在python中将sndarray转换为基于时间的数字?

2024-09-26 18:07:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚发现了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对象是什么意思,也不知道如何将其转换为可以用于上述示例的内容。谢谢你的帮助


Tags: 模块代码example数字音频pygameaudio波形
1条回答
网友
1楼 · 发布于 2024-09-26 18:07:05

我做了这样的东西-但我不知道它是否有意义

我使用了一些ogg文件,每秒freq超过22000字节(22kHz)。
我使用clock.tick(freq)每秒获得22000个循环(并从每个循环的数组中打印一个值)
但我不知道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)

相关问题 更多 >

    热门问题