2017-05-26 21 views
0

我想連續播放嘟嘟聲,直到文本在終端上動態顯示。這裏是我的代碼。如何在python中動態顯示文本時在後臺播放聲音?

import time 
import sys 
import winsound 


winsound.Beep(1000, 5000) 

def printf(s): 

    for c in s: 
     sys.stdout.write('%s' % c) 
     sys.stdout.flush() 
     time.sleep(0.0203) 

printf("Hello I am Jishan Bhattacharya.") 
+0

那聞起來像多線程,多處理RESP如果先不工作,你可以執行嘟嘟聲與寫作文本另一個線程,所以他們在西港島線相同常,[多線程(HTTPS執行://www.tutorialspoint。 com/python/python_multithreading.htm)[multiprocessing](https://pymotw.com/2/multiprocessing/basics.html)。多線程更簡單,但有可能因爲python GIL(python無法使用線程,只有快速切換執行路徑)而無法工作。 – tino415

回答

0

你需要做這樣的事情,但我的測試表明我的,你水溼用它來與Beep.You可以節省聲音爲WAV文件,來代替。

winsound.PlaySound(sound, winsound.SND_ASYNC) 
0

您可以創建一個新的線程並開始運行後,創建一個布爾停止線程though this will cause little pauses

沒有明顯的方法來使用蜂鳴聲並使其停止動態。

import threading 

class beeper(threading.Thread): 
    def run(self): 
     self.keeprunning = True 
     while self.keeprunning: 
      winsound.Beep(freq, dur) // make a short dur to make sure it stops soon after printing ends 
beep = beeper() 
beep.start() 
printf(string) 
beep.keeprunning = False 
+0

請將'winsound.beep'編輯爲'winsound.Beep'。我嘗試了你的代碼,但事情是在文本完成顯示後還繼續發出嗶嗶聲。 – J16N

+0

添加了一個停止子句,使持續時間短,以便驗證它應該經常運行 – IsaacDj

+0

嘗試了您的代碼,但是這次它動態地無限次地打印文本,並且在嘟嘟聲之間出現了一個似乎很奇怪的中斷。 – J16N