teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

エラーを、例外に変えました。

2020/10/18 13:03

投稿

akirasada1972
akirasada1972

スコア41

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,9 @@
1
1
  キーボードの、”n””m”を押すと音が鳴るサンプラーを作りたいのですが、
2
- AudioFormatのあたりで、エラーが出ています。
2
+ AudioFormatのあたりで、例外が出ています。
3
- エラー
3
+ 例外
4
4
  javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
5
5
  調べてみると、"LineUnavailableException は、ラインが使用不可のため開けないことを示す例外です。この状況がもっともよく発生するのは、要求されたラインがすでにほかのアプリケーションによって使用されている場合です。"と、ありました。
6
+ ちなみに、他のアプリケーションは、すべて閉じました。
6
7
  ```java
7
8
  AudioFormat frmt= new AudioFormat(44100,16,2,true,false);
8
9
  DataLine.Info info= new DataLine.Info(Clip.class,frmt);

5

音以外の、設定の変更。

2020/10/18 13:03

投稿

akirasada1972
akirasada1972

スコア41

title CHANGED
File without changes
body CHANGED
@@ -13,9 +13,9 @@
13
13
  どなたか、ご指導くださる方、よろしくお願いいたします。
14
14
  ```java
15
15
  import java.awt.BorderLayout;
16
- import java.awt.event.ActionEvent;
16
+ import java.awt.event.KeyEvent;
17
- import java.awt.event.ActionListener;
18
17
  import java.awt.event.KeyListener;
18
+ import java.awt.event.KeyListener;
19
19
  import java.awt.event.KeyEvent;
20
20
  import java.awt.Color;
21
21
  import java.awt.Component;
@@ -46,31 +46,31 @@
46
46
  }
47
47
  }
48
48
 
