テクノ・クオリティー

高田馬場にある(株)テクノウォーカーのスタッフ雑記。内容ゆるめでお送りします。

全体表示

[ リスト ]

Delphi使いのナイトーです。

みなさん旅行日記や趣味の話題、いろいろなブログ楽しませていただきました!
社長からメール出ておりますがブログ大賞投票、奮ってご参加ください。

さて、今回は「趣味でプログラムを作ってみよう!」という内容です。

・開発環境を用意しよう。
・今日のプログラムお題。
・付与情報とは。(Exif、id3、Vorbis Comment)
・趣味のプログラム作ってみよう。


■ 開発環境を用意しよう。

今回はここで使用する言語はWindowsのほか、MacやiOS、Androidのスマホにも対応したマルチプラットフォームにも対応、しかも無償版が公開されている『Delphi(デルファイ)』です。

自分の使っている言語がどの程度人気か気になりませんか?
たまに記事で見かけるプログラム言語の人気ランキング、TIOBEを見てみましょう。

人気ランキング2019年5月現在Delphiは12位、人気はVBより上みたいです。
集計方法もよくわからないので、あまり鵜呑みにしないでくださいね。

Delphiの無償版は『Delphi Community Edition』という名前で公開されてます。
機能制限も無いようですので、個人で早速ダウンロード、インストールしてみました。

イメージ 4

【Delphiの特徴】※個人の感想です。
・直感的に操作しやすい開発環境。
・コンパイルが早く、実行作業にストレスが溜まらない。(←これ結構大事)
・コンパイル言語でありながらブレイクポイントも使える、強力なデバッガーも付いてる。
・Windows、OSX、Android、iOS向けアプリを開発できる。

趣味のプログラミングは、思い立った時に作ることのできる手軽さは重要かと思います。
Delphiに限らず自分に合った環境を探してみてください。


■ 今日のプログラムお題。

早速、今回のお題を。

楽曲のダウンロード販売で、ポイント還元に惹かれ調子に乗って買い過ぎてしまいました。
そして、ダウンロードしてみるとユーザから見て意味のない数字の羅列(図1)で、このままでは扱いづらい・・・図2の機能を持つツールを作ってみます。

イメージ 6
図1.ダウンロードしたファイル名

イメージ 3

図2.ツールのイメージ


■ 付与情報とは。(Exif、id3、Vorbis Comment)

画像や音楽ファイルには、付加情報が埋め込まれているフォーマットがあります。
たとえば・・・

【MP3形式、FLAC形式】(id3、VorbisComment

アーティスト名、曲名、アルバム名、トラック番号など

イメージ 1
図3.FLAC形式ファイルのプロパティ例


【JPEG形式】(Exif

撮影時の露光や感度、GPS座標など

イメージ 2
図4.JPEG形式ファイルのプロパティ例

JPEG画像にはGPS座標などの付与情報も入っていて、地域ごとに画像を分類するなど使えそうです。
そして、付与情報の取得方法としてパッと思いつくのは①、②の方法です。

① ファイルに格納されているタグをバイナリで取得
② Shellクラス(Windowsの機能)を利用しタグを取得

今回は②の方法で取得します。
それぞれ、保存されている内容については検索サイトで検索してみて下さい。


■ 趣味のプログラム作ってみよう。

私の場合、趣味のプログラムはGUIのプログラムを作成します。
GUIアプリケーションを作る方が出来上がりが想像でき、途中経過を見てモチベーションを保って作ることができるのでお勧めです。

【デザインとソース】
機能を考え、テキストボックス(Edit)および、ボタン(Button)、リスト(ListBox)を配置して、今回は図5のような構成になりました。

・Button1:入力ディレクトリの選択
・Button2:出力ディレクトリの選択
・Button3:実行ボタン
・CheckBox1:実行後に出力カレントディレクトリを開くか?

イメージ 8
図5.デザインモード

今回メインとなる音楽ファイルからタグ情報を取得するにはShell32.dllに含まれる機能「GetDetailsOf」メソッドを使用します。「GetDetailsOf」を使用したソースコードは↓このようになります。
uses節には、Shell32_TLBを追加してください。 詳しくは全体のソースを見てみてください。

【type節】

TSongInfo = record
  artistName: string;
  albumName : string;
  trackNum  : string;
  songName  : string;
end;


【関数】

// 音楽ファイルからタグ情報を取得する
function TForm1.getSongInfo(fileName: string):TSongInfo;
var
  shell      : TShell;
  folder     : Shell32_TLB.Folder;
  folderItem : Shell32_TLB.FolderItem;
begin

  // 対象ファイルのプロパティを取得
  shell     := TShell.Create(Self);
  folder    := Shell.NameSpace(ExtractFilePath(fileName));
  folderItem:= folder.ParseName(Extractfilename(fileName));

  // 取得したタグ情報をセットする
  result.artistName:= folder.GetDetailsOf(folderItem, 217);
  result.albumName := folder.GetDetailsOf(folderItem,  14);
  result.trackNum  := folder.GetDetailsOf(folderItem,  26);
  result.songName  := folder.GetDetailsOf(folderItem,  21);
end;

全体のソースコードはこちら

【実行画面】
Button1をクリックすると、変更前のファイル名と変更後のファイル名をリストボックスに表示できました。

イメージ 5
図6.実行画面

【実行結果】
Button3をクリックすると、取得したタグ情報をファイル名にセットしました。

イメージ 7

図7.実行後の出力


■ おわりに

今回はブログ2周目初めてということで、前回の料理教室のお話と趣向を変えてみました。

梅雨の時期に入りましたし、家での空き時間にツールなど作成してみてはいかがでしょう。

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事