レーベルゲートCD2の音楽CDをiTunesに取り込む

先日中古CDを何枚か購入をしてiTunesで取り込もうとしたら取り込めないCDがあった。

ちなみにこれ

Do You Know?

Do You Know?

名曲「ココロオドル」が収録されているアルバムですね。

iTunesのトラック情報を見てもどうもへんなデータトラックが入ってるっぽいのでエクスプローラで見てみるとSTART.exeとかいう謎の実行ファイルが。

実行してみると、どうもここからCDが再生出来るっぽい。なんでこんなことになってるんだ…
再生しようとするとMAGIQLIP2とかいうのがないと再生できないっぽい。同梱されてたのでそのままインストール。
完了して実行しても

「MAGIQLIP2のパソコンのドライブにレーベルゲートCD2が入っていません確認してください」

と表示され再生されない。

??

そもそもレーベルゲートCD2ってなんぞ?

軽く調べてみるとどうやら一昔前に話題になったコピーコントロールCDCCCD)の規格の一種らしい
ウィキペディア参照

見てみるとネットワーク認証を介して再生、複製を管理していたらしい。しかも2回以上の複製は有料とか言う糞みたいな仕様だったっぽい。消えてよかったですね。

ただ問題はネットワーク認証が必要なのにもかかわらずそのサポートが打ち切られているというところ。(sonyのページ http://www.sonymusic.co.jp/cccd/
基本的にこのレーベルゲートCD2はsonyが採用していたようです。また独自規格を作ってはサポート打ち切ることに定評のあるsonyかよ…

これじゃあ俺のiTunesライブラリコレクションに入れられねーじゃねーか糞が!と思ったんですが、まあCCCDのチェックをすり抜けてトラック情報抜き取る方法とかさすがにあるだろうとググったら案の定発見。過去にCCCDと戦った英雄たちに感謝。

どうやらExact Audio Copyというソフトを使えばいいっぽい
参考:http://www3.ocn.ne.jp/~j-takei/cccd.htm
DLはこっち Exact Audio Copy

wavやmp3で抜き取ってもよかったんだけど、自分でトラック情報とか入れるの糞めんどいのでimageファイルとして書き出すことに。空きCD持ってたらそれに焼いてもトラックがあっていればたぶん大丈夫なのでまあそっちでもいいかも。

IMGで出力するとでかいwavファイルとトラック情報の入ったcueファイルが出力されます。

仮想ドライブはずっとPowerISO使ってたんですが、cueってマウントできないんですね。めんどくさい。。。

久々にdeamontoolsの出番か?と思ったらどうもiTunesとdeamontoolsの生成する仮想ドライブは相性が悪いらしく認識してくれないっぽい

なんとかならんのか!と思ったらどうやらAlcohol52%だと問題ないっぽい。
DLはこちら Alcohol 52% - ダウンロード
softonicとかvectorググるとTOPに出てくるけどどうもリンク切れを起こしているらしくDLできなかったので注意。

インストールして先ほど作ったcieファイルをマウントさせてiTunesを起動すると。

無事認識されてインポートできました。

しかしインポートする際にトラック情報は取得できたので同じようになんとか取り込んだ先人もいるみたいですね。さすがやな

これはwindowsでの方法なので、Macだとどうなるのかしらね。一応sonyのサポートページではWindowsのサポートは終了としか書いてないので大丈夫なのか?

ffmpeg導入した

不意に思い立って個人のVPSffmpegをいれてみた。

ffmpegは動画音声のコンバータみたいな奴です。おそらく今世の中にあるいろんな変換ソフトはこれがベースになってる(はず)

とりあえずmp3lameに変換できれば言いやって感じで始める

まず最初に引っかかったサイトの通りにやってみる
http://nplll.com/archives/2008/01/ffmpegmp3_3gp.php

おっとyum使う感じですか、apt-getですませたいんですよね
という事で調べたらここが引っかかる
https://wiki.ubuntulinux.jp/UbuntuTips/Application/HowToInstallAndUseLatestFFmpegAndX264

x264とかはいらないのでその辺省いて設定

http://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide
こっちで最初やってたけどどうもffmpegリポジトリが更新されているようでうまくmake出来なかった(しかも更新が昨日、なんと言うタイミングだ)

順調にmake出来てたんだけど最期のffmpegの部分で詰まった
makeをすると

libavcodec/libavcodec.a(libmp3lame.o): In function `mp3lame_encode_init':
$home/ffmpeg_sources/ffmpeg/libavcodec/libmp3lame.c:120: undefined reference to `lame_set_VBR_quality'

このエラーが出た。中身みてみた

118 if (avctx->flags & CODEC_FLAG_QSCALE) {
119 lame_set_VBR(s->gfp, vbr_default);
120 lame_set_VBR_quality(s->gfp, avctx->global_quality / (float)FF_QP2LAMBDA);
121 } else {
122 if (avctx->bit_rate)
123 lame_set_brate(s->gfp, avctx->bit_rate / 1000);
124 }

一応ffmpegのメーリスにも飛んでたみたいだけど解決方法が調べてもわからない。

んーqualityってことはなにかしらの音質とかを設定するのかな。おそらく設定されてないときはデフォルト値かなにかを使ってくれるはずだと思ってコメントアウトしてmake。まあだめかなと思ったが

うまくいった。。。

まあうまくいったんならいいや(適当)

ということで適当に変換

ffmpeg -y -i taeget.mp3 -acodec libmp3lame -ac 2 -ar 44100 -ab 128k test.mp3

できた

Androidでちょっとはまった話

最近お仕事でAndroidアプリを作る事になってジャバ書いてます。

AndroidってAPILevelによって使えたり使えなかったりするものが多いですね。
ビルド時にコンパイルエラー出してくれればいいんですが、たまにビルドと追っちゃう奴もあったりして困っちゃいます。
とりあえず2つ見つけたのでメモ

ArrayAdapter.addAll(ArrayList list)

これはJavadocにAPILevel11以降って記載されてるのですぐにわかった。(なんで最初からないんだ…)
overrideで自前実装すれば問題ないですが。

もう1つが

SharedPreferences.EditorのputSetStringとgetSetString
HashSetがそもそも使えないのか…(驚愕)
しかもJavadocが書かれていない。
ちょっとたのむよー

この場合はまあなんかうまい感じでcsvとかに変換してStringで入れれば委員じゃないかな(適当

wikipediaのポリモーフィズムの項について自分なりに考えた

今日Twitterを見てたら、こんな発言が

wikipediaポリモーフィズムのところの話だ。

そういえば、あんまりしっかり見たことなかったなあと思ってみてみると「ん?」って感じの記述が

プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。

これはちょっと違うような気がする。


ポリモーフィズムはある任意の入力に対して、出力が一意に決定するセットを各要素が複数持つことを許容する、ってことだと思います(思いますっていうのはあくまで自分の考えではそうということです)。
wikipediaの上記の記述だと「ある任意を入力に対して、複数パターンの出力を有する」と解釈することもできます(若干曲解のようにも見えますが…)

ここで問題になるのは「入出力のセット」ってどういう定義なのかということですね。僕なりの解釈では「ある型の入力に対して出力の型が一意に決まる」だと思います。

しかしよく考えれば動的片付け系ではこういうことできちゃいますね。たとえばRubyだったらこういうのかけますよね

hogeメソッドはintを引数として数値型と文字列型の2パターンの返り値の型をセットしています(実際こんなメソッドのパターン使うことあるのかどうかはさておき)。さらにperlなんかでは型という概念が希薄なので、ある入力にたいしていろいろなオブジェクト(というかリファレント)を渡せますし。
と、ここまで書いてて「Rubyだったらすべての基底クラスとしてobject型があるんだからもとは言えば全部オブジェクト型の派生が返ってくるんだから厳密には型は一意に決まってるんじゃないか」とか思い始めました。んーよくわからん

TypeError: e[h] is not a function.はなぜ起きたのか

またform周りの仕様に苦しめられた。

submitのイベントの前にhiddenで渡す値を変更したくてsubmitボタンをクリックしたときにそれを行おうとしていたのだが、
「それだとブラウザの仕様でelementが書き換わる前にsubmitが行われる可能性があるかもしれない」
と言われた(一応手元のブラウザで確認したけどそういうことはなかった。けど念のため対策はしないといけない)ので、buttonエレメントのclickイベントで発火するようにした。

そこでデザイナーさんに「ちょっとinput type="button"にしてくれませんか」といわれたのでそっちでやってみたら

TypeError: e[h] is not a function

が起きた。なんじゃこりゃ


ということでググったら案の定stackoverflowにあった

javascript - TypeError: e[h] is not a function - Stack Overflow

英語力のなさに定評のある俺ががんばって訳してみると

お前どれかのinputエレメントにidとかnameにsubmitってやつがないか?あったらそれを消したら治るよ。
どうやらinputエレメント中にそれがあると自動的にHTMLInputElementのsubmitプロパティがセットされるみたいでな。それでHTMLFormElementの方にはsubmitがないって言われたみたい

ということらしい。調べてみたらあった。んで直したら動いた。
こういう細かい仕様はよくわからんな…

Androidデフォルトブラウザで隠れたinput type="file"のダイアログを出す方法

久々に書くけどちょっと真面目にこれはハマったんでメモ

ファイルとかアップロードに使うinput type="file"だけど、
ぶっちゃけデザインがダサいので裏側に隠していい感じの画像をクリックするとダイアログが開いて選択できるといいとおもったんでやってみた。下記のやつを参照してみた。
input:file 要素を表示しないで、ファイルをアップロード

PCやiPhoneだとうまくいったんだけどAndroidのデフォルトブラウザでやってみたらダイアログが開かれない。なぜだ…

alertデバッギングをしてみるとclickイベント自体はちゃんと動いているっぽい

いろいろ悩んでいたところjsdo.itにいい感じのテスト用のやつがあったんでここでいろいろ試してみた。
input type="file"のダイアログを、JavaScriptから開けるかのテスト

検証した結果、表示されてない(style="display:none")や画面外に飛ばしてる(絶対座標で-指定)場合はファイルダイアログが開かないことが発覚(jQueryのtrigger使わないとダメかと思っていたけどそんなことはなかった)。

opacity:0でやってみるかと思ったけど表示されるであろう場所は空白で表示されるわ、そこをタップしたらダイアログ開かれるわで、あんまりよろしくないのでどうしたもんかと悩んでいた。そしてukayareに電流走る。

「ん?表示されてればいいんなら、クリックイベント発火させる直前に一時的に出して、発火後にすぐに隠せばいいんじゃね?」と思いついた。

実際やってみたらちゃんと動いた。

ググって探しても見つかんなかったんだけど結構やってる人いそうなんだけどなあ。ググり方が悪いのか

追記
IEでやったら動かんです。

Amazon ウィッシュリスト経由で砂 1 トン「だけ」を送る方法

ウィッシュリスト経由で好きなものを送り付ける方法があります。
Amazon ウィッシュリスト経由で砂 1 トンを送る方法

しかしこれを発展型で好きなものだけを送り付ける方法を見つけた

1.↑と同じ方法で注文する

2.アカウントサービスで注文履歴に移動

3.先ほどの注文があることを確認して注文をキャンセルを選択

4.キャンセルする商品を選択できるのでウィッシュリストから選んだ商品を削除

5.適当にキャンセルした理由を選んで「チェックした注文をキャンセルする」を押す

これでおk。

つまりウィッシュリストを公開している人は突然知らないものが送られてくる可能性があるわけです。

こわいこわい


※注意※
この方法を使うときにはちゃんと冗談が通じる相手にだけ使いましょう。この方法で何かトラブルが起きてもこちらは一切関知しませんので自己責任でお願いします