49
- class Main extends JPanel implements ChangeListener, KeyListener {
49
+ class Main extends JPanel {
50
50
 
51
- byte[] wave_data = new byte[44100];
51
+ static byte[] wave_data = new byte[44100];
52
52
 
53
- JSlider slider1 = new JSlider(0, 1000);
53
+ static JSlider slider1 = new JSlider(0, 1000);
54
- JSlider slider2 = new JSlider(0, 1000);
54
+ static JSlider slider2 = new JSlider(0, 1000);
55
55
  JPanel p1;
56
56
  JPanel p2;
57
57
  JPanel p3;
58
- JPanel p4;
58
+ static JPanel p4;
59
59
  JPanel p5;
60
- JPanel p6;
60
+ JPanel p6, p7, p8;
61
- JLabel label1;
61
+ static JLabel label1;
62
- JLabel label2;
62
+ static JLabel label2;
63
- JLabel label3;
63
+ static JLabel label3;
64
- Clip clip;
65
- Graphics g;
64
+ JButton button1, button2;
66
65
 
67
-
68
66
  Main() {
69
67
 
70
68
  slider1.setValue(100);
69
+ slider1.setFocusable(false);
71
- slider1.addChangeListener(this);
70
+ slider1.addChangeListener(new Slider());
72
71
  slider2.setValue(100);
72
+ slider2.setFocusable(false);
73
- slider2.addChangeListener(this);
73
+ slider2.addChangeListener(new Slider());
74
74
 
75
75
  p1 = new JPanel();
76
76
  p1.add(slider1);
@@ -85,91 +85,93 @@
85
85
  p3.add(label1);
86
86
  p3.add(label2);
87
87
 
88
+ p7 = new JPanel();
89
+ p8 = new JPanel();
90
+ Key key = new Key();
91
+ p7.addKeyListener(key);
92
+ p7.setFocusable(true);
93
+
88
94
  p2 = new JPanel();
89
- // p4.setPreferredSize(new Dimension(600, 400));
90
95
  p2.setLayout(new BorderLayout());
91
96
  p2.add(p1, BorderLayout.NORTH);
92
97
  p2.add(p3, BorderLayout.CENTER);
93
- add(p2);
98
+ p2.add(p7, BorderLayout.SOUTH);
94
99
 
100
+ label3 = new JLabel("");
95
101
  p4 = new JPanel();
96
- // p4.setPreferredSize(new Dimension(600, 200));
102
+ p4.setPreferredSize(new Dimension(600, 200));
97
103
 
104
+ p4.setLayout(new BorderLayout());
105
+ p4.add(label3, BorderLayout.NORTH);
106
+ p4.add(new Paint(), BorderLayout.SOUTH);
107
+
98
- p5 = new JPanel();
108
+ setLayout(new BorderLayout());
109
+ add(p2, BorderLayout.NORTH);
110
+ add(p4, BorderLayout.CENTER);
99
111
  // p5.PpsetPreferredSize(new Dimension(600, 350));
100
- p5.add(p3);
101
- p5.add(p4);
102
- add(p5);
103
-
104
- label3 = new JLabel("");
105
- add(label3);
106
-
107
- setFocusable(true);
108
- addKeyListener(this);
109
112
  }
113
+ }
114
+ class Key implements KeyListener {
110
115
 
111
- public void stateChanged(ChangeEvent e) {
116
+ int i;
112
- label1.setText(""+slider1.getValue());
113
- label2.setText(""+slider2.getValue());
114
- }
115
117
 
116
- void sound(int i) {
117
- try{
118
- double l1 = i*slider1.getValue()/44100.0;
119
- double l2 = i*slider2.getValue()/44100.0;
120
- for(int j=0;j<wave_data.length;j++){
121
- wave_data[j]= (byte)(110*(wave_data.length-(j+1))/wave_data.length*Math.sin((j*l1)*Math.PI*2)
122
- *Math.sin((j*l2)*Math.PI*2));
123
- }
124
- AudioFormat frmt= new AudioFormat(44100,16,2,true,false);
125
- DataLine.Info info= new DataLine.Info(Clip.class,frmt);
126
- clip= (Clip)AudioSystem.getLine(info);
127
- clip.open(frmt,wave_data,0,wave_data.length);
128
- clip.start();
129
- }
130
- catch(Exception e){e.printStackTrace(System.err);}
131
- }
132
-
133
- public void paintComponent(Graphics g) {
134
- super.paintComponent(g);
135
- g.setColor(Color.RED);
136
- for(int i = 0; i < (wave_data.length/200-1); i++) {
137
- g.drawLine(i*2,128-wave_data[i*200],(i+1)*2,128-wave_data[(i+1)*200]);
138
- }
139
- }
140
-
141
- public void keyPressed(KeyEvent e) {
118
+ public void keyPressed(KeyEvent e) {
119
+ Main.label3.setText(e.getKeyText(e.getKeyCode()));
142
120
  if(e.getKeyCode() == KeyEvent.VK_N) {
143
- sound(1);
121
+ new Sound(1);
144
- label3.setText(e.getKeyText(e.getKeyCode()));
122
+ }else if(e.getKeyCode() == KeyEvent.VK_M) {
145
- p4.repaint();
123
+ new Sound(2);
146
124
  }
147
- else if(e.getKeyCode() == KeyEvent.VK_M) {
148
- sound(2);
149
- label3.setText(e.getKeyText(e.getKeyCode()));
150
- p4.repaint();
125
+ Main.p4.add(new Paint());
151
126
  }
152
- }
153
127
 
154
128
  public void keyReleased(KeyEvent e) {
155
129
  // clip.drain();
156
- clip.close();
130
+ // clip.close();
157
- clip.stop();
131
+ // clip.stop();
158
132
  }
159
133
  public void keyTyped(KeyEvent e) {}
160
134
  }
161
135
 
162
- /*class FixString {
136
+ class Paint extends JPanel {
163
- String string;
164
137
 
165
- void setString(String string) {
138
+ protected void paintComponent(Graphics g) {
166
- this.string = string;
139
+ super.paintComponent(g);
140
+ g.setColor(Color.RED);
141
+ for(int i = 0; i < (Main.wave_data.length/200-1); i++) {
142
+ g.drawLine(i*2,128-Main.wave_data[i*200],(i+1)*2,128-Main.wave_data[(i+1)*200]);
143
+ }
167
144
  }
145
+ }
168
146
 
169
- String getString() {
147
+ class Sound {
170
- return string;
171
- }
172
- }*/
173
148
 
149
+ Clip clip;
174
150
 
151
+ Sound(int i) {
152
+ double l1 = i*Main.slider1.getValue()/44100.0;
153
+ double l2 = i*Main.slider2.getValue()/44100.0;
154
+ for(int j=0;j<Main.wave_data.length;j++){
155
+ Main.wave_data[j]= (byte)(110*(Main.wave_data.length-(j+1))/Main.wave_data.length*Math.sin((j*l1)*Math.PI*2)
156
+ *Math.sin((j*l2)*Math.PI*2));
157
+ }
158
+
159
+ try{
160
+ AudioFormat frmt= new AudioFormat(44100,16,2,true,false);
161
+ DataLine.Info info= new DataLine.Info(Clip.class,frmt);
162
+ clip= (Clip)AudioSystem.getLine(info);
163
+ clip.open(frmt,Main.wave_data,0,Main.wave_data.length);
164
+ clip.start();
165
+ }
166
+ catch(Exception e){e.printStackTrace(System.err);}
167
+ }
168
+ }
169
+
170
+ class Slider implements ChangeListener {
171
+ public void stateChanged(ChangeEvent e) {
172
+ Main.label1.setText(""+Main.slider1.getValue());
173
+ Main.label2.setText(""+Main.slider2.getValue());
174
+ }
175
+ }
176
+
175
177
  ```

4

例外の、情報を更新。

2020/10/18 13:00

投稿

akirasada1972
akirasada1972

スコア41

title CHANGED
File without changes
body CHANGED
@@ -1,21 +1,8 @@
1
1
  キーボードの、”n””m”を押すと音が鳴るサンプラーを作りたいのですが、
2
- キーを押しても変化がありません。
3
- キーを押すところあたりが、怪しいのですが、適当な処理ができません。
4
- ```java
5
- public void keyPressed(KeyEvent e) {
6
- if(e.getKeyCode() == KeyEvent.VK_N) {
7
- sound(1);
8
- p4.repaint();
9
- }
10
- else if(e.getKeyCode() == KeyEvent.VK_M) {
11
- sound(2);
12
- p4.repaint();
13
- }
14
-
15
- ```
16
2
  AudioFormatのあたりで、エラーが出ています。
17
3
  エラー:
18
4
  javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
5
+ 調べてみると、"LineUnavailableException は、ラインが使用不可のため開けないことを示す例外です。この状況がもっともよく発生するのは、要求されたラインがすでにほかのアプリケーションによって使用されている場合です。"と、ありました。
19
6
  ```java
20
7
  AudioFormat frmt= new AudioFormat(44100,16,2,true,false);
21
8
  DataLine.Info info= new DataLine.Info(Clip.class,frmt);

3

AudioFormatのあたりで、エラーが出ているので、追記。

2020/10/16 21:41

投稿

akirasada1972
akirasada1972

スコア41

title CHANGED
File without changes
body CHANGED
@@ -13,24 +13,15 @@
13
13
  }
14
14
 
15
15
  ```
16
- KeyListenerオーバーライドの部分を下記のように変えも、変わりせんでした
16
+ AudioFormatあたりでエラーが出
17
+ エラー:
18
+ javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
17
19
  ```java
20
+ AudioFormat frmt= new AudioFormat(44100,16,2,true,false);
21
+ DataLine.Info info= new DataLine.Info(Clip.class,frmt);
18
- public void keyPressed(KeyEvent e) {
22
+ clip= (Clip)AudioSystem.getLine(info);
19
- // if(e.getKeyCode() == KeyEvent.VK_N) {
20
- // sound(1);
21
- label3.setText("hello!");
22
- // p4.repaint();
23
- // }
24
- // else if(e.getKeyCode() == KeyEvent.VK_M) {
25
- // sound(2);
26
- // label3.setText("m");
23
+ clip.open(frmt,wave_data,0,wave_data.length);
27
- // p4.repaint();
24
+ clip.start();
28
- // }
29
- // else {}
30
- }
31
-
32
- public void keyReleased(KeyEvent e) {}
33
- public void keyTyped(KeyEvent e) {}
34
25
  ```
35
26
  どなたか、ご指導くださる方、よろしくお願いいたします。
36
27
  ```java
@@ -83,6 +74,7 @@
83
74
  JLabel label1;
84
75
  JLabel label2;
85
76
  JLabel label3;
77
+ Clip clip;
86
78
  Graphics g;
87
79
 
88
80
 
@@ -99,8 +91,8 @@
99
91
 
100
92
  label1 = new JLabel();
101
93
  label2 = new JLabel();
102
- label1.setText("値:"+slider1.getValue());
94
+ label1.setText(""+slider1.getValue());
103
- label2.setText("値:"+slider2.getValue());
95
+ label2.setText(""+slider2.getValue());
104
96
 
105
97
  p3 = new JPanel();
106
98
  p3.add(label1);
@@ -117,7 +109,7 @@
117
109
  // p4.setPreferredSize(new Dimension(600, 200));
118
110
 
119
111
  p5 = new JPanel();
120
- // p5.setPreferredSize(new Dimension(600, 350));
112
+ // p5.PpsetPreferredSize(new Dimension(600, 350));
121
113
  p5.add(p3);
122
114
  p5.add(p4);
123
115
  add(p5);
@@ -125,12 +117,13 @@
125
117
  label3 = new JLabel("");
126
118
  add(label3);
127
119
 
120
+ setFocusable(true);
128
121
  addKeyListener(this);
129
122
  }
