VGF-WA1をDLNA DMRっぽく使う

概要

NASにインストールしてあるDLNAサーバ(miniDLNA)から音楽再生できなくてリアルにホコリをかぶっていたVGF-WA1をメディアレンダラっぽく使えるようにしたメモです。
WA1が10秒ぐらいバッファリングするので選曲とかシークはタイムラグがひどいですが、音楽を垂れ流しにするには十分です。

うちの構成はこんな感じ:

[Android]
BubleUPnP(DMC)
[NAS]
miniDLNA(DMS)
  ↓ 
[Linux PC]
XBMC(DMR)
  ↓ 
PythonスクリプトのWebサーバ
  ↓ 
[VGF-WA1]
WEB RADIO(ShoutCast)

WA1をLinux PCのWiFiスピーカとして使えるようにして、PC上でDMRアプリケーションを動かす構成になっています。

DMRにするPC

実際にDMRとして動いているのはPC上のXBMC(現Kodi)です。
PulseAudioのmonitor sourceから音声データを取り出して、MP3に変換しています。Pythonスクリプトで作られたWebサーバに接続すると変換したMP3データがストリーミング出力されるようにしています。

この方法の元ネタは以下のページです。
pulseaudio - How do I set up live audio streams to a DLNA compliant device? - Ask Ubuntu
http://askubuntu.com/questions/187086/how-do-i-set-up-live-audio-streams-to-a-dlna-compliant-device

回答の中の、"The next idea was to write a http server in python that serves the stream instead."と紹介されているAdamさんのスクリプトをほぼそのまま使っています。

WA1のWEB RADIOは、MP3ストリームしか受け取ってくれないようでFLACやWAVのストリームでは再生できませんでした。
スクリプトの"MONITOR"は各自のPCに合わせて書き換えてください。以下の様にpactlを実行して、

pactl list short | grep monitor

出力されるリストから音声出力として使用しているデバイスを選んでください。

#!/usr/bin/python

import BaseHTTPServer
import SocketServer
import subprocess

PORT = 8086
# run "pactl list short |grep monitor" to see what monitors are available
# you may add a null sink for streaming, so that what is streamed is not played back locally
# add null sink with "pactl load-module module-null-sink"
#MONITOR = 'null.monitor'
MONITOR = 'alsa_output.pci-0000_00_01.1.hdmi-stereo.monitor'
#MIMETYPE = 'audio/flac'
#ENCODER = 'flac - -c --channels 2 --bps 16 --sample-rate 44100 --endian little --sign signed'
#MIMETYPE = 'audio/wav'
#ENCODER = ''
MIMETYPE = 'audio/mpeg'
ENCODER = 'lame -r --cbr -b 320 -q 0 - -'
BUFFER = 65536

class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
  def do_HEAD(s):
    print s.client_address, s.path, s.command
    s.send_response(200)
    s.send_header('content-type', MIMETYPE)
    s.end_headers()
  def do_GET(s):
    s.do_HEAD()
    pa = subprocess.Popen('parec -d {} | {}'.format(MONITOR, ENCODER), shell = True, bufsize = BUFFER, stdout = subprocess.PIPE)
    while True:
        data = pa.stdout.read(1024)
        if len(data) == 0: break
        s.wfile.write(data)
    print 'stream closed'


httpd = SocketServer.TCPServer(("", PORT), Handler)

print "listening on port", PORT

try:
  httpd.serve_forever()
except KeyboardInterrupt:
  pass

httpd.server_close()

VGF-WA1の設定

WA1にWEB RADIOとして、Linux PCを登録します。
WebブラウザからWA1をアクセスすると登録ページが開くので、上記のPCのアドレス(ポート:8086)を登録します。
以下の例では、"ラジオ局1"に"192.168.0.9:8086/"を登録しています。


使ってみる

Linux PC上でPythonスクリプトとXBMCを起動してから、WA1からWEB RADIOに接続します。
XBMCはデフォルトではDMR機能がオフになっているので、このあたりを参考に設定を変更してください。
音楽再生だけならXBMCはオーバスペックでRygelを使ったほうが良いのですが、動画再生用のDMRとしても使用しているのでXBMCを使用しています。

