回答編集履歴

1

エンディアン変換の補足を追加

2017/05/15 23:44

投稿

magichan
magichan

スコア15898

test CHANGED
@@ -47,3 +47,71 @@
47
47
  wav.writeframes(data)
48
48
 
49
49
  ```
50
+
51
+
52
+
53
+ ---
54
+
55
+
56
+
57
+ #### エンディアン変換の補足
58
+
59
+
60
+
61
+ 行っていることは
62
+
63
+ 「バイト配列(バイナリデータ)」→「Int型のリスト(実データ)」→「バイト配列」
64
+
65
+ です。
66
+
67
+
68
+
69
+ 順番に説明しますと、
70
+
71
+
72
+
73
+ まず第1ステップとして ``struct.unpack()`` にてバイナリデータを実データに変換します。
74
+
75
+ その際にどのようなフォーマットで変換するかは第一引数にて指定します。
76
+
77
+ 今回の場合は
78
+
79
+ - ビックエンディアン(__'>'__)
80
+
81
+ - 1つデータは2Byte(__'h'__)
82
+
83
+
84
+
85
+ なので ``">##h"`` としております。(ここで **##**には変換するデータ数が入りますので、``format()`` を使用して、もとのバイナリ長の1/2の値を入れております。)
86
+
87
+
88
+
89
+ > ここで変換されたデータは実データとなりますので、信号処理や波形表示などを行う場合はこの**lst** を使うことができます。(一般的には **lst**はLR交互のデータなので、更に ``l,r=lst[0::2],lst[1::2]`` などとしてLRを分離して使用することになります。)
90
+
91
+
92
+
93
+ で、次のステップとして ``struct.pack()`` にて再度、Int配列をバイナリデータに変換しております。
94
+
95
+ ここも同様にフォーマット指定が必要な為、
96
+
97
+ - リトルエンディアン(__'<'__ :省略可能)
98
+
99
+ - 1つデータは2Byte(__'h'__)
100
+
101
+
102
+
103
+ の ``"##h"`` を指定しております。(**##**には変換するデータ数を入れる必要がありますので、``format()`` を使用して、実データのサイズを入れております。)
104
+
105
+
106
+
107
+ structパッケージの詳細に関しては、公式ドキュメントを見てください。
108
+
109
+
110
+
111
+ [https://docs.python.jp/3/library/struct.html
112
+
113
+ ](https://docs.python.jp/3/library/struct.html)
114
+
115
+ 以上です。
116
+
117
+