130
123
 
131
124
  public void stateChanged(ChangeEvent e) {
132
- label1.setText("値:"+slider1.getValue());
125
+ label1.setText(""+slider1.getValue());
133
- label2.setText("値:"+slider2.getValue());
126
+ label2.setText(""+slider2.getValue());
134
127
  }
135
128
 
136
129
  void sound(int i) {
@@ -141,9 +134,9 @@
141
134
  wave_data[j]= (byte)(110*(wave_data.length-(j+1))/wave_data.length*Math.sin((j*l1)*Math.PI*2)
142
135
  *Math.sin((j*l2)*Math.PI*2));
143
136
  }
144
- AudioFormat frmt= new AudioFormat(44100,8,1,true,false);
137
+ AudioFormat frmt= new AudioFormat(44100,16,2,true,false);
145
138
  DataLine.Info info= new DataLine.Info(Clip.class,frmt);
146
- Clip clip= (Clip)AudioSystem.getLine(info);
139
+ clip= (Clip)AudioSystem.getLine(info);
147
140
  clip.open(frmt,wave_data,0,wave_data.length);
148
141
  clip.start();
149
142
  }
@@ -159,20 +152,23 @@
159
152
  }
160
153
 
161
154
  public void keyPressed(KeyEvent e) {
162
- // if(e.getKeyCode() == KeyEvent.VK_N) {
155
+ if(e.getKeyCode() == KeyEvent.VK_N) {
163
- // sound(1);
156
+ sound(1);
164
- label3.setText("hello!");
157
+ label3.setText(e.getKeyText(e.getKeyCode()));
165
- // p4.repaint();
158
+ p4.repaint();
166
- // }
159
+ }
167
- // else if(e.getKeyCode() == KeyEvent.VK_M) {
160
+ else if(e.getKeyCode() == KeyEvent.VK_M) {
168
- // sound(2);
161
+ sound(2);
169
- // label3.setText("m");
162
+ label3.setText(e.getKeyText(e.getKeyCode()));
170
- // p4.repaint();
163
+ p4.repaint();
171
- // }
164
+ }
172
- // else {}
173
165
  }
