回答編集履歴

1

見直しキャンペーン中

2023/07/18 22:04

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -1,261 +1,131 @@
1
+ ```Processing
2
+ // 一度に送れるデータ(1byte)に変換
3
+ map(val, 0, 1023, 0, 255);
1
4
  ```
2
-
5
+ の部分は
6
+ ```Processing
3
7
  // 一度に送れるデータ(1byte)に変換
4
-
5
- map(val, 0, 1023, 0, 255);
8
+ val = map(val, 0, 1023, 0, 255);
6
-
7
9
  ```
8
-
9
- の部分は
10
-
11
- ```
12
-
13
- // 一度に送れるデータ(1byte)に変換
14
-
15
- val = map(val, 0, 1023, 0, 255);
16
-
17
- ```
18
-
19
10
  の間違いじゃないでしょうか?(Arduinoが手元にないので確認できませんが)
20
-
21
-
22
11
 
23
12
  > 201~300=Cと割り当てたとして
24
13
 
25
-
26
-
27
14
  送受信処理を簡略化させるため、データを1バイト(0~255)に圧縮(センサーの値が0だったら0 1023だったら255 512だったら127に)している(ちょうど↑のコードのところ)ので、256以上は来ません。
28
-
29
-
30
15
 
31
16
  > arduinoのシリアルモニターでは0~350位は値が動きました
32
17
 
33
-
34
-
35
18
  これがセンサーの値なら、Processing側は0~87くらいしか変動しないことになります(数段階の音を出すなら十分すぎですが)
36
-
37
-
38
19
 
39
20
  気になった点は以上です。
40
21
 
22
+ ---
41
23
 
24
+ **参考コード**
25
+ Arduinoがないのでセンサーの代わりに、マウスX座標にさせていただきました(画面内でマウスを左右に動かすと曲が変わります)
26
+ データ受信のところをコメント化しましたが、元に戻せばおそらく動くと思います。
27
+
28
+ 素直に書いてみた場合
29
+ ```Processing
30
+ import ddf.minim.Minim;
31
+ import ddf.minim.AudioPlayer;
32
+ import processing.serial.Serial;
33
+
34
+ Serial port;
35
+ Minim minim;
36
+ AudioPlayer sound0; // 曲 いっこ目
37
+ AudioPlayer sound1; // 曲 にこ目
38
+ AudioPlayer sound2; // 曲 さんこ目
39
+
40
+ void setup() {
41
+ size(480, 240);
42
+ // ↓コメント解除
43
+ //port = new Serial(this, "COM3", 9600);
44
+ minim = new Minim(this);
45
+ sound0 = minim.loadFile("groove.mp3");
46
+ sound1 = minim.loadFile("jingle.mp3");
47
+ sound2 = minim.loadFile("groove.mp3");
48
+ }
49
+
50
+ void draw() {
51
+ // ↓コメント解除
52
+ //if (port.available() > 0 ) {
53
+ // // シリアルデータ受信
54
+ // int in_data = port.read();
55
+ int in_data = int(map(mouseX, 0, width, 0, 255)); // これは削除
56
+
57
+ if (in_data < 100) { // sound0の範囲だったら...
58
+ if (!sound0.isPlaying()) { // sound0を再生中でなかったら...(再生中ならそのまま何もしない)
59
+ sound1.pause(); // 他をポーズ(再生していなくてもポーズを呼ぶこと自体は問題ない)
60
+ sound2.pause();
61
+ sound0.loop(); // ポーズ位置から再度ループ再生
62
+ }
63
+ } else if (in_data < 200) { // 以下同じように
64
+ if (!sound1.isPlaying()) {
65
+ sound0.pause();
66
+ sound2.pause();
67
+ sound1.loop();
68
+ }
69
+ } else {
70
+ if (!sound2.isPlaying()) {
71
+ sound0.pause();
72
+ sound1.pause();
73
+ sound2.loop();
74
+ }
75
+ }
76
+ //} // ここもコメント解除
77
+ }
78
+ ```
79
+
80
+ 配列と関数を使ってみた場合
81
+ ```Processing
82
+ import ddf.minim.Minim;
83
+ import ddf.minim.AudioPlayer;
84
+ import processing.serial.Serial;
85
+
86
+ Serial port;
87
+ Minim minim;
88
+ AudioPlayer[] sounds; // 曲の配列
89
+ AudioPlayer playing; // 再生中の曲(最初はnull)
90
+
91
+ void setup() {
92
+ size(480, 240);
93
+ // ↓コメント解除
94
+ //port = new Serial(this, "COM3", 9600);
95
+ minim = new Minim(this);
96
+ sounds = new AudioPlayer[]{
97
+ minim.loadFile("groove.mp3"), // 曲 いっこ目(配列の番号は0)
98
+ minim.loadFile("jingle.mp3"), // 曲 にこ目(1)
99
+ minim.loadFile("groove.mp3"), // 曲 さんこ目(2)
100
+ };
101
+ }
102
+
103
+ void draw() {
104
+ // ↓コメント解除
105
+ //if (port.available() > 0 ) {
106
+ // // シリアルデータ受信
107
+ // int in_data = port.read();
108
+ int in_data = int(map(mouseX, 0, width, 0, 255)); // これは削除
109
+
110
+ if (in_data < 100) { // sounds[0]の範囲だったら...
111
+ changeSound(sounds[0]); // changeSound関数にsounds[0]を渡して呼ぶ
112
+ } else if (in_data < 200) { // 以下同じように
113
+ changeSound(sounds[1]);
114
+ } else {
115
+ changeSound(sounds[2]);
116
+ }
117
+ //} // ここもコメント解除
118
+ }
119
+
120
+ void changeSound(AudioPlayer sound) {
121
+ if (playing == sound) return; // 再生中の曲と同じならそのまま何もしない
122
+
123
+ if (playing != null) playing.pause(); // 再生中の曲がnullでない(何か再生している)ならポーズ
124
+ playing = sound; // 再生中の曲を引数で渡された曲に変更
125
+ if (playing != null) playing.loop(); // その曲がnullでないならポーズ位置から再度ループ再生(changeSound(null);とすれば何も再生されないようになる)
126
+ }
127
+ ```
42
128
 
