質問編集履歴

3

アドバイス頂いた後のコード

2021/06/26 11:40

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -621,3 +621,87 @@
621
621
  multiprocessingが簡易なのではとコーディングしましたが、音楽は流れて波形も表示されていますが、画像表示のボタンを押した際にフリーズになってしまいました。
622
622
 
623
623
  ![イメージ説明](47f4eab8e89f0b60f80cd380bf6ae0e8.png)
624
+
625
+
626
+
627
+ ### アドバイス頂いた直後に実践したコード
628
+
629
+ ```python
630
+
631
+ # 先頭に
632
+
633
+ # ファイルの先頭で
634
+
635
+ import logging
636
+
637
+ logger = logging.getLogger(__name__)
638
+
639
+
640
+
641
+ # ログにスレッド名を表示&ロギングを有効にする設定
642
+
643
+ # if __name__ == "__main__": 内に置きたいが、なければファイル先頭でもok
644
+
645
+ logging.basicConfig(level=logging.DEBUG, format="[%(threadName)-10s][%(levelname)-8s] %(message)s")
646
+
647
+
648
+
649
+ # logger モジュールは、スレッドセーフなので、どこからでも安全に呼び出せます。
650
+
651
+ # print の代わりに利用 logger.info, logger.debug, logger.error, 等
652
+
653
+ fn = "futta-fly.wav"
654
+
655
+ logger.debug(f"debug message: {fn=}") # f-string で変数 fn を表示
656
+
657
+
658
+
659
+ #~略~
660
+
661
+
662
+
663
+ def play_audio():
664
+
665
+ # TODO: リソース作成・解放はスレッド側で完結する
666
+
667
+ wf = wave.open(filename, "r")
668
+
669
+ # ストリームを開く
670
+
671
+ p = pyaudio.PyAudio()
672
+
673
+ stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
674
+
675
+ channels=wf.getnchannels(),
676
+
677
+ rate=wf.getframerate(),
678
+
679
+ output=True)
680
+
681
+
682
+
683
+ # 音声を再生
684
+
685
+ data = wf.readframes(CHUNK)
686
+
687
+ while True:
688
+
689
+ stream.write(data)
690
+
691
+ redraw()
692
+
693
+
694
+
695
+ elif event in '-do-':
696
+
697
+ # ボタンを押した時に開始
698
+
699
+ thread = threading.Thread(target=play_audio, args=(data_que,ui_que), daemon=True)
700
+
701
+ thread.start()
702
+
703
+ ```
704
+
705
+ doボタンを押下しても下記コンソールのみですぐウィンドウが閉じてしまいました。
706
+
707
+ ![イメージ説明](7cea8bb5616aeb13c2da03f2651efd0f.png)

2

アドバイス実践①追加

2021/06/26 11:40

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -605,3 +605,19 @@
605
605
  PySimpleGUI
606
606
 
607
607
  Python3.8.8
608
+
609
+
610
+
611
+ ### アドバイス直後に実装したコード①
612
+
613
+
614
+
615
+ 先ほどこちらにコード記載したところ18000文字となってしまい8000文字オーバーになってしまいました。
616
+
617
+ コメントに記載してみます。
618
+
619
+
620
+
621
+ multiprocessingが簡易なのではとコーディングしましたが、音楽は流れて波形も表示されていますが、画像表示のボタンを押した際にフリーズになってしまいました。
622
+
623
+ ![イメージ説明](47f4eab8e89f0b60f80cd380bf6ae0e8.png)

1

リンク切れ修正

2021/06/26 10:55

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
  ①[PySimpleGUIを使用したmultithreadの作り方](https://qiita.com/Gyutan/items/f41f39bc3df7d788ffc5)
14
14
 
15
- ②[スペクトラム波形作成
16
-
17
- ](https://teratail.com/questions/289920)
15
+ ②[スペクトラム波形作成](https://teratail.com/questions/289920)
16
+
17
+
18
18
 
19
19
  ③[
20
20