回答編集履歴
2
追加
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
改行修正
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
|
|