43
129
  ---
44
130
 
45
-
46
-
47
- **参考コード**
48
-
49
- Arduinoがないのでセンサーの代わりに、マウスX座標にさせていただきました(画面内でマウスを左右に動かすと曲が変わります)
50
-
51
- データ受信のところをコメント化しましたが、元に戻せばおそらく動くと思います。
52
-
53
-
54
-
55
- 素直に書いてみた場合
56
-
57
- ```Processing
58
-
59
- import ddf.minim.Minim;
60
-
61
- import ddf.minim.AudioPlayer;
62
-
63
- import processing.serial.Serial;
64
-
65
-
66
-
67
- Serial port;
68
-
69
- Minim minim;
70
-
71
- AudioPlayer sound0; // 曲 いっこ目
72
-
73
- AudioPlayer sound1; // 曲 にこ目
74
-
75
- AudioPlayer sound2; // 曲 さんこ目
76
-
77
-
78
-
79
- void setup() {
80
-
81
- size(480, 240);
82
-
83
- // ↓コメント解除
84
-
85
- //port = new Serial(this, "COM3", 9600);
86
-
87
- minim = new Minim(this);
88
-
89
- sound0 = minim.loadFile("groove.mp3");
90
-
91
- sound1 = minim.loadFile("jingle.mp3");
92
-
93
- sound2 = minim.loadFile("groove.mp3");
94
-
95
- }
96
-
97
-
98
-
99
- void draw() {
100
-
101
- // ↓コメント解除
102
-
103
- //if (port.available() > 0 ) {
104
-
105
- // // シリアルデータ受信
106
-
107
- // int in_data = port.read();
108
-
109
- int in_data = int(map(mouseX, 0, width, 0, 255)); // これは削除
110
-
111
-
112
-
113
- if (in_data < 100) { // sound0の範囲だったら...
114
-
115
- if (!sound0.isPlaying()) { // sound0を再生中でなかったら...(再生中ならそのまま何もしない)
116
-
117
- sound1.pause(); // 他をポーズ(再生していなくてもポーズを呼ぶこと自体は問題ない)
118
-
119
- sound2.pause();
120
-
121
- sound0.loop(); // ポーズ位置から再度ループ再生
122
-
123
- }
124
-
125
- } else if (in_data < 200) { // 以下同じように
126
-
127
- if (!sound1.isPlaying()) {
128
-
129
- sound0.pause();
130
-
131
- sound2.pause();
132
-
133
- sound1.loop();
134
-
135
- }
136
-
137
- } else {
138
-
139
- if (!sound2.isPlaying()) {
140
-
141
- sound0.pause();
142
-
143
- sound1.pause();
144
-
145
- sound2.loop();
146
-
147
- }
148
-
149
- }
150
-
151
- //} // ここもコメント解除
152
-
153
- }
154
-
155
- ```
156
-
157
-
158
-
159
- 配列と関数を使ってみた場合
160
-
161
- ```Processing
162
-
163
- import ddf.minim.Minim;
164
-
165
- import ddf.minim.AudioPlayer;
166
-
167
- import processing.serial.Serial;
168
-
169
-
170
-
171
- Serial port;
172
-
173
- Minim minim;
174
-
175
- AudioPlayer[] sounds; // 曲の配列
176
-
177
- AudioPlayer playing; // 再生中の曲(最初はnull)
178
-
179
-
180
-
181
- void setup() {
182
-
183
- size(480, 240);
184
-
185
- // ↓コメント解除
186
-
187
- //port = new Serial(this, "COM3", 9600);
188
-
189
- minim = new Minim(this);
190
-
191
- sounds = new AudioPlayer[]{
192
-
193
- minim.loadFile("groove.mp3"), // 曲 いっこ目(配列の番号は0)
194
-
195
- minim.loadFile("jingle.mp3"), // 曲 にこ目(1)
196
-
197
- minim.loadFile("groove.mp3"), // 曲 さんこ目(2)
198
-
199
- };
200
-
201
- }
202
-
203
-
204
-
205
- void draw() {
206
-
207
- // ↓コメント解除
208
-
209
- //if (port.available() > 0 ) {
210
-
211
- // // シリアルデータ受信
212
-
213
- // int in_data = port.read();
214
-
215
- int in_data = int(map(mouseX, 0, width, 0, 255)); // これは削除
216
-
217
-
218
-
219
- if (in_data < 100) { // sounds[0]の範囲だったら...
220
-
221
- changeSound(sounds[0]); // changeSound関数にsounds[0]を渡して呼ぶ
222
-
223
- } else if (in_data < 200) { // 以下同じように
224
-
225
- changeSound(sounds[1]);
226
-
227
- } else {
228
-
229
- changeSound(sounds[2]);
230
-
231
- }
232
-
233
- //} // ここもコメント解除
234
-
235
- }
236
-
237
-
238
-
239
- void changeSound(AudioPlayer sound) {
240
-
241
- if (playing == sound) return; // 再生中の曲と同じならそのまま何もしない
242
-
243
-
244
-
245
- if (playing != null) playing.pause(); // 再生中の曲がnullでない(何か再生している)ならポーズ
246
-
247
- playing = sound; // 再生中の曲を引数で渡された曲に変更
248
-
249
- if (playing != null) playing.loop(); // その曲がnullでないならポーズ位置から再度ループ再生(changeSound(null);とすれば何も再生されないようになる)
250
-
251
- }
252
-
253
- ```
254
-
255
-
256
-
257
- ---
258
-
259
-
260
-
261
131
  微妙にやっている内容が違うのがなんですが^^; 2,3曲ならどちらでもいい気がします。