2018年12月29日土曜日

UTF-8文字列をUNICODE化し、絵文字判別

UTF-8で指定された文字列をUNICODE化し(32bit)、絵文字かどうかを判定する例題です。

絵文字かどうかの議論は色々あるかと思いますが、twemoji 内に格納されている絵文字を基準としています。
→ emoji-png フォルダに png として保存し、ファイルを検索してチェック

絵文字かどうかを判定した後は元のUTF-8に戻し、標準出力へ出力しています。
絵文字に対応していないフォントを用いているUI等では、絵文字が表示されない場合がありますので、絵文字の部分は twemoji 内の png で置き換えて表示したりすることができます。 実行結果

2018年9月23日日曜日

Broadcast Wave Format に対応した WAVE 音声の読み込み

Broadcast Wave Format に対応した WAVE 音声の読み込みの例題です。
Broadcast Wave Format (BWF) は、マイクロソフトのWAV音声ファイルフォーマットの拡張であり、映画やテレビで使われているノンリニアデジタルレコーダーの録音フォーマットとしてよく使われている。
WAVEファイルの読込み/再生 での例題で WAVEファイルを読み込んだ際、ヘッダ部分がうまく取得できないWAVEファイルが存在していました。
中身を見ると、フォーマット用のチャンク部分に「fmt 」ではなく、「bext」と記載されているファイル形式のファイルでした。
PCMの音声データ部分のチャンクは「data」から始まり、PCM音声部分の抜き取りは正常に動作していたのですが、元の音声の形式がどのようなものかを正常に取得できていないので困ることになります。
なので、この「bext」のチャンクが含まれる Broadcast Wave Format の WAVE 形式にも対応した形で読み込み部を修正しています。

Broadcast Wave Format(BWF)は CM 位置へのスキップ等に対応した CUE というイベント情報等を含められるようですが、今回はヘッダ部分のパースと WAVE の保存形式を正常に認識するための修正のみを行っています(CUE が入った音声サンプルが手に入らないため)。

また、4GBの壁にも対応した修正になっています(本来はWAVE64というフォーマットがありますが、WAVEに4GB以上のデータが含まれるもの)。
WAVEファイルのヘッダ構造体は32bitですのでその部分で4GBの壁となります。
WAVEで保存するICレコーダー等で4GB以上の録音となる場合にこういった不具合が発生することがあります。
data チャンクの長ささえ取得できれば音声部は正しく保存されていますので、その部分から読み込みを開始すればデータ部は正しく取得できます。 実行結果