« November 2007 | Main | January 2008 »

2007.12.25

[iPod touch]iPhone/iPod touch用Web Downloader HistoryDL.app ver.0.2

MobileSafariの履歴をリストアップし、そこから選んでダウンロードできるWeb DownloaderであるHistoryDL.appをver.0.2にバージョンアップしました。

環境設定画面から保存先を設定できるようにしました。

ダウンロード中は、ステータスバーにプログレスアイコンを表示するようにしました。
内部的にはクラスを導出したりと書き直しをしているんですが、あんまり関係無いですね。

mkplusさんにアイコンを作ってもらいました。
素晴らしい出来で感謝しています。

インストール

いつもの野良リポジトリからインストールしてください。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Network > HistoryDL」です。

関連エントリ

[iPod touch]MobileSafariの履歴から選んでhtmlをダウンロードできるダウンローダHistoryDL.app

[iPod touch]iPod touch / iPhone用ダウンローダHistoryDL.appで画像のダウンロードするのを補助するbookmarklet

|

2007.12.21

[iPod touch]iPod touch用Dock Connector一体型マイク頒布1号機完成

iPod touch用Dock Connector一体型マイク頒布をご希望の方がいらしたので、1号機を完成させました。

自分用として作ったものは簡単に済ませましたが、今回は人様にお渡しするものなので、電源周りにパスコンを、プリアンプからの出力にカップリングコンデンサを入れました。
普通の部品を使ったので、中身がパッツンパッツンに。

その代わり、マイクカバーのスポンジは切り詰めざるを得ませんでした。
カバーは少し厚手のストッキングの方ががいいかなあ。買うのに勇気が必要そうですが(笑)。

コンデンサを二つ追加しました。

なんだかんだで作るのには結構時間がかかります。

0号機とツーショット。

1号機は中身パツパツです。

関連エントリ

[iPod touch]Dock Connector一体型iPod touch用マイク頒布

[iPod touch]Dock Connector一体型iPod touch用マイク

[iPod touch]iPod touchにマイクを付けて録音実験

iPod touch用VoIPソフトウェアが新年に発表

iPod Touch Modsさんで、待望のiPod touch用SIP-VoIPソフトウェアnTouchが、あと11日で発表になるそうです。
音声入力方法は、AMRでの録音しかサポートしないAVRecorderクラスによるものでなく、wavで入力できる「Low Level Audio」経由だそうで、iPod touchにおけるリセット問題が回避できる可能性があります。

|

2007.12.15

[iPod touch]iPod touch開発メモ: libid3tagのコンパイルとテスト

noviさんのところでlibid3tagiPod touch向けビルドに失敗するという話が出ていたので、自分のところでも試してみることに。

母艦では、libid3tagでファイル埋め込み歌詞の読み出しができているとのこと。
Lyrics3にピンときてなかったようなので、SYLTというFrameの方でしょうかね? よく分かりません。詳しいことはnoviさんが知っています。

こちらでは、すんなりビルドに成功。

自分の開発環境は、iMac G5+Leopardにiphone-devにある手順でインストールしたもの。
dylib1.10.5.oが無いと言われることがあるので、以下のシンボリックリンクを張ってます。

cd /usr/local/arm-apple-darwin/
ln -s dylib1.o dylib1.10.5.o

テストコードを書いてみました。
歌詞の読み出しはよく分かってませんが、以下のコードでiPod touch上でもUTF8で曲名が読み出せてます。



#include <stdio.h>
#include <id3tag.h>

int main(void) {
struct id3_file* file;
struct id3_tag* tag;
struct id3_frame* frame;
union id3_field* field;
const id3_ucs4_t* title;
id3_utf8_t* title_utf8;

file = id3_file_open("/var/root/Media/test.mp3",
ID3_FILE_MODE_READONLY);
tag = id3_file_tag(file);
frame = id3_tag_findframe(tag, ID3_FRAME_TITLE, 0);
field = id3_frame_field(frame, 1);
title = id3_field_getstrings(field, 0);
title_utf8 = id3_ucs4_utf8duplicate(title);
printf("Title: %s\n", title_utf8);
return 0;
}

