2017-05-20 17 views
0

Windows上で簡単なKivyアプリケーションを実行します。play()が初めて呼び出されたときにKivyがサウンドファイルを再生しない

def play_audio(self): 
    sound = SoundLoader.load('output.wav') 
    if sound: 
     print("Sound found at %s" % sound.source) 
     print("Sound is %.3f seconds" % sound.length) 
     sound.play() 

ボタンが押された最初の時間は、それはその後、音の約半分秒を果たしており、どちらかすぐに停止するか、それがすべてでは何もプレイしていない:ボタンが押されたときにKivyドキュメント(link)からメソッドを以下の実行します。もう一度ボタンを押すと、ファイル全体が期待どおりに再生されます。

最初のボタンを押したときにファイルが再生されないのはなぜですか。また、正しく動作させるにはどうすればよいですか?

ご協力いただきまして誠にありがとうございます。

+0

あなたはkivyイベントループを実行していますか?あなたはおそらく中断しています – user2722968

+0

私はイベントループがMyApp()を意味すると仮定します。run()(これは初めてです)。そうであれば、実行中です。問題がメインループに関連していて、2回目にボタンをクリックしてもそれが意味をなさないのではないかと思います。 – orangeInk

答えて

0

私はthisスレッドが便利だと思います。ボタンはそうであっても同様に押される前に一度音をロードしてみてください。

from kivy.core.audio import SoundLoader 
from kivy.base import runTouchApp 
from kivy.uix.button import Button 
import time 

sound = SoundLoader.load('output.wav') 
sound.seek(0) 

class MyLabel(Button): 
    def on_release(self): 
     start_time = time.time() 
     self.play_sound() 
     print("--- %s seconds ---" % (time.time() - start_time)) 

    def play_sound(self): 
     if sound: 
      print("Sound found at %s" % sound.source) 
      print("Sound is %.3f seconds" % sound.length) 
      sound.play() 

runTouchApp(MyLabel(text="Press me for a sound")) 

play_sound()機能を使用すると、sound.seek(0)をすれば私のマシン上で完了するのに約10分の時間がかかりました。

+0

(非常に)遅れて返事申し訳ありません、私は離れていました。私は実際にそれを試みたと思う(私は研究の間にスレッドを見つけた)、それは問題を解決しなかった。私は時間があればもう一度試してみるよ。また、kivy.deps.gstreamer(https://kivy.org/docs/installation/installation-windows.html#kivy-dependencies)をインストールしていないことに気付きました。gstreamerがそれを修正した場合、後で確認します。 – orangeInk

+0

ええ、gstreamerが役立つかもしれません。あなたは時間があればどうなるか教えてください、私はとても興味があります... –

関連する問題