Hatena::ブログ(Diary)

私と私の猫の他は誰でも隠し事を持っている

2012-5-26

iTunes でアートワーク画像セット時に音源ファイルが破損する現象

今日、自宅の Mac にて、iTunes で CD からリッピングした MP3 (ポータビリティ確保の為、AAC じゃなくて MP3 にしています)をプレイしてたら、曲が終了した後で途中の部分がまた再生されて数秒でプチッと切れる、という現象が発生しました。この MP3 ファイルを Audacity で開いて最後の付近を確認してみたら下図のようになっているので、MP3 ファイルの破損と考えて良さそうです。

f:id:Mariyudu:20120526185723p:image

原因を特定する為に、リッピングをもう一度行いながら各過程のでファイル破損のチェックをしてみたところ、アートワーク画像のセット(iTunes Store からのアートワーク入手ができないアルバムなので、ネットからジャケット画像を探して手動でセット)の後で破損が確認できました。つまりは、iTunesアートワークセット機能に不具合ありな気配が濃厚です。アートワークをセットしなければ問題なさそうなのですが、それも寂しいので、iTunes を使わずにジャケット画像を音源に埋め込む手段を調べることに。そしたら上手い具合に Tagr という MP3 編集用のシェアウェアが見つかって、なかなか良さげなので使ってみることにしました。以下は、Tagr を使ってこの問題を回避する手順です。

  1. 開発元サイトのダウンロードページから Tagr を入手、インストール
  2. iTunes で CD を取り込み(リッピング)する。
  3. iTunes 上でリッピングした曲を選択してからマウス右クリック(または Option + クリック)してポップアップメニューから「Finderで表示」を選び、音源をファインダで表示させる。
  4. ファインダ上で、当該の音源を適当な場所にコピーして退避。
  5. iTunesリッピングした曲をいったん削除。
  6. Tagr を起動して下図の要領で、コピーしてあった音源にジャケット画像を埋め込む。
  7. コピーしてあった音源を iTunesドラッグ&ドロップして完了。

f:id:Mariyudu:20120526185724p:image

以上です。iTunes から一旦削除したり再度コピーしたりするのは、iTunesライブラリに置いたままの状態で Tagr で画像埋め込みを行っても、iTunes 側でアートワークとして反映されなかったからです。画像付の音源をコピーする時に iTunes の楽曲データベースにもアートワーク情報がセットされるのでしょうか。よく分かりませんが。

ということで、同様の現象にお困りの方がいらっしゃったらご参考までに。尚、当方の環境は Mac OSX 10.6.8 + iTunes 10.6.1 となっています。

※本現象は Appleフィードバックしました。

2012-4-28

Amazon のダンボールで使い捨ての携帯用譜面台つくってみた

連休初日です。いいお天気です。でも家にこもって色々「作ってみた」的なことばかリしてるので、ハッピーなんだか悔しいんだか複雑な Mariyudu@引き篭もりプログラマ です。

いい天気といえば、これからどんどん陽気が良くなってくるので、ライフワークにしている YouTube 公開用の楽器演奏を近所の公園で収録する機会が増えそうです。やっぱり屋外で弾くと気持ちイイっすからね。大体の場合は曲を暗譜しているのでギターケースにデジカメや携帯三脚を詰め込んで持ち歩き、それで事が足りるんですが、タマには譜面が必要なケースがあったりします。

一応、金属製の折りたたみ譜面台(こんなの)は持っているんですが、あれって結構重いんですよね。ちょこっと弾くだけなのに仰々しく譜面台立てるのもちょっとアレだし、荷物増やしたくないし。ポケットファイルで済まそうかと思っても、ビニールに光が反射して結構見づらいとか、ファイル帳自体がそれなりに厚みがあるのでギターケースに収まらない。もうちょっと気軽に持ち歩ける譜面台を何とか出来ないかなー、と辺りを見回したら… ちょっと奥さん、いいモノがありましたよ。Amazon で買い物した時にメール便とか送られてるダンボールのアレです。

てな訳でこんなふうに譜面台を加工してみました。まず余分な部分を切り取って、見開きになるように上下に切り込みを入れます(↓)。

f:id:Mariyudu:20120428175634p:image

はい、出来上がりww あとは開いた面に楽譜をメンディングテープとかで貼り付けます。剥がす時のことを考えて四隅ではなく上下の二箇所を、それも譜面にはテープがちょっとだけ(3ミリ程度)被るような感じで貼るといいかも(↓)。

f:id:Mariyudu:20120428175635p:image

使う時はこんなふうにギターケースを横立てして、その上に置きます(↓)。

f:id:Mariyudu:20120428175636p:image


以上、Mariyudu 的地球に優しい携帯用譜面台でした。No Music, No Life !!

2012-4-18

オープンソースなベクターアイコン OpenIcons

