● 実験テーマ102

「カラーOLEDに、BMPイメージと共に、演奏者名・曲名を表示する実験」
(MP3のID3v2タグからアルバム情報を検索しイメージと共に演奏者名・曲名を表示する実験です)

以下、この実験の顛末記です。

■ 2018.2.9
  ・今使っている、Adafruitの、1.5inchカラーOLEDを、MP3プレーヤに応用しようと進めているが、今回は、
   SDに収録されている、MP3ファイルの、
ID3v2タグからアルバム情報を検索しイメージと共に演奏者名・曲名を
   表示する実験をしてみました。但しまだ、MP3デコーダ部は組込んでいません。

  ・MP3プレーヤにする場合の、画面レイアウトを検討。
    @ ジャケットイメージサイズは、今の、100x100dotのままに変えない。
       丁度見易いサイズなので。
    A そうすると、下段の空スペースに、漢字或いは半角ANK文字で、曲名と演奏者名を、もれなく入れることは
       出来ないので、演奏者名は、上段2行MAXで、イメージと重ね書き(テキストは、背景色:黒、文字色:白)
       して表示。
       曲名は、下段の空スペースに、2行MAXで漢字或いは、半角ANK文字で表示。
       (結果的には、こちらも部分的には、イメージとの重ね書きになりました。)

  ・MP3デコーダ部のソフトを追加する前に、この画面イメージの表示テストプログラムを作成して見栄えを確認してみる。
  ・ソフトを作成開始。要点を整理してみた。
    @ 前回の、BMPイメージ表示テストの、フローでは駄目なこと。
       基本は、以前自作した、タッチ式MP3プレーヤ(QVGA)のソフトを参考。
       この時は、最初に、MP3ファイルリストを出したが、今回はスペースが無いのでださないことにした。
       (とこの時点では思ったが、最終的には、デバッグの意味も含めて初期画面として最初から16曲分のリストのみ
       表示するようにした。)
    A 曲(アルバム)と対応したイメージの表示方法(簡易的な方法とした。)
      ・SDにMP3ファイルの他に、それに対応する曲番をファイル名に入れたBMPファイルを用意して、それを再生前
       に読出して表示。
       <例>→ 曲番:1→ BMPファイル名:"IMAGE001.BMP"
                              ↑
                       ※ この文字列バッファの定義: char str_IMAGE[]= "IMAGExxx.BMP";
      ・イメージファイルを開く手順は、
       A-1: itostring(3, FileNo+1, str_IMAGE+5); // ファイル名の曲番部分を文字に変換して、全体の文字列と結合
       A-2: fptr = FSfopen(str_IMAGE, "r"); // File Open (Read Mode)
    B 今は、同じアルバムに収録されている曲の場合は、最初の曲の再生前にだけ、そのジャケットを表示していて、
       その後の曲については表示しないようにしている。


■ 2018.2.10
  ・ソース書き上げた。HEXまで準備出来る。
   色々やったが未だ駄目。
   <症状>
    @ 最初の曲(さだまさし:SUIGARA.MP3)のイメージは表示するが、TAG情報が表示されない。
    A 次の曲(太田裕美)のイメージは表示するが、3曲目(荒井由実)のTAG情報が表示されてる。
       つまり、1つずれている。

    B 半角ANK文字のTAG情報表示の位置制御がおかしい。


■ 2018.2.11
  ・昨日の<症状>−@ を追求。
   最初の、FileNo= 0の、TAG情報が表示しない。
  → SaveFileName関数(ファイル名のバッファへの格納)で、最初のMP3ファイルが、正常にサーチされているか、
     最初から16曲分のファイルリストを表示させて確認した。→ これはOKだった。

   何故か、デバッグ用に、最初の16ファイル分のリスト表示をするように、SaveFileName関数をいじったら、
   最初の曲に、TAG情報が表示出来、1つずれる現象も無くなった。
   この修正をやる為に、OLEDと、SDのSPI設定を頻繁に切替えなければならなかった。
   はっきりした原因は不明だが、そこらの切替えタイミングの問題だったと想像する。
   (修正前のソースのバックアップに不手際があり、バックアップが取れて無く比較考察出来てない。)
   このデバッグ表示は、そのまま残しておくことにした。

  ・昨日の<症状>−B半角ANK文字のTAG情報表示の位置制御がおかしいを追求。
  → TAG情報に、半角ANK文字が含まれていた場合(漢字と混合している場合+ANK文字のみの場合)で、
半角のみの場合
     の、表示位置制御に誤りがあって修正。これでOKになる。
     以下の、半角のみの場合の処理部分の、コメントを参照してください。

//// 半角のみの場合
// OLED_Char(i/16, (i%16)+14, DataBuf[locate+11+i], WHITE, BLACK);← 修正前

/// 180211
/// i=0〜15の余り計算結果=x=0〜15
/// i=16文字目で、x=0で改行
/// i=0〜15の割り算結果=y=13
/// i=16文字目で、y=14で改行
OLED_Char(i%16, (i/16)+13, DataBuf[locate+11+i], WHITE, BLACK);    // 修正後

 


■ 2018.2.12
  ・不具合はこれだけではなかった。
   曲に対応する、BMPイメージが無い場合に、そこで止まってしまうのである。
   これは単純なミスで、曲ファイルに対応するイメージが無い場合(BMPファイルオープンに失敗した場合)の処理が抜けていただ
   けで、これを以下のように対処した。
   イメージファイルがない場合は茶色のジャケットを表示して、その中央に、"NO IMAGE"と表示するようにした。

   もう一つの残る問題は、TAG情報に、漢字と半角ANK文字が混合している場合に、表示位置がおかしくなる現象である。

   これも、表示位置(Y座標)制御部分の記述ミスが原因で、直したらOKになる。


■ 2018.2.13
  ・一応当初考えた通リのテスト仕様での動作はOKになった。
   まあもう少し見易くするためには、BMPイメージとTAG情報表示の干渉が起きないようにレイアウトを考えたいが
   そうするには、BMPイメージのサイズを、70x70dot位に小さくするしかない。
   そうすると無駄なスペースが出来てしまう。
   それと、今迄作ってきた、100x100サイズのイメージをそのまま使いたいという思いもあり、サイズ的にも
   丁度良い、100x100にし、それにオーバーラップさせてTAG情報を表示させている。


<回路図>

※ 前回の実験テーマ101と同じです。

<最終ソース>

 ・こちらから、どうぞ→ OLED_MP3_IDTAG_DISP_TEST.c

※ 上メインソース以外のファイルは、前回の実験テーマ101と同じです。


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ103へ →