メッセージと写真と曲の大きさ
メッセージアプリで送る短い文は、数十バイトです。スマホで撮った写真は、数百万バイトあります。CD と同じ音質で記録した3分の曲は、約3200万バイトです。
どれも中身はビットだけです。このレッスンでは、それぞれがどうビットになるのか、そして大きさの計算のしかたを学びます。
このレッスンのゴール
メモ
文字、画像、音がどのようにビットになるかを説明できる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 文字コード | 1つの文字を表す番号 | A は 65 |
| Unicode | 世界中の文字に番号を付けた1つの表 | |
| 画素 | 画像を作る、色の付いた1つの点。ピクセルとも言う | |
| 色深度 | 1画素に使うビットの数 | |
| サンプリング周波数 | 1秒に音を何回測るか | |
| 量子化ビット数 | 音を1回測った値に使うビットの数 |
学生が入力するセルは、このプレビューでは空白です。
始める前に
メモ
上のバーの Start the lab を押し、マシンが動き出すまで待ってください。Run ボタンは、順番にコマンドをマシンのターミナルに入力します。
文字にはそれぞれ番号がある
コンピュータは、文字を文字コードという番号で記録します。昔からある表では、A が65、B が66、a が97です。空白は32です。行の終わりも1つの文字で、番号は10です。
Unicode は、ひらがなや漢字、絵文字にも番号を付けています。よく使われる UTF-8 という書き方では、英字は1バイト、ひらがなや漢字はふつう3バイトです。
arch フォルダへ移る
cd ~/archここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Python に文字コードを聞く
python3 -c "print(ord('A'), ord('a'), chr(67))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
「あ」のバイトを見る
python3 -c "print(chr(12354), list(chr(12354).encode()))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
OK と書いたファイルを作る
echo OK > ok.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
1バイトずつ数で表示する
od -t u1 ok.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ファイルのバイト数を数える
wc -c ok.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
画像は画素のます目
画像は、画素のます目として記録されます。横の数と縦の数をかけると、画素の数になります。これを解像度と言います。
1つの画素は、色を表す数です。色深度が1ビットなら、白か黒だけです。8ビットなら256色です。スマホの写真は24ビットで、約1677万色を表せます。
例: 画像の大きさを計算する
| 画像 | 画素の数 | 1画素のビット | ビット数 | バイト数 |
|---|---|---|---|---|
| 3 × 3、白黒 | 9 | 1 | 9 | 1バイトと1ビット |
| 200 × 100、256色 | 20,000 | 8 | 160,000 | 20,000 |
| 1280 × 720、フルカラー | 921,600 | 24 | 22,118,400 | 2,764,800 |
学生が入力するセルは、このプレビューでは空白です。
9画素の画像を書く
printf 'P1\n3 3\n0 1 0\n1 1 1\n0 1 0\n' > plus.pbmここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
どんなファイルか聞く
file plus.pbmここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
画像を文字として読む
cat plus.pbmここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
音は1秒に何万回も測る
マイクは音を波に変えます。コンピュータは、その波の高さを1秒に何万回も測ります。1回の測った値をサンプルと言います。
1秒のサンプルの数がサンプリング周波数で、1つのサンプルのビット数が量子化ビット数です。ビット数は、サンプリング周波数 × 量子化ビット数 × チャンネル数 × 秒数です。ステレオは2チャンネルです。
例: 動画の音声1分
| 手順 | 式 | 答え |
|---|---|---|
| 1秒のサンプル | 48,000 | 48,000 |
| 1秒のビット、16ビット、ステレオ | 48,000 × 16 × 2 | 1,536,000 |
| 60秒のビット | 1,536,000 × 60 | 92,160,000 |
| バイト | 92,160,000 ÷ 8 | 11,520,000 |
学生が入力するセルは、このプレビューでは空白です。
Python で計算する
python3 -c "print(48000 * 16 * 2 * 60 / 8)"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
かけ算が終わったところで、答えをバイトだと思ってしまう人がよくいます。式の答えはビットです。8で割るとバイトになり、さらに1,000で割るとキロバイト、1,000,000で割るとメガバイトになります。
さらに挑戦: 画素より大きいファイル
plus.pbm の画素は9個なので、9ビットです。ターミナルで wc -c plus.pbm と打ち、ファイルの本当の大きさを見てください。
増えたバイトはどこから来たのでしょうか。もう一度 cat plus.pbm を見て、行の終わりも含めてすべての文字を数えてください。