共有ライブラリの方でなくlibid3tag.aを使い、スタティックリンクしてコンパイル。
zlibも必要。

arm-apple-darwin-gcc id3.c libid3tag.a -lz -o id3

コンパイルしたlibid3tag-0.15.1bを置いておきます。

ダウンロード libid3tag-0.15.1b-1_arm-apple-darwin.zip (79.3K)

|

[iPod touch]Dock Connector一体型iPod touch用マイク頒布

部品が余ったので、Dock Connector一体型iPod touch用マイクを頒布しようかと思います。

2008.04.03追記: 新型になりました。

現状、Jailbreak済みのiPod touchにおいて、音声を録音できるVoice Notesと、Nikotalkieという音声SMSで活用することができます。また、待望のVoIPにおいても進捗があるようです。















送料別\4,500でどうでしょう。
当方で動作確認の上発送。一つ一つ手作りです。
マイクの初期不良2週間保証。サポート無し。

手順としては、「発注>マイク完成連絡>振込依頼>所定銀行口座振込確認>発送」という感じになります。

自分で作るという手があります。
いつかサプライメーカーが、より安価に高性能なものを量産するかもしれません。
現状渡しです。将来、仕様変更をする可能性もあります。
それでも欲しいという方はメールをください。

hitoriblog/* AT */gmail.com

なお、今使っていて気になる点として、「結構録音を終了した瞬間に再起動がかかる」ということがあります。
再起動は、マイクをつないでいなくともNikotalkieやVoice Notesを使っていると起きます。
気になる人は自分のiPod touchでテストしてみてください。僕のiPod touchだけの現象ならいいんですが……。
理由はよく分かりませんが、Voice Notesの作者であるEricaさんのところにも、そういった現象が起きている旨のコメントが見られます
特に、今のバージョン0.23から不安定になったという話ですが、自分は昔のバージョンを試したことが無いので比較できません。

2008.04.03追記: Cydia PackagerからインストールできるErica女史の音声メモアプリ、Voice Notes 0.35b5(VNotes)を試していますが、このバージョンはiPod touchでもリセットがかからないようですね。

2008.04.04追記:やっぱりリセットかかりました><惜しいなぁ

AVRecorderクラスを使った録音方法はEricaさんが解析されたもので、TUAWに解説がありますが、苦労されたとのこと。正規の方法が公開されていてできているものではないということの限界かもしれません。

http://www.tuaw.com/2007/08/06/iphone-coding-recording-audio/

これさえ直れば結構おすすめできるんですが、実情としてはこのような感じです。
実用性を求めたり、保証内容、サポート内容が気になる向きは、おやめになった方がよろしいかと思います。
iPod touch + 音声といった辺りの動きに、今、追従したい人柱志望の方、どうですか。

私の信頼度をはかる過去の同種の実績としては、WristPDAのバッテリをロットで発注し、頒布したということがあります。そのときは、交換サービス(WristPDAのバッテリはハンダで固定されているため、交換作業を代行した)分を含め、全数間違い無くお届けできたと思います。まだ少し余りがありますので、よろしかったらどうぞ。

|

2007.12.09

[iPod touch]Dock Connector一体型iPod touch用マイク

昨日のエントリ「[iPod touch]iPod touchにマイクを付けて録音実験」に引き続きです。

アンプ内蔵のマイクを買ってきました。
これをこんな風に取り付け、

イヤホン用のカバーをかぶせて。

カバーを閉めたら出来上がり。
昨日のあれは何だったんですか? って感じですか。
いやー、こういうことに関しては我慢が利かないもんで。

完成写真

Dock Connectorからの給電で動きます。

インプレッション

