回答編集履歴

2

追加

2020/03/08 19:27

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -8,6 +8,18 @@
8
8
 
9
9
 
10
10
 
11
+ [read(byte[] b, int off, int len)](https://docs.oracle.com/javase/jp/8/docs/api/javax/sound/sampled/AudioInputStream.html#read-byte:A-int-int-) のほうには明示的にブロックとは書いていませんが,
12
+
13
+
14
+
15
+ > オーディオ・ストリームから指定されたデータの最大バイト数まで読み込み、読み込んだバイトを指定されたバイト配列に格納します。
16
+
17
+
18
+
19
+ とあり, 最大まで読み込むとあったり, read(byte[] b) → read(byte[] b,0,b.length) という呼び出しの連鎖になっている場合が多いため, ブロックするものと推測します. (ソースは確認していません.)
20
+
21
+
22
+
11
23
  Swing はシングルスレッドですので, actionPerformed 内でブロックすれば, 再描画を含めた全体が止まります.
12
24
 
13
25
  そして, sys.startrec が終わって actionPerformed を抜ければ動き出しますが, その時バッファ(recordsys.wavedata) には最後の 1 秒分のデータしかありません.

1

改行修正

2020/03/08 19:27

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -1,6 +1,4 @@
1
- 「開始」ボタンで actionPerformed から呼ばれる sys.startrec メソッド内で実行される
1
+ 「開始」ボタンで actionPerformed から呼ばれる sys.startrec メソッド内で実行される AudioInputStream#read によって, 計 5 秒ブロックしているものと思います.
2
-
3
- AudioInputStream#read によって, 計 5 秒ブロックしているものと思います.
4
2
 
5
3
 
6
4