質問編集履歴

2

おかげさまで解決したので、今後参照される方のために、質問本文を問題点のみに絞り、タイトルを内容にあわせて修正。

2018/05/08 09:12

投稿

KEINOS
KEINOS

スコア15

test CHANGED
@@ -1 +1 @@
1
- RPi で `amidi` の MIDI ダンプをパイプで受け取ると Key Down の Note が1つ前のものになる
1
+ RPi 3 'amidi' の MIDI ダンプをパイプで受け取るとMIDIシーケンスが1つ前のものになる
test CHANGED
@@ -1,8 +1,58 @@
1
- ## エラー概要
1
+ ## TL;DR(概要
2
-
3
-
4
-
2
+
3
+
4
+
5
- ラズパイ3 に MIDI キーボードをつなげ、受け取った MIDI シーケンスデータが、 `$ amidi --port="hw:1,0,0" --dump` で表示される内容と、`$ amidi --port="hw:1,0,0" --dump | php sample.php` でパイプでプログラムに渡された内容が異なる。
5
+ RaspberryPi 3 に MIDI キーボードをつなげ、受け取った MIDI シーケンスデータが、 `$ amidi --port="hw:1,0,0" --dump` で表示される内容と、`$ amidi --port="hw:1,0,0" --dump | php sample.php` でパイプでプログラムに渡された内容が異なる。
6
+
7
+
8
+
9
+ ### 押下/押上の結果
10
+
11
+
12
+
13
+ 続けて「ド・レ・レ」と弾いた場合の信号の違いは以下の通りです。
14
+
15
+ 「Dump RAW」は `$ amidi --port="hw:1,0,0" --dump` の値、「パイプ経由」は `$ amidi --port="hw:1,0,0" --dump | php sample.php` で標準入力をおうむ返しした値です。
16
+
17
+
18
+
19
+ |ノート番号| 操作 | Dump RAW | パイプ経由 |
20
+
21
+ |:--:|:--- | :--- | :--- |
22
+
23
+ | 3C | 押下↓ | 90 3C 33 | 80 3C 00 |
24
+
25
+ | 3C | 押上↑ | 80 3C 00 | 90 3C 74 |
26
+
27
+ | 3E | 押下↓ | 90 3E 42 | 80 3C 00 |
28
+
29
+ | 3E | 押上↑ | 80 3E 00 | 90 3E 24 |
30
+
31
+ | 3E | 押下↓ | 90 3E 2C | 80 3E 00 |
32
+
33
+ | 3E | 押上↑ | 80 3E 00 | 90 3E 64 |
34
+
35
+
36
+
37
+ #### 備考
38
+
39
+
40
+
41
+ - MIDIチャンネル「`0`」
42
+
43
+ - 押下 = `9x xx xx`(ノート・オン)
44
+
45
+ - 押上 = `8x xx xx`(ノート・オフ)
46
+
47
+ - ド = 真ん中のC(`3C`)
48
+
49
+ - レ = 真ん中のD(`3E`)
50
+
51
+ - 3バイト目の値はベロシティなので`00`以外は毎回ランダム
52
+
53
+
54
+
55
+ #### パイプで受け取るプログラム例(PHP)
6
56
 
7
57
 
8
58
 
@@ -24,57 +74,11 @@
24
74
 
25
75
 
26
76
 
27
- ## 押下/押上の結果
28
-
29
-
30
-
31
- MIDIチャンネル「`0`」から、鍵盤の真ん中の「ド(C)= 60(`0x3C`)」を押して(`8x xx xx`)離した(`9x xx xx`)後、隣の鍵盤「レ(D)= 62(`0x3E`)」を押下/押上し、続けて同じキーを押下/押上した時の出力結果。
32
-
33
-
34
-
35
- |ノート番号| 操作 | Dump RAW | パイプ経由 |
36
-
37
- |:--:|:--- | :--- | :--- |
38
-
39
- | 3C | 押下 | 80 3C 33 | 80 3C **00** |
40
-
41
- | 3C | 押上 | 90 3C 00 | 90 3C **74** |
42
-
43
- | 3E | 押下 | 80 3E 42 | 80 **3C 00** |
44
-
45
- | 3E | 押上 | 90 3E 00 | 90 3E **24** |
46
-
47
- | 3E | 押下 | 80 3E 2C | 80 3E **00** |
48
-
49
- | 3E | 押上 | 90 3E 00 | 90 3E **64** |
50
-
51
-
52
-
53
- ※ 3バイト目の値はベロシティなので`00`以外は毎回ランダム
54
-
55
- ※ 各バイトのプロトコルは下記参照
56
-
57
-
58
-
59
- ## 問題
77
+ ## 問題
60
-
61
-
62
-
78
+
79
+
80
+
63
- 上記「Damp RAW」(`$ amidi --port="hw:1,0,0" --dump` でダンプした値)は正常に表示されているが、それをパイプでプログラムに渡すとズレが発生します。
81
+ 上記「Dump RAW」(`$ amidi --port="hw:1,0,0" --dump` でダンプした値)は正常に表示されているのですが、それをパイプでプログラムに渡すとズレが発生します。
64
-
65
-
66
-
67
- ノートとベロシティが1ステップずつズレている気がしますが、**キーの押下/押上は正常に渡されている**ので合点がいきません。何を見落としているのでしょう、、、
68
-
69
-
70
-
71
- 1. キー押下時のベロシティーが、パイプ渡しの場合に`00`になる。
72
-
73
- 1. キー押上時のベロシティーが、パイプ渡しの場合に `00` にならない。
74
-
75
- 1. **異なるキーの初回押下**時、ノート番号が1つ前のものになる。
76
-
77
-
78
82
 
79
83
 
80
84
 
@@ -88,7 +92,7 @@
88
92
 
89
93
  ```lang-php
90
94
 
91
- <?PHP
95
+ <?php
92
96
 
93
97
 
94
98
 
@@ -168,9 +172,9 @@
168
172
 
169
173
  |ノート| `3E` = 真ん中のレ(`62`=`0x3E`)|
170
174
 
171
- |押下アクション | `8x xx xx`|
175
+ |押下アクション | ~~`8x xx xx`~~`9x xx xx`|
172
-
176
+
173
- |押上アクション | `9x xx xx`|
177
+ |押上アクション | ~~`9x xx xx`~~`8x xx xx`|
174
178
 
175
179
 
176
180
 

1

typo

2018/05/08 09:12

投稿

KEINOS
KEINOS

スコア15

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  | 3C | 押上 | 90 3C 00 | 90 3C **74** |
42
42
 
43
- | 3E | 押下 | 80 3E 42 | 80 **2C 00** |
43
+ | 3E | 押下 | 80 3E 42 | 80 **3C 00** |
44
44
 
45
45
  | 3E | 押上 | 90 3E 00 | 90 3E **24** |
46
46