174
166
 
175
- public void keyReleased(KeyEvent e) {}
167
+ public void keyReleased(KeyEvent e) {
168
+ // clip.drain();
169
+ clip.close();
170
+ clip.stop();
171
+ }
176
172
  public void keyTyped(KeyEvent e) {}
177
173
  }
178
174
 
@@ -188,4 +184,5 @@
188
184
  }
189
185
  }*/
190
186
 
187
+
191
188
  ```

2

回答に関する変更。

2020/10/16 21:13

投稿

akirasada1972
akirasada1972

スコア41

title CHANGED
File without changes
body CHANGED
@@ -13,16 +13,27 @@
13
13
  }
14
14
 
15
15
  ```
16
- ご回答があった、下記を追加いたしましたが動きません。
16
+ KeyListenerオーバーライドの部分を、下記のように変えても変わりませんでした
17
17
  ```java
18
- p6 = new JPanel();
19
- p6.addKeyListener(this);
18
+ public void keyPressed(KeyEvent e) {
19
+ // if(e.getKeyCode() == KeyEvent.VK_N) {
20
+ // sound(1);
21
+ label3.setText("hello!");
22
+ // p4.repaint();
23
+ // }
24
+ // else if(e.getKeyCode() == KeyEvent.VK_M) {
25
+ // sound(2);
26
+ // label3.setText("m");
27
+ // p4.repaint();
28
+ // }
29
+ // else {}
30
+ }
20
31
 
32
+ public void keyReleased(KeyEvent e) {}
33
+ public void keyTyped(KeyEvent e) {}
21
34
  ```
22
35
  どなたか、ご指導くださる方、よろしくお願いいたします。
