回答編集履歴

3

9バイトの長さについて詳しく言及

2019/08/02 10:52

投稿

KEINOS
KEINOS

スコア15

test CHANGED
@@ -38,15 +38,15 @@
38
38
 
39
39
 
40
40
 
41
- 区切りを9バイトにしたのは、私の MIDI 機器(AKAI MPKmini MK2)どのキーやパッドを操作しても9バイトの固定長だったためです。
41
+ 区切りを9バイトにしたのは、私の MIDI 機器(AKAI MPKmini MK2)どのキーやパッドを操作しても9バイトの固定長だったためです。
42
42
 
43
43
 
44
44
 
45
- > `\n`+`FF`+`FF`+`FF` = 9 バイト
45
+ > `\n90 3c 16``\n` `9` `0` ` ` `3` `C` ` ` `1` `6` = 9 バイト
46
46
 
47
47
 
48
48
 
49
- シーケンスのダンプなど、9バイトない場合は、一時的に変数に入れるなどバッファをさせる必要と思ますが、リアルタイム処理の場合はバイト長で区切った方が速そうです。
49
+ 改行区切り読み込み、一時的に変数に入れるなどバッファをさせる方法も考えました。しかし、9バイト以上のデータ(シーケンスのダンプなど)流れ可能性がな限り、リアルタイム処理の場合はバイト長で区切った方が処理が速そうです。
50
50
 
51
51
 
52
52
 

2

改めて読むと日本語がおかしかったので、すこし修正しました。

2019/08/02 10:52

投稿

KEINOS
KEINOS

スコア15

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- `amidi` のダンプデータは、1 アクションごとに出力する MIDI シーケンスの**先頭**に改行コードが付いてくる、1 アクションを検知するのは `EOL` や `\n` で判断するのではなく**読み込んだバイト数(9バイト)で判断する**必要があります。
13
+ `amidi` のダンプデータは、1 アクションごとに出力する MIDI シーケンスの**先頭**に改行コードが付いてきます。そため、1 アクションを検知(判断)するのは `EOL` や `\n` など改行コードではなく**読み込んだバイト数(9バイト)で判断する**必要があります。
14
14
 
15
15
 
16
16
 
@@ -18,19 +18,35 @@
18
18
 
19
19
 
20
20
 
21
- MIDI キーボードのキーやパッドを押すと「`90 3C 16`」といった3バイトの MIDI 信号(シーケンス・データ)が流れてきますが、厳密には「`\n90 3c 16`」という9バイトの文字列データです。ここで注意すべきは**先頭に「`\n`」の改行コードが付いている**ことです。
21
+ MIDI キーボードのキーやパッドを押すと「`90 3C 16`」といった3バイトの MIDI 信号(シーケンス・データ)が流れてきますが、厳密には「`\n90 3c 16`」という9バイトの文字列データです。ここで注意すべきは**「`\n`」の改行コードが先頭に付いている**ことです。
22
22
 
23
23
 
24
24
 
25
- パイプ渡しによる標準入力だけでなく名前付きパイプによるファイル読み込みであっても、データを読み込む際に**ごとに読みみなら処理る場合注意が必要**になります。
25
+ つまり「`[データ1]\n` `[データ2]\n` ...」とアクションごとに改行が後に付いていると思いんでいたこと原因で。実際に「`\n[データ1]` `\n[データ2]` ...」ということです。
26
26
 
27
27
 
28
28
 
29
- なぜなら、MIDI キーボード上でアクションを起こても**改行がいため1行のデータ」として認識されない**ので、次のアクションを起こし改行が付いて初めて1行と認識されるか。これが**1アクション、ズレる原因**した
29
+ このことから、「パイプ渡による標準力」だけで名前付きパイプによるファイル読み込み」であっても、データを読み込む際に**1行に読み込みなが処理る場合は注意必要**で
30
30
 
31
31
 
32
32
 
33
+ 単純に改行ごとに処理をしてしまうと、1発目のアクションは先頭の改行コードのせいで「空」になり、2発目のアクションで1発目のデータが流れてくることになります。これが1アクションズレる原因でした。
34
+
35
+
36
+
33
- そのため、プログラム言語を問わず、標準入力もしくは(名前付きパイプ経由の)ファイル読み込みであっても、**データを読み込む時は9バイトを境に読み込みを区切る**必要があります。
37
+ そのため、プログラム言語を問わず、標準入力もしくは(名前付きパイプ経由の)ファイル読み込みであっても、**データを読み込む時は9バイトを境に読み込みを区切る**必要があります。
38
+
39
+
40
+
41
+ 区切りを9バイトにしたのは、私の MIDI 機器(AKAI MPKmini MK2)はどのキーやパッドを操作しても9バイトの固定長だったためです。
42
+
43
+
44
+
45
+ > `\n`+`FF`+`FF`+`FF` = 9 バイト
46
+
47
+
48
+
49
+ シーケンスのダンプなど、9バイトでない場合は、一時的に変数に入れるなどバッファをさせる必要があると思いますが、リアルタイム処理の場合は、バイト長で区切った方が速そうです。
34
50
 
35
51
 
36
52
 

1

信号情報としてのバイトと、文字列データとして受け取るバイト数の違いを明記

2019/08/02 10:41

投稿

KEINOS
KEINOS

スコア15

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- MIDI キーボードのキーやパッドを押すと「`90 3C 16`」といった MIDI シーケンスが流れてきますが、厳密には「`\n90 3c 16`」という9バイトの信号です。ここで注意すべきは**先頭に「`\n`」の改行コードが付いている**ことです。
21
+ MIDI キーボードのキーやパッドを押すと「`90 3C 16`」といった3バイトの MIDI 信号(シーケンス・データ)が流れてきますが、厳密には「`\n90 3c 16`」という9バイトの文字列データです。ここで注意すべきは**先頭に「`\n`」の改行コードが付いている**ことです。
22
22
 
23
23
 
24
24