python - Pygameムービーを再生するたびに音が出ない

原文 python audio video pygame movie

Pythonスクリプトのpygameビデオからのサウンドに問題があります

ループの前に私はそれをそのように初期化します:

pygame.init()
pygame.mixer.quit()


whileループセンサーは、そのようなビデオ再生をトリガーできます。

pygame.display.init()               
movie = pygame.movie.Movie(path)
if movie.has_video():
   screen = pygame.display.set_mode(movie.get_size())
   pygame.display.update()

   movie.set_display(screen)
   movie.set_volume(0.99)

   movie.play()

   while movie.get_busy():
         time.sleep(.100)

   pygame.display.quit()


映画を初めて再生するときは、音声を利用できます。 2回目は音が出ず、3回目は再び正常に動作します...など。

pygame.display.initの後にpygame.mixer.get_initをチェックした場合、ミキサーが初期化されていればfalseを返します。

また、ループ内にpygame.mixer.quit()を置くと、ビデオは本当に遅くなり(これもサウンドなし)、少し後に完全に停止します。
答え
おそらく回答よりも回避策の方が多いでしょう:

複数の映画を再生しているときにpygame.movi​​eがサウンドを再生し続ける唯一の方法は次のとおりです。


最初のムービーを作成する前に、pygame.mixer.quit()を呼び出します
新しい映画を再生したいときはいつでも、movie = pygame.movie.Movie('SOMEOTHERVIDEO.MPG')を2回呼び出します。
奇妙ですが、私にとっては、それが機能する唯一の方法です。これはwin7 / python3にあります
movie=への2つの呼び出しの最初からpygame.movie.Movie('SOMENEWVIDEO.MPG')を削除すると、この回避策が機能しなくなるのは特に奇妙です。


とにかくここに私のために働くいくつかのコードがあります:

import pygame

FPS = 60

pygame.init()
clock = pygame.time.Clock()
pygame.mixer.quit()
movie = pygame.movie.Movie('SOMEVIDEO.mpg')
screen = pygame.display.set_mode(movie.get_size())
movie_screen = pygame.Surface(movie.get_size()).convert()

movie.set_display(movie_screen)
movie.play()

cnt = 0
playing = True
while playing:
    cnt+=1
    if cnt>=500:
        cnt=0
        movie.stop()
        movie = pygame.movie.Movie('SOMEOTHERVIDEO.mpg')
        movie = pygame.movie.Movie('SOMEOTHERVIDEO.mpg')
        movie_screen = pygame.Surface(movie.get_size()).convert()
        movie.set_display(movie_screen)
        movie.play()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            movie.stop()
            playing = False
    screen.blit(movie_screen,(0,0))
    pygame.display.update()
    clock.tick(FPS)

pygame.quit()
関連記事

python - 辞書からの文字と記号のペアをコード化されたメッセージ/ Pythonのテキストファイルに置き換える方法

python - ジェネレーターによって生成された値の周波数分析

python - Pythonのインポートが非常に遅い

python - テストケースが失敗したときに分解をスキップする

python - 2番目のスクリプトが実行中か、すでに終了しているかを確認します

python - 関数/リージョンがBeaker / Dogpileにキャッシュされているかどうかをテストする

python - pygameキーボードを使用して画面上のテキストを移動する

python - get_or_createで別のオブジェクトを使用してオブジェクトを更新する方法

python - QmenuをMatplotlib Canvasに正しく配置する

python - nosetestの属性/タグを持つdoctestの選択