質問編集履歴

3

コードの修正

2021/05/23 03:50

投稿

ryu-sei
ryu-sei

スコア12

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  コードが間違っているのでしょうか。
16
16
 
17
- ![イメージ説明](3f6a22fe95e63ec4679e159f5928e67a.png)
17
+ ![イメージ説明](0f16695db7ce4ef40ac667fbccb1c02b.png)
18
18
 
19
19
  ### 該当のソースコード
20
20
 
@@ -22,27 +22,17 @@
22
22
 
23
23
  ```java
24
24
 
25
-
26
-
27
-
28
-
29
-
30
-
31
25
  public class App extends Application
32
26
 
33
27
  {
34
28
 
35
29
  // 定数
36
30
 
37
- private final String fileName = "C:\Users\(名前)\Music\sine_-06_05_00020.wav"; // チャートに表示する音声ファイルへのパス
31
+ private final String fileName = "C:\Users\(名前\Music\sine_-06_05_00020.wav"; // チャートに表示する音声ファイルへのパス
38
32
 
39
-
40
33
 
41
- // 取得する音声情報用の変数
42
34
 
43
- private AudioFormat format = null;
35
+ private byte[] values = null;
44
-
45
- private ArrayList<Integer> values = new ArrayList<>();
46
36
 
47
37
 
48
38
 
@@ -60,9 +50,25 @@
60
50
 
61
51
  {
62
52
 
53
+ // フォント色がおかしくなることへの対処
54
+
55
+ System.setProperty( "prism.lcdtext" , "false" );
56
+
57
+
58
+
59
+ // シーングラフの作成
60
+
61
+ HBox root = new HBox();
62
+
63
+
64
+
65
+ // チャートを作成
66
+
63
67
  init();
64
68
 
69
+
70
+
65
-      root.getChildren().add( createLineChart() ); // 折れ線グラフの追加
71
+ root.getChildren().add( createLineChart() ); // 折れ線グラフの追加
66
72
 
67
73
 
68
74
 
@@ -78,23 +84,55 @@
78
84
 
79
85
  {
80
86
 
81
- try (FileInputStream input= new FileInputStream(fileName)) {
87
+ InputStream input = null;
82
88
 
83
- InputStreamReader iSReader = new InputStreamReader(input, "UTF-8");
89
+ Logger logger = Logger.getLogger(App.class.getName());
84
90
 
85
-
91
+
86
92
 
87
- int data;
93
+ try {
88
94
 
89
- while ((data = iSReader.read()) != -1) {
95
+ // wavを読み込む
90
96
 
97
+ input= new FileInputStream(fileName);
98
+
99
+ values = new byte[input.available()];
100
+
101
+
102
+
103
+ // input.read(wavData)
104
+
105
+ String readBytes = String.format(
106
+
107
+ Locale.US, "read bytes = %d",input.read(values));
108
+
109
+ // input.read(wavData)のwarning回避のためだけ
110
+
111
+ logger.log(Level.INFO, readBytes);
112
+
91
- values.add(data);
113
+ input.close();
114
+
115
+ } catch (FileNotFoundException fne) {
116
+
117
+ fne.printStackTrace();
118
+
119
+ } catch (IOException ioe) {
120
+
121
+ ioe.printStackTrace();
122
+
123
+ logger.log(Level.INFO, "error");
124
+
125
+ } finally{
126
+
127
+ try{
128
+
129
+ if(input != null) input.close();
130
+
131
+ }catch(Exception e){
132
+
133
+ e.printStackTrace();
92
134
 
93
135
  }
94
-
95
- } catch (IOException e) {
96
-
97
- e.printStackTrace();
98
136
 
99
137
  }
100
138
 
@@ -102,7 +140,9 @@
102
140
 
103
141
 
104
142
 
143
+ @SuppressWarnings("unchecked")
144
+
105
- public Node createLineChart()
145
+ public Node createLineChart()
106
146
 
107
147
  {
108
148
 
@@ -118,7 +158,7 @@
118
158
 
119
159
  Logger logger = Logger.getLogger(App.class.getName());
120
160
 
121
- String p = String.valueOf(values.size());
161
+ String p = String.valueOf(values.length);
122
162
 
123
163
  logger.log(Level.INFO, p);
124
164
 
@@ -134,7 +174,7 @@
134
174
 
135
175
  {
136
176
 
137
- series1.getData().add( new XYChart.Data<Number, Number>( i , values.get(i) ) );
177
+ series1.getData().add( new XYChart.Data<Number, Number>( i , values[i] ) );
138
178
 
139
179
  }
140
180
 
@@ -142,10 +182,14 @@
142
182
 
143
183
  // データを登録
144
184
 
145
- chart.getData().addAll( series1 );
185
+ chart.getData().addAll( series1 );
146
186
 
147
187
  return chart;
148
188
 
149
189
  }
150
190
 
191
+ }
192
+
193
+
194
+
151
195
  ```

2

コードの修正

2021/05/23 03:50

投稿

ryu-sei
ryu-sei

スコア12

test CHANGED
File without changes
test CHANGED
@@ -8,63 +8,13 @@
8
8
 
9
9
  androidstudioと同じ文法形式で作りたいのでAudioInputStreamを使わずに解決したいです。
10
10
 
11
- おそらく「エラー箇所」と書いてある部分やgetResourceAsStreamの使い方が間違っていると思うのですが対処法がよくわかりません。
12
-
13
11
  教えていただきたいです。
14
12
 
13
+ 追記:いただいた回答を元に自分なりに作ってみたのですが下のような画像になりました。(音源はsin波で音源側に問題はないです。)
15
14
 