暖かいだけでもう人生の7割くらいは幸せなのだ、と春の到来を噛みしめている北国生まれプログラマ Mariyudu です。いやほんと、これで花粉さえなけりゃ…

さてさて、今日もオープンソースリポジトリ系の RSS を巡回していて、なかなか充実したベクターアイコンセットと出会いました。Robert "Unlogic" Olofsson さんという方による OpenIcons です。2010年11月に58個のセットからスタートして版を重ね、先日リリースされた rev.70 では、371個にまで増えています。丸みのある柔らかいシェイプとインファントな色使いが特徴。SVG 形式のベクターファイルと、16x16 から 128x128 ピクセルの9種類のサイズの PNG 画像が同梱されています。尚、ライセンスLGPL ver.3 となっています。

f:id:Mariyudu:20120419002300p:image

ベクター形式は、組み合わせたりカスタマイズしたりと、クリエイターさんにはハンドリングしやすいのが魅力的ですね。ダウンロードこちらから。という訳で、日本語ブログ界隈ではあまり紹介されてないっぽいので、おすそ分けでした。

2012-3-17

20種類の楽器で聴くバッハのプレリュード(無伴奏チェロ組曲第1番 BWV1007)

子供の頃、デパ地下のキャンディー売り場で色々な種類のキャンディーが山盛りになっているのを見ては「1個ずつ全部買って並べてみたい!!」てな興奮に駆られたことってないですか? ああ、無いですか… まぁいいんですけど、私って「その類」の人間らしいです。つまり、同一カテゴリー内で様々なバリエーションが用意されていると訳もなくウキウキしてしまい、それらの入手・記録・分類といった行動への欲求を抑えがたくなるみたいです。

何の話かってえと、先だってライフワークにしているギター演奏の YouTube 公開で、バッハのプレリュード(無伴奏チェロ組曲第1番 BWV1007)を手がけたんですが、その際にこの曲がとても多種多彩な楽器で演奏されていることに気づきました。そこで頭をもたげてきたんですねー、前述の「並べてみたいゴコロ」がw そんな訳で、YouTube に登録されている同曲から Mariyudu がチョイスした「バッハのプレリュード・アラカルト」をどうぞ。

まずは原曲のチェロ演奏を。でも只のチェロじゃ面白くないのでアルミで出来たチェロという変わり種を(↓)。

D

お次は同じ擦弦楽器コントラバスヴィオラバイオリン、と音域を上げながらどうぞ(↓)。

D

D

D

弦の音に飽きちゃいました? じゃ、管楽器に変えてみますか。普段お馴染みな楽器でサックスフルートでの演奏をどうぞ(↓)。

D

D

管楽器といえば日本人なら一度は演奏の覚えがある「たて笛」ことリコーダー。この楽器、実はルネサンス時代から室内楽で頻繁に使われた由緒ある楽器です。その高雅な調べをどうぞ(↓)。

D

ちょっと奥ゆかしげな雰囲気になったところで、同じく古楽の時代では主役級で活躍した、クラヴィコードという鍵盤楽器リュートというギターのご先祖様みたいな撥弦楽器での演奏をどうぞ(↓)。

D

D

ギターの話が出たついで(?)なので、クラシックギターでの演奏を。ありふれた楽器といえばそうですので、ここは演奏者に重点を置いて選んでみましたw いやー楚々とした美人ギタリストさんですねー(↓)。

D

某有名大の某サークルのせいか、ギターといばマンドリン、てな連想が働くの日本だけ? ま、とにかくマンドリンおよびマンドチェロ(低音部を受け持つマンドリン)での演奏を。前者はクラシックで使われる水滴型ではなく、カントリー用のフラットマンドリンですね(↓)。

D

D

鍵盤楽器がお座なりだったようなので、パイプオルガンピアノアコーディオンでの演奏を。ピアノ版はかなり奔放なアレンジが施してあって、ずっと同じ曲を聴いてきた耳には新鮮ですね(↓)。

D

D

D

さて、この辺で少し変わった楽器にシフトしてみます。パンフルートという楽器をご存知でしょうか。昔、ザンフィルという奏者のブレイクで少し知名度が上がりましたがギリシャ神話にも登場する古い歴史を持つ楽器らしいです(↓)。

D

次に中阮(チョンルアン)という中国の伝統楽器を。あの女子十二楽坊でも大きくフィーチャーされてはいませんでしたが、確か使われていたと思います(↓)。

D

そしてこれ。忘れちゃいけませんよね、小さな万能楽器、ウクレレを。音域の狭さによる不自由を全然感じさせない巧みなアレンジと演奏です(↓)。

D

ずーっとアコースティック楽器ばっかりだったので、最後はコンテンポラリーにEベース、Eギターとエレクトリックで締めたいと思います。ロケンロール!(↓)。

D

D

えーっと、番外オマケで私が鉄弦ギターで演奏したやつを(オズオズ)…

D

月並みな演奏ですけど、そんなにわ、悪くはないでしょ? という訳で楽しんで頂けましたでしょうか? ではまたっ (逃げるように去る)