WEB RADIO以外で

元ネタの回答には、Rygelのメディアサーバ機能を使ってPulseAudioの出力をストリーミングする方法も紹介されています。
実はこちらもWA1の"PC"モードでの接続を確認できています。ただし、問題がありまして無音期間が長く続くとWA1側でエラーになってしまいます。"WEB RADIO"モードではどれだけ無音期間が続いてもエラーにならないので、この構成で使用しています。

SoftBankメールのデコメール画像をギャラリーから見えなくする

ソフトバンクモバイルのメールアプリをインストールするとデコメ素材がキャラリーに現れて鬱陶しいのでメディアスキャンの対象から外します。
デコメ素材は"/sdcard/private/decoremail"以下のディレクトリに置かれているので、このディレクトリに".nomedia"という名前のファイルを置くだけ。("."で始まるファイルは隠しファイルなのでファイラを隠しファイルを表示するように設定を変更しないと見えません)

開発者さん、このくらいやっといてくれればいいのに・・・

複数のjpgファイルをPDFにまとめる

すぐに忘れてしまうのでメモ。環境は一応ubuntu 11.04、元ネタはどこだったか・・・

jpgファイルをpdfファイルに変換

ImageMagick同梱のmogrifyを使う。

$ mogrify -format pdf *.jpg

複数のpdfファイルを1つにまとめる

PDFTKを使って結合してみる。

$ pdftk *.pdf cat output outfile.pdf

rootなしでフォント変更(Galaxy S)

いまのところ、純正ROMのままGingerbread(2.3.3)でrootを取ることができないのでフォント変更を諦めてたのだけれどこんな記事→[電話] Galaxy SII GT-I9100でフォント切り替え : 8796.jp管理日誌を見かけたのでちょっと挑戦。うまく言ったので記事にしてみました。

問題の記事では簡単にしか紹介していなかったので検索してみるとXDAの記事を発見。うちのメイン環境はUbuntu Linuxなので適当にアレンジしながらやってます。

Galaxy Sでは、[Setting]-[Display]-[Font stype]からフォントを選ぶことができます。FlipFontという名前が付いていて、AndroidMarketからフォントパッケージの購入もできます。でも、日本語フォントは流通していないので既存のFlipFontのパッケージを改造して適当なフォントパッケージをでっち上げます。

必要なもの

ベースにするFlipFontパッケージを取り出す

ベースにするFlipFontパッケージを端末から取り出します。busyboxのインストールもしていないので"cat"を使ってsdcard領域へコピーしてから取り出し。"adb shell"上で、

$ cat /system/app/CoolEUKor.apk > /sdcard/CoolEUKor.apk

とかして、フォントパッケージを取り出してPCに転送しておく。(うちのGalaxy SはUK販売の国際版)

FilpFontパッケージを展開する

Apk Managerを使って端末から取り出したCoolEUKor.apkを展開します。Apk Managerのインストールは省略。
App Managerは一度実行して各種ディレクトリを作らせてから"place-apk-here-for-modding"ディレクトリの中にフォントパッケージをコピーしてから、再度Apk Managerを起動。以下のようなメニューが出ているので、"9 Decompile apk"を選択してパッケージを展開する。フォントファイルは、"./out/assets/fonts/Cooljazz.ttf"

****************************** Apk Manager *******************************
------------------Simple Tasks Such As Image Editing----------------------
  0    Adb pull
  1    Extract apk
  2    Optimize images inside (Only if "Extract Apk" was selected)
  3    Zip apk
  4    Sign apk (Dont do this if its a system apk)
  5    Zipalign apk (Do once apk is created/signed)
  6    Install apk (Dont do this if system apk, do adb push)
  7    Zip / Sign / Install apk (All in one step)
  8    Adb push (Only for system apk)
-----------------Advanced Tasks Such As Code Editing-----------------------
  9    Decompile apk
  10   Compile apk
  11   Sign apk
  12   Install apk
  13   Compile apk / Sign apk / Install apk (All in one step)
---------------------------------------------------------------------------
  14   Batch Optimize Apk (inside place-apk-here-to-batch-optimize only)
  15   Sign an apk        (inside place-apk-here-for-signing folder only)
  16   Batch optimize ogg files (inside place-ogg-here only)
  17   Quit
