2012-05-21 3 views
2

다음 코드 :왜 pygame.sndarray.make_sound는 사운드 지속 시간의 4 배가 될까요?

import pygame, numpy 
pygame.mixer.pre_init(frequency=96000,size=-16,channels=1) 
pygame.init() 
a = numpy.random.randn(96000) 
sound = pygame.sndarray.make_sound(a) 
print sound.get_length() 

는 96000kHz 샘플링 속도에서 96000 개 지정된 샘플 기간은 어떻게 든 길을 따라 어딘가에 배로 것을 제안, 4.0의 인쇄 출력을 얻을 수 있습니다. 내가 여기서 무엇을 놓치고 있는지 아는 어떤 생각?

답변

4

make_sound로 들어가는 데이터는 16 비트 정수가 아닙니다 (pre_init()에서 제시 한대로). 호출 make_sound 전에()

a = a.astype(numpy.int16) 

당신은 또한 당신이 그 (것)들을 16 개 비트의 int의 범위에 해당됩니다하여 난수를 생성하는 방법을 사용하는 것이 확인 할 수 있습니다 ... 시도합니다. 배열의 값은 -32768에서 32767 사이 여야합니다 (최대 볼륨을 나타내는 경계).

관련 문제