15
+ コードが間違っているのでしょうか。
16
16
 
17
- ### 発生している問題・エラーメッセージ
18
-
19
-
20
-
21
- ```
22
-
23
- Exception in Application init method
24
-
25
- java.lang.reflect.InvocationTargetException
26
-
27
- at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
28
-
29
- at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
30
-
31
- at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
32
-
33
- at java.base/java.lang.reflect.Method.invoke(Method.java:567)
34
-
35
- at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
36
-
37
- at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
38
-
39
- at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
40
-
41
- at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
42
-
43
- at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
44
-
45
- at java.base/java.lang.reflect.Method.invoke(Method.java:567)
46
-
47
- at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
48
-
49
- Caused by: java.lang.RuntimeException: Exception in Application init method
50
-
51
- at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:895)
52
-
53
- at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
54
-
55
- at java.base/java.lang.Thread.run(Thread.java:831)
17
+ ![イメージ説明](3f6a22fe95e63ec4679e159f5928e67a.png)
56
-
57
- Caused by: java.lang.NullPointerException: Cannot invoke "java.io.InputStream.available()" because "<local2>" is null at App.init(App.java:79)
58
-
59
- at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:824)
60
-
61
- ... 2 more
62
-
63
- Exception running application App
64
-
65
- ```
66
-
67
-
68
18
 
69
19
  ### 該当のソースコード
70
20
 
@@ -92,7 +42,7 @@
92
42
 
93
43
  private AudioFormat format = null;
94
44
 
95
- private byte[] values = null;
45
+ private ArrayList<Integer> values = new ArrayList<>();
96
46
 
97
47
 
98
48
 
@@ -112,6 +62,14 @@
112
62
 
113
63
  init();
114
64
 
65
+      root.getChildren().add( createLineChart() ); // 折れ線グラフの追加
66
+
67
+
68
+
69
+ // シーンの作成
70
+
71
+ Scene scene = new Scene( root , 900 , 300 );
72
+
115
73
  }
116
74
 
117
75
 
@@ -120,60 +78,74 @@
120
78
 
121
79
  {
122
80
 
123
- Logger logger = Logger.getLogger(App.class.getName());
81
+ try (FileInputStream input= new FileInputStream(fileName)) {
124
82
 
125
- // 音声ストリームを取得
83
+ InputStreamReader iSReader = new InputStreamReader(input, "UTF-8");
126
84
 
127
- InputStream input = null;
85
+
128
86
 
129
-
87
+ int data;
130
88
 
131
- try {
89
+ while ((data = iSReader.read()) != -1) {
132
90
 
133
- // wavを読み込む
134
-
135
- input = App.class.getClass().getResourceAsStream("sine_-06_05_00020.wav");
136
-
137
- values = new byte[input.available()];//エラー箇所
138
-
139
-
140
-
141
- // input.read(wavData)
142
-
143
- String readBytes = String.format(
144
-
145
- Locale.US, "read bytes = %d",input.read(values));
146
-
147
- // input.read(wavData)のwarning回避のためだけ
148
-
149
- logger.log(Level.INFO,readBytes);
150
-
151
- input.close();
91
+ values.add(data);
152
-
153
- } catch (FileNotFoundException fne) {
154
-
155
- fne.printStackTrace();
156
-
157
- } catch (IOException ioe) {
158
-
159
- ioe.printStackTrace();
160
-
161
- logger.log(Level.INFO, "error");
162
-
163
- } finally{
164
-
165
- try{
166
-
167
- if(input != null) input.close();
168
-
169
- }catch(Exception e){
170
-
171
- e.printStackTrace();
172
92
 
173
93
  }
94
+
95
+ } catch (IOException e) {
96
+
97
+ e.printStackTrace();
174
98
 
175
99
  }
176
100
 
177
101
  }
178
102
 
103
+
104
+
105
+ public Node createLineChart()
106
+
107
+ {
108
+
109
+ // 折れ線グラフ
110
+
111
+ NumberAxis xAxis = new NumberAxis();
112
+
113
+ NumberAxis yAxis = new NumberAxis();
114
+
115
+ LineChart<Number, Number> chart = new LineChart<Number, Number>( xAxis , yAxis );
116
+
117
+ chart.setMinWidth( 900 );
118
+
119
+ Logger logger = Logger.getLogger(App.class.getName());
120
+
121
+ String p = String.valueOf(values.size());
122
+
123
+ logger.log(Level.INFO, p);
124
+
125
+
126
+
127
+ // データを作成
128
+
129
+ Series< Number , Number > series1 = new Series<Number, Number>();
130
+
131
+ series1.setName( "チャンネル1" );
132
+
133
+ for( int i=0 ; i<1000 ; i++ )
134
+
135
+ {
136
+
137
+ series1.getData().add( new XYChart.Data<Number, Number>( i , values.get(i) ) );
138
+
139
+ }
140
+
141
+
142
+
143
+ // データを登録
144
+
145
+ chart.getData().addAll( series1 );
146
+
147
+ return chart;
148
+
149
+ }
150
+
179
151
  ```

1

誤字の修正

2021/05/23 03:29

投稿

ryu-sei
ryu-sei

スコア12

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  を参考にvscodeでwav音源を波形にするためにwav音源の配列を作ろうとしています。
8
8
 
9
- 最終的にandroidstudioに持って行きたいのでAudioInputStreamを使わずに解決したいです。
9
+ androidstudioと同じ文法形式で作りたいのでAudioInputStreamを使わずに解決したいです。
10
10
 
11
11
  おそらく「エラー箇所」と書いてある部分やgetResourceAsStreamの使い方が間違っていると思うのですが対処法がよくわかりません。
12
12