****************************************************************************

Please make your decision: 

ttfファイルの中身を入れ替え

取り出したCooljazz.ttfと入れ替える日本語ttfフォント(ここではTakaoExGothic.ttfを使用)を適当な作業ディレクトリにコピーしてFontForgeで開いてCooljazz.ttfの中身を入れ替えます。手順としては、

  • "Cooljazz.ttf"をFontForgeで開く
  • FontForgeのメニュー([ファイル]-[開く])から"TakaoExGothic.ttf"も開く
  • [エレメント]-[フォント情報...]で"フォント情報"ダイアログを開いて"一般情報"を選択。"Cooljazz"のパラメータを"TakaoExGothic"パラメータと同じになるように修正
  • "Cooljazz"のグリフを全削除([編集]-[選択]-[すべて選択]で全選択した後、[編集]-[クリア])
  • "TakaoExGothic"のグリフをコピー([編集]-[選択]-[すべて選択]で全選択した後、[編集]-[コピー])した後、"Cooljazz"へペースト([編集]-[貼り付け])
  • 変更した"Cooljazz"をttfフォントとして出力([ファイル]-[フォントを出力])。ファイル名は一応"TakaoExGothic.ttf"にした。

新しいパッケージを作る

展開した"CoolEUKor.apk"パッケージのファイルを改変して新しいパッケージを作ります。

  • "./out/assets/fonts"に入っている元のttfファイル(Cooljazz.ttf)を削除して、新しく作成したttfフォントファイル(TakaoExGothic.ttf)をコピー
  • "./out/assets/xml"に入っているxmlファイルのファイル名をttfファイル名に合わせて名前を変更(TakaoExGothic.xml)。このファイルをテキストエディタで開いて、"displayname"を変更("Cool jazz" → "TakaoExGothic")、ttfフォントのファイル名を変更("Cooljazz.ttf" → "TakaoExGothic.ttf")
  • "./out/res/values/string.xml"を編集("CoolEUKor"→"TakaoExGothic")
  • "./out/smali/com/monotype/android/font/cooljazz"の"cooljazz"ディレクトリを"takaoexgothic"へ変更して、このディレクトリの中に入っているファイルすべての"cooljazz"を"takaoexgothic"に変更
  • "./out/AndroidManifest.xml"の"com.monotype.android.font.cooljazz"を"com.monotype.android.font.takaoexgothic"に変更
  • "./out/apktool.yml"の"CoolEUKor.apk"を"TakaoExGothic.apk"へ変更

それから、App Managerのメニューから"10 Compile apk"、"11 Sign apk"を実行します。"./place-apk-here-for-modding"に"repackaged-signed.apk"という名前のパッケージができます。

フォントのインストール

  • 作成したパッケージを端末にインストール
  • [Setting]-[Display]-[Font stype]を開くと"TakaoExGothic"があるはずなので選択

これでフォントが変わっているはずです。

<おまけ>試してみてダメだったとこ

  • cooljazz.ttfをベースにせずに、オリジナルのTakaoExGothic.ttf使ってパッケージを作成すると、インストール・選択画面まではそれっぽく動作するけれど、フォントが変わらず中華フォントのまま
  • "assets/xml"の中のxmlファイルで"DroidSans.ttf"代替設定をせずに代わりに"DroidSansJapanese.ttf"としてもうまくいかない(国際版には元々このフォントがないから??)

やっときた

うちのGalaxy Sにも、やっとFroyoのアップデート通知が来たよ。

Kiesのアップデートしないとファームアップデートできませんってメッセージが出るけど、アップデートしたらJPOのアップデートがきた!!

UK版Galaxy SのFroYo

すでにアップデートが配信されているようですが、私が持っているUK版はすくなくとも来週以降のようです・・・

ネタ元はここ
Samsung Galaxy S FroYo update ‘delayed until next week’ - Telegraph

これによると、Samsung Opensource Release Centerで公開されているFroYo向けのソースも消されているという話だったので、GT-I9000のアーカイブを見てみたら"GalaxyS_eclair.tar.gz"なんてファイルが入ってた。トラブルでもあったのか?