録音したデータです。昨日と同じくVoice Notesで録音しました。それを母艦でLAMEにてMP3にエンコードしています。SoXがビルドできたので、単体でMP3にエンコードできるかも。それについてはまた後日。

「2007-12-09_00-28-57.mp3」をダウンロード

昨日のやつよりずいぶんいいですね。
自分の声を吹き込む分には十分と感じました。
これで、iPod touchでもVoIPができますね。

ただ、会議の録音などには使えない感じです。
それには、より感度の高いマイクないしゲインの高いプリアンプが必要でしょう。

|

2007.12.08

[iPod touch]iPod touchにマイクを付けて録音実験

iPod touchにマイクを付けるModをやった方が出現したのを知り、居ても立ってもいられなくなったので、追従してみました。

iPod Touch Modsさんです。

Mic Preamp Schematic for the iPod Touch
You Want It - You Get It

とりあえず部品箱等から手持ちの部品を集めて、ブレッドボードでプリアンプを組んでみることにしました。(内容は無保証です。何らか行動を起こす際は自己責任でお願いします)

Dock Connectorを物色

純正のDock Connectorを流用しようと思ったものの非常にやりにくかったので、近所のドンキでUSBリトラクタブルケーブルを購入。
いかにも分解しやすそうな奴、というのが選択基準でした。
選んだものは、ガワが爪で止まっているだけだったので10分後にはバラバラ。

端子からケーブルを外すときに、ハンダが端子に流れないように注意してください。
少しでも端子にハンダが乗ると、穴に入らなくなってしまいます。

ピン配列を変更

USBケーブルは4本結線。マイクに使うのはLine-InとGND、+3.3Vの電源と3本なので足ります。
ただし、使うピンが違うので差し替えます。
ピッチが狭いので拡大鏡を見ながらやりました。
差し替えてこんな感じに。

Dock Connectorのピン配列はiPodLinuxのページに書いてあります。

wikiPodLinux: Dock Connector

ピンの確認

HDDが逝きかけて半壊状態の4G iPodを実験台に。コネクタを差して、テスターでピンの確認をします。飛んでも惜しくない!!

+3.3Vの場所は間違いありませんでした。

ブレッドボード上に回路を組み、テスト

いきなり段取りが飛びますが、ブレッドボード上に、上記のiPod Touch Modsさん掲載の回路を組みます。奥の回路はAVRのテスト用で、関係ありません。

OpAMPが1個しか無かったので、OPA2604APを投入。

コンデンサマイクは秋月のFMトランスミッタキットに付いていた奴を使いました。

iPod touchに接続してテスト

早速つないでみます。

録音には、VNotesを使いました。

紹介記事: iPhone: Voice Notes

なんか使っていると頻繁に再起動がかかりますね。

録音したデータです。

「iPod_touch_mic_test.mp3」をダウンロード

内容についてはみなまで言うなということで。
ゲインが低いのか、音が小さいですね。ちょっと不完全燃焼気味ですが、とりあえず満足。

野良リポジトリにBladeEncを上げておいたんですが、直接エンコはできませんでした。
SoXがビルドできたら試してみます。

今日はアンプ付きのマイクを買ってきます。Dock Connectorの中に内蔵させる予定です。

|

2007.12.07

[Emacs]Carbon EmacsからDictionary.app(辞書)で単語を調べる

Carbon EmacsからDictionary.app(辞書)で単語を調べるEmacsLispを書いてみました。 .emacs.elに貼るなどして使ってみてください。

LeopardのDictionary.appで試しました。Leopard以前のDictionary.appでは動かないと思います(使う人もいないと思いますが)。TigerのDictionary.appでも動くそうです(情報:dageziさん)。

関数、my-search-at-dictionary-appをdefine-keyないしglobal-set-keyしてください。

regionを渡す場合は、transient-mark-modeをtにしてないとダメです。