23
36
  ```java
24
- package net.ddns.fantasia;
25
-
26
37
  import java.awt.BorderLayout;
27
38
  import java.awt.event.ActionEvent;
28
39
  import java.awt.event.ActionListener;
@@ -71,6 +82,7 @@
71
82
  JPanel p6;
72
83
  JLabel label1;
73
84
  JLabel label2;
85
+ JLabel label3;
74
86
  Graphics g;
75
87
 
76
88
 
@@ -85,13 +97,6 @@
85
97
  p1.add(slider1);
86
98
  p1.add(slider2);
87
99
 
88
- p2 = new JPanel();
89
- // p4.setPreferredSize(new Dimension(600, 400));
90
- p2.setLayout(new BorderLayout());
91
- p2.add(p1, BorderLayout.CENTER);
92
-
93
- add(p2);
94
-
95
100
  label1 = new JLabel();
96
101
  label2 = new JLabel();
97
102
  label1.setText("値:"+slider1.getValue());
@@ -101,6 +106,13 @@
101
106
  p3.add(label1);
102
107
  p3.add(label2);
103
108
 
109
+ p2 = new JPanel();
110
+ // p4.setPreferredSize(new Dimension(600, 400));
111
+ p2.setLayout(new BorderLayout());
112
+ p2.add(p1, BorderLayout.NORTH);
113
+ p2.add(p3, BorderLayout.CENTER);
114
+ add(p2);
115
+
104
116
  p4 = new JPanel();
105
117
  // p4.setPreferredSize(new Dimension(600, 200));
106
118
 
@@ -110,8 +122,10 @@
110
122
  p5.add(p4);
111
123
  add(p5);
112
124
 
113
- p6 = new JPanel();
125
+ label3 = new JLabel("");
126
+ add(label3);
127
+
114
- p6.addKeyListener(this);
128
+ addKeyListener(this);
115
129
  }
116
130
 
117
131
  public void stateChanged(ChangeEvent e) {
@@ -119,21 +133,6 @@
119
133
  label2.setText("値:"+slider2.getValue());
120
134
  }
121
135
 
122
- public void keyPressed(KeyEvent e) {
123
- if(e.getKeyCode() == KeyEvent.VK_N) {
124
- sound(1);
125
- p4.repaint();
126
- }
127
- else if(e.getKeyCode() == KeyEvent.VK_M) {
128
- sound(2);
129
- p4.repaint();
130
- }
131
- }
132
-
133
- public void keyReleased(KeyEvent e) {}
134
-
135
- public void keyTyped(KeyEvent e) {}
136
-
137
136
  void sound(int i) {
138
137
  try{
139
138
  double l1 = i*slider1.getValue()/44100.0;
@@ -158,6 +157,35 @@
158
157
  g.drawLine(i*2,128-wave_data[i*200],(i+1)*2,128-wave_data[(i+1)*200]);
159
158
  }
160
159
  }
160
+
161
+ public void keyPressed(KeyEvent e) {
162
+ // if(e.getKeyCode() == KeyEvent.VK_N) {
163
+ // sound(1);
164
+ label3.setText("hello!");
165
+ // p4.repaint();
166
+ // }
167
+ // else if(e.getKeyCode() == KeyEvent.VK_M) {
168
+ // sound(2);
169
+ // label3.setText("m");
170
+ // p4.repaint();
171
+ // }
172
+ // else {}
173
+ }
174
+
175
+ public void keyReleased(KeyEvent e) {}
176
+ public void keyTyped(KeyEvent e) {}
161
177
  }
162
178
 
179
+ /*class FixString {
180
+ String string;
181
+
182
+ void setString(String string) {
183
+ this.string = string;
184
+ }
185
+
186
+ String getString() {
187
+ return string;
188
+ }
189
+ }*/
190
+
163
191
  ```

1

コードを、追加しました。

2020/10/16 12:19

投稿

akirasada1972
akirasada1972

スコア41

title CHANGED
File without changes
body CHANGED
@@ -13,8 +13,16 @@
13
13
  }
14
14
 
15
15
  ```
16
+ ご回答があったので、下記を追加いたしましたが、動きません。
17
+ ```java
18
+ p6 = new JPanel();
19
+ p6.addKeyListener(this);
20
+
21
+ ```
16
22
  どなたか、ご指導くださる方、よろしくお願いいたします。
17
23
  ```java
24
+ package net.ddns.fantasia;
25
+
18
26
  import java.awt.BorderLayout;
19
27
  import java.awt.event.ActionEvent;
20
28
  import java.awt.event.ActionListener;
@@ -60,6 +68,7 @@
60
68
  JPanel p3;
61
69
  JPanel p4;
62
70
  JPanel p5;
71
+ JPanel p6;
63
72
  JLabel label1;
64
73
  JLabel label2;
65
74
  Graphics g;
@@ -100,6 +109,9 @@
100
109
  p5.add(p3);
101
110
  p5.add(p4);
102
111
  add(p5);
112
+
113
+ p6 = new JPanel();
114
+ p6.addKeyListener(this);
103
115
  }
104
116
 
105
117
  public void stateChanged(ChangeEvent e) {