2012-3-3

テンポラリ稼働な EC2 インスタンスから Route53 をダイナミック DNS っぽく使う

最近はコード書くより AWS の色んな機能を弄ってる方が楽しかったりするので、プログラマとしてのアイデンティティが揺らぎはじめている Mariyudu@どうせ野良だし楽しければいーんじゃねーの、です。はい、矜持もプライドも野末のどっかに忘れてきましたw

そんな訳で今、某サービスを構成するサーバAWS EC2 上で開発中です。開発用のインスタンスだとキホン、作業の時だけ起動して料金を節約するってのがパターンだと思いますが、そんな時ちょっと不便なのが起動の度に変わってしまう IP やホスト名。そこで、このサービスのドメインもやはり AWS の Route53 (以下、R53)で DNS 運営していることもあり、インスタンス起動時に当該ホストの A レコードを書き換える仕組みをちょこちょこっと作ってみました。R53 de Dynamic DNS って感じですな。以下、手順です。

  1. R53 の認証や API 実行を行う Perl スクリプト dnscurl.pl をここからダウンロードして、適当なディレクトリ(例 : ~/bin/r53/)にインストールしてセットアップ(ここが参考になります)。
  2. インスタンス起動時に割り当てられた IP を調べて、当該 FQDN の A レコードの書き換え処理を行うシェルスクリプト(下記)を、同ディレクトリに配置(例 : ~/bin/r53/update-r53.sh)。
    #!/bin/sh
    
    cd ~/bin/r53/
    
    # 各種パラメータ(アカウント・ゾーンID・当該インスタンスのFQDN・TTL)
    KEYNAME="foobar@mariyudu.jp"
    ZONEID=XXXXXXXXXXXXX
    FQDN=develop001.mariyudu.jp
    TTL=300
    
    # 現在、DNS にセットされてる当該 FQDN の IP
    OLDIP=`/usr/bin/dig $FQDN +short`
    
    # インスタンス起動時に割り当てられた IP
    NEWIP=`/usr/bin/curl -s "http://169.254.169.254/2008-02-01/meta-data/public-ipv4"`
    
    # 上記パラメタを使って R53 API へリクエストする XML を生成
    TMPFILE="/tmp/update_r53.$$.xml"
    cat << EOS > $TMPFILE
    <?xml version="1.0" encoding="UTF-8"?>
    <ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
     <ChangeBatch>
      <Comment>Update A Record of $FQDN</Comment>
      <Changes>
       <Change>
        <Action>DELETE</Action>
         <ResourceRecordSet>
          <Name>$FQDN.</Name>
          <Type>A</Type>
          <TTL>$TTL</TTL>
          <ResourceRecords>
           <ResourceRecord>
            <Value>$OLDIP</Value>
           </ResourceRecord>
         </ResourceRecords>
        </ResourceRecordSet>
       </Change>
       <Change>
        <Action>CREATE</Action>
         <ResourceRecordSet>
          <Name>$FQDN.</Name>
          <Type>A</Type>
          <TTL>$TTL</TTL>
          <ResourceRecords>
           <ResourceRecord>
            <Value>$NEWIP</Value>
           </ResourceRecord>
         </ResourceRecords>
        </ResourceRecordSet>
       </Change>
      </Changes>
     </ChangeBatch>
    </ChangeResourceRecordSetsRequest>
    EOS
    
    # dnscurl で R53 API を利用
    /usr/bin/perl dnscurl.pl --keyname $KEYNAME -- -H "Content-Type: text/xml; charset=UTF-8" -X POST --upload-file $TMPFILE https://route53.amazonaws.com/2010-10-01/hostedzone/$ZONEID/rrset > /dev/null 2>&1
    
    rm $TMPFILE
    
  3. 上記スクリプトを、インスタンス起動時に実行するようにする(下記のように @reboot ディレクティブを使って crontab 登録するのがお手軽)。
    @reboot /bin/sh ~/bin/r53/update-r53.sh
    

以上っす。「別に Elastic IP をアサインしておきゃいーんじゃね? 1日の2/3くらい使わなくても、それで発生する料金なんて月数百円くらいだし」という意見が圧倒的かと思いますがw、まあそれでもインスタンスが数十台くらいになったらちょっとした節約になるかと。

それから、上記 update-r53.sh では A レコードの書き換えの際に、R53 API に編集という手段が用意されていないっぽいので、当該 A レコードを削除してから再度追加するという手順になっていますが、その削除がクセ者。FQDN だけでなく TTL まで現状と一致したものを指定してやらないとエラーになっちゃいます。なので、例えば TTLスクリプトで定義されている300秒から後で手動で変更したりすると、この仕組みは上手く動かなくなってしまうのでご注意を。ちゃんと API 経由で A レコードを問合せした上で削除→追加してやれば良いんでしょうが、時間がなかったので。