AppleScriptでUI Scriptingしているので、「システム環境設定>ユニバーサルアクセス>補助装置にアクセスできるようにする」のチェックボックスをONにしないと動きませんし、do-applescript関数を使っていますのでCarbon Emacs依存だと思います。

(defun my-search-at-dictionary-app ()
  ""
  (interactive)
  (let* ((keyword (read-from-minibuffer
           " keyword: "
           (my-get-keyword)))
     (encoded-keyword (encode-coding-string keyword 'japanese-shift-jis)))
(unless (string= encoded-keyword "")
    (do-applescript (concat "
activate application \"Dictionary\"
tell application \"System Events\"
    tell application process \"Dictionary\"
        set value of text field 1 of group 1 of tool bar 1 of window 1 to \""
            encoded-keyword "\"
        click button 1 of text field 1 of group 1 of tool bar 1 of window 1
    end tell
end tell
")))))

(defun my-get-keyword ()
  ""
  (or (and
       transient-mark-mode
       mark-active
       (buffer-substring-no-properties
        (region-beginning) (region-end)))
      (thing-at-point 'word)))

(transient-mark-mode t)

もちろん、「dict://」という独自スキーマがあることは知ってます。

open location "dict://test"でいけます。

いつか辞書切り替えをするかもな、ということでこうしてみました。

|

2007.12.04

[iPod touch]iPod touch / iPhone用ダウンローダHistoryDL.appで画像のダウンロードするのを補助するbookmarklet

NGワード: 標準の, 写真(Photos), iComic

内容、スクリプトは無保証です。

昨日アップしたHistoryDL.app([iPod touch]MobileSafariの履歴から選んでhtmlをダウンロードできるダウンローダHistoryDL.app)で、NGワードとして挙げておいたにもかかわらず、htmlファイル以外のダウンロードうんぬんというリクエストが入ってきましたので、とりあえずダウンロードできるようになるbookmarkletをあげておきます。

母艦のSafariで登録して同期するなどで、iPod touch / iPhoneのMobileSafariに登録してください。

ダウンロードしたいファイルがあるページを表示させ、このbookmarkletを起動。
すると、そのページ内にあるimgタグを集めて画像への直リンク集を生成し、別ウインドウで表示します。

そのリンクを踏むと履歴に登録されますので、HistoryDL.appでダウンロードできます。

バッドノウハウな感じですが、Objective-Cでやり出すと今の自分には大変なので、これで勘弁してください。

ちなみに、元々のページに画像への直リンがある場合は、それを踏めばHistoryDL.appからダウンロードできます。逆に、このbookmarkletではリストアップされないので注意。
あくまでもimgタグの画像をダウンロードするための補助bookmarkletです。

javascript:flagreg=new RegExp("\.jpg|\.jpeg|\.png|\.gif", "gi");di=document.images;if(di.length==0){exit()};w=window.open('',(new Date()).getTime());w=w.document;w.open();w.write('<html><head>');w.write('<meta name="viewport" content="width = 320" />');w.write('<meta name="viewport" content="initial-scale=2.3, user-scalable=no" />');w.write('<title>Images</title><body>');w.write('</head><body>');reg=new RegExp(".+/(.+)", "g");for(i=0;i<di.length;i++){if(flagreg.test(di[i].src)){res=di[i].src.match(reg);name=RegExp.$1;w.write('<p><a href="'+di[i].src+'" target="_blank"><img border="1" src="'+di[i].src+'" /></a></p>\n');}};w.write('</body></html>');w.close();

冒頭の"\.jpg|\.jpeg|\.png|\.gif"というところを任意の正規表現にすると、その正規表現でフィルタリングされた画像リンク集にします。全部ありにしたければ、"\.*"です。

bookmarkletの補助スクリプトアプリケーションImgZip.app

バッドノウハウここに極まれり。

ついでに、/var/root/EBooksにダウンロードした画像(拡張子jpg, jpeg, png, gifのファイル)を、/var/root/Comicにzip圧縮して移動するスクリプトアプリケーションImgZip.appを作って野良リポジトリに登録しておきました。「Utilities > ImgZip」です。画像をダウンロードした後で実行すると、iComicで閲覧できるようになります。
利用には、zip、Erica's Utilities、BSD Subsystemが必要です。zipは野良リポジトリの「Utilities > zip」にあります。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

テストでポケット路線図 for 京ぽんを使ってみましたがいい感じです。

NGワード: 標準の, 写真(Photos), iComic

|

2007.12.03

[iPod touch]MobileSafariの履歴から選んでhtmlをダウンロードできるダウンローダHistoryDL.app

普通の人はMobileSafariでページ保存をしようと思って心当たりを試し、方法が無さそうなことに絶望するでしょう。
普通じゃない人は、ポートされたcurl, wgetを使ってダウンロードしようと思い、うまく名前解決できないことに再度絶望しているかもしれません。

それをどうにかしようと思って、MobileSafariの履歴をリストアップし、そこから選んでhtmlをダウンロードできるダウンローダを作ってみました。

NGワード: 画像, リンク, cookie, セッション, 認証

履歴

2007.12.25: ver.0.2 設定画面追加

2007.12.03: ver.0.1 初版。かなりアルファ版

インストール

いつもの野良リポジトリからインストールしてください。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Network > HistoryDL」です。

ずっと敬遠してきたObjective-Cでぼちぼち書いてみたものの、かなり自信無し。
無保証です。

使い方紹介

以下はMobileSafariの履歴です。

HistoryDLを起動すると、MobileSafariの履歴同様にリストアップされます。

ダウンロードしたいページを選択すると、
こんな感じの画面に遷移。Downloadボタンを押すと、ダイアログ等一切出ずにダウンロードが始まります。

ダウンロード中かどうかを知る術は、Downloadボタンが押された状態になっているか否か。
Downloadボタンが押されている間はダウンロードしています。
ボタンが元に戻ったら、多分ダウンロードは完了。

ダウンロードしたファイルは、「/var/root/Media/EBooks」に保存されます。保存先にある同名のファイルをダウンロードしようとした場合は、ファイル名の先頭にアンダーバーを付けて上書きを回避します。
保存先は、「HistoryDL.app/savepath.txt」を編集すると変えられます。

デフォルトの保存先は、BooksJ.app(Books.app)が参照するパスです。
BooksJ.app(Books.app)との連携を前提に作ったからです。
BooksJ.appは、野良リポジトリからインストールできます。オリジナルのBooks.appにエンコーディングの自動判定機能を追加しましたので、日本人にはこっちの方が便利なはずです。

[iPod touch]iPod touch / iPhone用テキストリーダーBooks.appの日本語エンコーディング自動判定対応版BooksJ.app

BooksJ.app(Books.app)で見ると、こんな感じでダウンロードされたファイルが表示されていることでしょう。

BooksJ.app(Books.app)では、htmlファイルを見ることができるのです。

BooksJ.app(Books.app)ではうまく表示できない幅設定ありのhtmlは、iSpitなどのローカルWebサーバを起動し、MobileSafariから見るのがいいのではないでしょうか。

画像をダウンロードしたい場合

[iPod touch]iPod touch / iPhone用ダウンローダHistoryDL.appで画像のダウンロードを補助するbookmarklet


NGワード: 画像, リンク, cookie, セッション, 認証

|

2007.12.01

[iPod touch]曲再生の一時停止、再開、状態取得等ができるiPod touch用コマンドラインアプリケーションmmpctl

昨日のwifictlに引き続き、既に野良リポジトリには登録しておいたmmpctlについて解説します。

これはwifictl同様iPod touch / iPhone用コマンドラインアプリケーションで、MobileMusicPlayer Controllerの略でmmpctlです。
ミュージック(MobileMusicPlayer)の再生/一時停止をコマンドラインからコントロールできます。

凝ったことはできません。
再生状態と一時停止状態との遷移、再生状態のレポート、現在再生曲情報の標準出力への書き出しのみできます。

主に、Erica's Utilitiesに収録されているplayaudioのフォローのために作りました。
playaudioは引数に与えた音声ファイルを再生してくれますが、再生前にミュージック(MobileMusicPlayer)を一時停止状態にします。
しかし、その後で再生を再開することができません。だから、コマンドラインからの再生再開の手段が欲しくて作ったのです。

これを作るに当たっては、以下のソースを参考にしました。またLyrics.appでおなじみnoviさんのエントリも参考にしました。

http://thebends.googlecode. com/svn/trunk/iphone-apps/music-player/

インストール

いつもの野良リポジトリからどうぞ。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Utilities > mmpctl」です。

無保証です。

ソースコードは開示請求があれば公開します。

mmpctlの使い方

使い方: mmpctl [オプション]

例) # mmpctl -t

-p 再生。
-s 一時停止。
-t 再生時は一時停止へ、一時停止時は再生状態へ遷移します。
-i 現在再生曲情報を標準出力に書き出します。 (タブ区切り)
-f 現在再生曲のファイルへのパスを標準出力へ書き出します。
-g 再生状態を数値で返します。
-h このヘルプを表示します。

-gオプションの返り値

0 停止中
1 再生中
2 一時停止中

応用例1

flite、Erica's Utilitiesと組み合わせて使うと面白いことができます。
fliteは野良リポジトリの「Utilities > flite」にあります。

以下のスクリプトは、現在時刻を英語で読み上げるものです。
音楽を再生していた場合は一時停止し、読み上げた後で再生を再開します。

#!/bin/sh

PATH=/opt/iphone/bin:\
/var/root/bin:\
/bin:/sbin:/usr/bin:\
/usr/local/bin:/usr/sbin:$PATH

result=`mmpctl -g`

if [ ${result} -eq 0 -o ${result} -eq 2 ]; then
play_flag=0
else
play_flag=1
fi

now=`date +%H:%M`
flite -t "`flite_time ${now}`" -o /tmp/now.wav
playaudio /tmp/now.wav

if [ ${play_flag} -eq 1 ]; then
mmpctl -p
sleep 1
mmpctl -p
fi

これをcronに登録すると、定期的に時刻を読み上げてくれて、とてもアレゲです。
cronへの登録は「crontab -e」でできます。viが立ち上がるので、例えば以下のように登録します。
上記のスクリプトは、「/var/root/bin/jihou.sh」に保存したと仮定します。

*/30     *       *       *       *      /var/root/bin/jihou.sh

30分ごとに実行する設定です。つまり、30分ごとに時刻を読み上げてくれます。

標準状態ではcronが動いていないかもしれません。
Community Sourceをインストールし、Installer.appからUlctlをダウンロードしてきて、「com.apple.cron」をloadしてみてください。

応用例2

「mmpctl -f」で、現在再生中の曲のファイルのパスが取得できます。
以下のようにすれば、現在演奏中のファイルをカレントディレクトリにコピーできます。

cp `mmpctl -f` .

応用例3

「mmpctl -i」で、現在再生中の曲の曲名、アルバム名、アーチスト名が取得できます。
項目間はタブ区切りです。

# mmpctl -i
Magnets	Idealism	Digitalism
# mmpctl -i | awk 'BEGIN{FS="\t"};{printf("%s\n%s\n%s\n", $1, $2, $3)}'
Magnets
Idealism
Digitalism

しかし書き出せたところで、今のところ使い道が無いですかね。
以下のようにすれば、現在演奏中のファイルを、曲名でリネームしながらカレントディレクトリにコピーできますが、ちょっと危ないかも。

# cp `mmpctl -f` `mmpctl -i | awk 'BEGIN{FS="\t"};{print $1}'`.mp3


|

« November 2007 | Main | January 2008 »