2017年4月1日土曜日

VB 音楽ファイルとデータベース

溜まってしまってからでは、もう、遅い!。
はい。 音楽データの事です。
少しは留意して、保存していた筈ですが ... 。
いざ、 活用しようとすると、タグ(データ)が 無茶苦茶 ... 。


パソコンで音楽を聴く様になってから、暫くが経ちます。
昔の お皿 (アナログ) の時代なら、
その曲が気になれば、アルバムを裏返したり、ライナーノーツを読んだり、でしたね。

今、デジタル化の恩恵で、 メタデータとして、ファイルの中に曲と情報とを詰め込める様になっています。
これは、 ありがたい!。

あっ、 私が良く聴くのは、 嘗ての Jazz です。
ご多聞に漏れず、 この世界、
やれ、 作曲が誰それ だの、作詞が誰彼 だの、参加ミュージシャンが どいつ だの、 と、
うるさい 世界です。
でも、 それが 面白かったり もします。
その曲は 誰それの 何とかと言うアルバムの 何曲目 が 最高!~ とか ... 。

さて、 件の 人名 。
アメリカ発祥の Jazz ですから、英語が多いです。
でも、世界各地に拡がった為、 各国の言語(人名)が飛び交います。
おまけに、 ニックネーム付き、各国語表記混在、ファーストネーム省略、同一名注釈付き、名前の順番、 ... 等々。
うわぁ~、参ったなぁ。  です。

アルバム(曲)のタグデータは、
色々な国の色々な方々が作成してアップされていますから、
取り込んだ音楽のタグ情報を検索すると、表記がぐちゃぐちゃになる と言う 次第 ですね。
アルバムリーダーは、保存時に、フォルダーが分割してしまう恐れもある為、
留意して統一していましたが、
演奏者や 作詞作曲家までは 手が廻っていませんでした!。

斯くして、
それらの人名は 同一の方 なのに、 幾つもの表記が併存する事に ... 。

 Antonio Carlos Jobim と Antônio Carlos Jobim 。  さて、違いが分かりますか?。  正解は o と ô 。


音楽を聴きながら、それらのタグ情報を表示している分には、
何の問題もありません。
               ですから、今迄、見落としてもいました。


しかし、これらをプログラムから 検索するとなると ... 。
別の人に認識される訳ですねぇ ... 。  ふぅ。

 上の例では、Carlos Jobim で 部分一致( or 後方一致 )検索すれば、ヒットします。
 あっ、 それって、データベースでの お話 になります。
 でも、A. C. Jobim が混ざっていたら ... 。  A.C. Jobim もあったら ... 。  うわぁ~、 :( 。

折角、苦労して入力し、蓄積して来たデータも、
その辺りを 上手く 処理しないと、 活きたデータ にはなりません。


更に、冠詞類の 表記。
The にするか、 the にするか、 .... 。
データベースエンジンの設定によっては 大文字小文字を無視して 検索出来ますから、
結果的には OK であるものの、
検索候補を データベースから引くとすると、 これらが混在してしまう事に繋がります。
対応は可能ですが、 知らずに候補を列挙すれば、不要な候補が乱立する羽目に .... 。


この様に、
すっきりと筋の通った 綺麗な データ集合になっていない 現実に 呆然! とするばかりです。
ドジな自分の 嘗ての 作業に ガッカリ するばかりです。

でも、 データを綺麗に揃える事を考えるより、 如何に上手に検索させるかを検討した方が正解かも知れません。
人の作業に ミス は付き物。
これからも、うっかり は続く でしょう。
それを カバー する事を考えた方が 幸せ なのだと 思います。




今、使っているプログラムは、
例えば、
曲名に You か ユー が入る 曲 を列挙(取得)出来ます。
          実際には、ユー の入った 曲 は ひとつもありませんが、 複合検索の見本として ご紹介。

検索語句に You と入れると、 現在のデータを加工して保持している候補の最初のものが ComboBox に代入されます。
値を編集し、 AND OR で連結して行き、 実行した結果が これ ですね。

所謂、アドホック クエリ で組み立てていますので、 汎用化には難がありますが、
検索の柔軟さには代えられない処です。
所謂、ガードの甘い検索。  例外処理に穴の多いロジック の 見本 みたいですが ... 。

  参考: SQL Injection 対策。

       因みに、 Serach<t> に You' OR 't' = 't を入れると、
       TextBox には MySong.SngName LIKE '%You'' OR ''t'' = ''t%'
       と展開され、結果は Count = 0 結果無し で検索されます。
       TextBox が編集可の場合、
       MySong.SngName LIKE '%You' OR 't' = 't'
       にしてしまえば、全数取得が出来てしまいます。
       TextBox を ReadOnly にし、
       条件句生成を、他の Control からの StringBuilder のみに頼れば、一応の回避となります。

 

データベースへの取得は 別途用意した ファイル群からメタデータを取得し登録する 別のもの が担当します。
勿論、コツコツと手入力している訳ではありません。


こうして、作って検索を実行して見ると、 へぇ~ ほぉ~ あれっ と言った答えが返って来て、
びっくりする事があります。
こんな曲も入っていたんだ! と。


データベースの恩恵は、こうして、蓄積されたデータが多くなればなる程、発揮されるのですが、
データが溜まれば溜まる程、臍曲がりの 腕白坊や が紛れ込みます。
その子が 大騒ぎをせずに、 良い子 で居てくれる様に、  してあげれば、
その集団は 立派な 仕事を成し遂げてくれます。
締め付けるのばかりが 良い 規律 とは限りません。
多少の 悪戯 には目を瞑って、 腕白坊や に 別の魅力を発揮して貰いましょう。
羽目を外すのも そのデータ集合の おおらかさ 故 となる様に ね。


そう、 如何に、 支離滅裂な データ集合から 正確な 答えを得るか に頭を悩ませる 事にしましょうか。
苦労して蓄積したデータ の その作業が 報われる 様に。



[2017/04/01] 参考 として SQL Injection 対策 を挿入。

0 件のコメント:

コメントを投稿