5

ドラム マシンのようなリズムを演奏する Python スクリプトを作成して遊んでいます。PyGame を使用してオーディオを処理しました。ただし、play を呼び出してから実際の音声を聞くまでの間に、許容できない大幅な遅延が発生します。

次のコードを対話型インタープリターに貼り付け、最後の行を何度も実行しました。

import pygame
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=4096)
s = pygame.mixer.Sound('snare.wav')
s.play(loops=0, maxtime=0, fade_ms=0)

Enter キーを押してから音声が聞こえるまでの時間は、私の推測では約 400 ミリ秒であり、実際に目立ち、受け入れられません。遅延は、VLC の再生ボタンをクリックしてオーディオが再生されるのを待った場合とほぼ同じです。

これを Windows と Ubuntu の両方で試しましたが、結果は同じでした。私のコンピュータは少し古いもので、Intel Core i3、2.53GHz ですが、これは問題にはならないと思います。

これについて何ができますか?

ループ内:

このコードは、同じ遅延を示しています。

for i in range(10):
  print i
  s.play(loops=0, maxtime=0, fade_ms=0)
  sleep(2)
4

2 に答える 2

9

考えられる解決策は、バッファーサイズを小さくすることです(例512)。

import pygame
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=512)
s = pygame.mixer.Sound('snare.wav')
s.play(loops=0, maxtime=0, fade_ms=0)
于 2012-11-13T13:51:53.863 に答える
3

私は数分前に同じ問題を抱えていましたが、この別のスレッドで私に役立つ解決策があります

初期化の問題のように見えます。最初に pygame (または XD) を初期化すると、pygame はバッファをうまく取得できません。最初にミキサー init() と pre_init() を初期化し、そこから実験します。

pygame.mixer.pre_init(44100, -16, 2, 512)
pygame.mixer.init()
pygame.init()

それはうまくいくはずです:)頑張ってください!

于 2016-08-11T16:43:16.263 に答える