画面に表示されている画像を取り込んで保存しておきたいことはよくありますが、 本スクリプトでは、デスクトップ上の任意の矩形範囲の静止画、または、動画を 取り込んで保存することができます。 また、カメラから入力された映像も同様に扱えます。
静止画の場合、取り込んだ画像は任意に拡大/縮小することができます。 また、その画像をファイルやクリップボードに保存することもできます。 画像の保存形式は、現状、BMP だけですが、ペイント等のソフトを経由すれば、 PNG や JPEG 等の形式でも保存できます。
動画の場合、取り込まれる画像データは、一般に膨大になるので、ファイルに逐次 格納されていきます。画像データは圧縮して保存することもできますが、 なにぶんリアルタイムの処理なので、その負荷が重いとコマ落ちしたり、 画像が乱れたりすることがあります。 そのため、圧縮形式は、サンプリングレートや画像サイズとの兼ね合いで、 適切に選ぶ必要があります。また、動画の種類(実画、アニメ、CGなど)の違いに よっても適正があるので注意が必要です。 現状、最大サンプリングレートは 10 回/秒、最大録画時間は 10 分に 制限されています。これらはパソコンの能力に応じて変更しても構いません。 この変更は、ソースプログラムのその関連の定数値の書き換えで行えます。
なお、本ウィンドウでは、左上隅のアイコンをクリックすると、メニューが 表示されます。
ふと思い付いたことを文章に書きとめておきたい時がよくありますが、 それを紙にメモしたり、キーボードで打ち込んだりしていると、 その間に忘れてしまったりします。 そんなとき、本スクリプトを使えば、音声で簡単にメモを取ることができます。
本スクリプトでは、一般的な音声の記録/再生だけでなく、 ある音量以上の区間だけの自動録音(つまり自動的に無音区間を除いた録音)や、 再生速度の変更も(50%〜200%の範囲で)可能です。 さらにおまけとして、逆再生(例えば「あいうえお」は「おえういあ」と 再生される)機能も付いています。
自動録音は、会議や会話の録音の際に、無駄な無音区間を記録しないので有用です。 また、自分の寝言やいびきなどの録音にも役立ちます。 無呼吸症が心配な人は一度試してみられてはいかがでしょうか。 ところで、余談ですが、標準語のアクセントで発音した日本語の音声を逆再生すると、 なぜか不思議なことに、朝鮮語の発音に聞こえることがよくあります。 これはなにか民族の歴史に関係があるのでしょうか。
録音の質は一般に、マイクやオーディオボードの性能に大きく依存しますが、 記憶容量や精度との兼ね合いもあります。 本録音の場合、人の声が主対象なので、それに見合う精度と記憶容量に抑えています。 そのため、高音質の音楽等の録音には向いていません。
RIFF(Resource Interchange File Format)は、動画や音声などの マルチメディア関連のデータを格納するための枠組みを規定する 有名なファイル形式の1つです。
この RIFF 形式では、各情報ブロックがツリー構造になっていますが、 本スクリプトは、各情報ブロックの内容をそのツリー構造に沿って表示します。 以下にその表示例を示します。
ちなみに、MikoScript 言語は、このような構造を扱うのが得意ですが、 本プログラムの場合も、非常に簡潔で、鑑賞に値します。 具体的には、ShowListInfo() と ShowChunkInfo() という僅か 60 行程度の関数だけで、 RIFF の基本構造が扱えています。
Temp.avi 000000 RIFF 'AVI ' 0x6D6B0E0 00000C LIST 'hdrl' 0xD6 000018 CHUNK 'avih' 0x38 : | MainAVIHeader: : | .dwMicroSecPerFrame = 100000 : | .dwMaxBytesPerSec = 3724800 : | .dwPaddingGranularity = 0 : | .dwFlags = 0x0810 : | .dwTotalFrames = 308 : | .dwInitialFrames = 0 : | .dwStreams = 1 : | .dwSuggestedBufferSize = 372480 : | .dwWidth = 640 : | .dwHeight = 390 000058 LIST 'strl' 0x8A 000064 CHUNK 'strh' 0x38 : | AVIStreamHeader: : | .fccType = 'vids' : | .fccHandler = 'iyuv' : | .dwFlags = 0x0000 : | .wPriority = 0 : | .wLanguage = 0 : | .dwInitialFrames = 0 : | .dwScale = 1 : | .dwRate = 10 : | .dwStart = 0 : | .dwLength = 308 : | .dwSuggestedBufferSize = 372480 : | .dwQuality = -1 : | .dwSampleSize = 0 : | .rcFrame = 0, 0, 640, 390 0000A4 CHUNK 'strf' 0x28 : | BITMAPINFOHEADER: : | .biSize = 40 : | .biWidth = 640 : | .biHeight = 388 : | .biPlanes = 1 : | .biBitCount = 24 : | .biCompression = 'IYUV' : | .biSizeImage = 748800 : | .biXPelsPerMeter = 0 : | .biYPelsPerMeter = 0 : | .biClrUsed = 0 : | .biClrImportant = 0 0000D4 CHUNK 'strn' 0x0D : | Stream Name: "VideoCapt.mc" 0000EA CHUNK 'JUNK' 0x702 0007F4 LIST 'movi' 0x6D695A4 000800 CHUNK '00db' 0x5AF00 05B708 CHUNK '00db' 0x5AF00 0B6610 CHUNK '00db' 0x5AF00 : : : : : :
本スクリプトは、JPEG ファイルの内容を解析して、その画像をウィンドウに表示します。 そもそも、JPEG の画像データは、2次元の離散コサイン変換( DCT: Discrete Cosine Transform )や ハフマン符号によるエントロピー符号化等によって、高度に圧縮されているため、 このデコードには非常に複雑な処理が必要です。このようなプログラムでも、 MikoScript 言語なら、比較的少ないステップ数でエレガントに記述できます。 ただ、MikoScript は、インタープリタなので、処理時間がかなりかかります。 ちなみに、解析開始から画像の表示が完了するまでに秒オーダーの時間がかかります。
JPEG にはいろいろな方式がありますが、通常の用途では、基本DCT方式で充分です。 ここでは、この方式のみに対応しています。 なお、本スクリプトの実行には、Ver. 3.12 以上の MikoScript( miko3.exe )が必要です。