« Linux Zaurus SL-C700 / SL-C760の分解方法とキーボード換装、SDカードスロット修理 | Main | Linux Zaurus SL-C760のSDカードスロット修理(続き) »

2006.09.13

MP3高速エンコーダARM Shine (Shine Fixed Point) v1.06(改変版含む)のZaurus向けパッケージ

パッケージにcontrolファイルが交じっていたので差し替えました。(9.14-1:47)

整数演算によるアルゴリズムとアセンブラで高速化が図られ、ZaurusでMP3のリアルタイムエンコードを実現したMP3エンコーダ、ARM Shine (Shine Fixed Point)というものがあります。
ARM ShineなんだかShine Fixed Pointなんだかよく分かりませんが、コマンドの出力はARM Shine v1.06なので、これに統一します。

ARM ShineはGabriel Bouvigne氏作MP3エンコーダShine release 0.1.2をベースにPete Everett氏がAcorn/RISC OS機向けに整数演算処理化したもので、そのARM ShineをMarkus氏がZaurus向けに「quick and dirty port」したcomprec 0.02に含まれるARM Shineを、Mac OS X上でクロスコンパイルしたものをZaurus向けパッケージにしました。
Markus氏版はバージョンを名乗ってないので、パッケージ的にはPete Everett氏のARM Shine v1.06であるということにします。

ダウンロード ARM-Shine_1.06_arm.ipk.bin (43.6K)

パッケージには、コマンド「shine」、「shine44」を含みます。

comprec 0.02はコマンドshineとPython/Qtで作られたフロントエンド(GUI)で構成されていますが、SL-5500の解像度を前提としたものであること、そしてPyQt(参考:塚本さんの記事/参考:PyQt for SL-A300)は日本国内では一般的でないので、収録は保留しています。

参考までにQT Designerで開いたcomprec同梱uiファイルのスクリーンショットを貼っておきます。

Comprec

折角uiファイルが添付されているのでrbuic/ui2rbでRuby/Qteに持っていけるかなと思ったら、rbuic/ui2rbはRuby/Qt2用で、Ruby/Qteでは使えないんですね。PyQtならQT Designerからuiファイルを持ってこられるって、結構デカいですね。

ARM Shine v1.06自体はサンプリングレートが32.0kHz固定となっていますが、44.1kHzにしたものを作りました。コマンド名を「shine44」としてあります。32.0kHzのものもコマンド名「shine」として同梱してあります。改変点はpatchとして後で貼ります。

このARM Shine、何回か某所で紹介しましたが、名前が「Shine」ということもあって煽ってるものと勘違いされました。

……そんなことはどうでもいいとして、Zaurus上でMP3エンコードしてもつまんねーよ、と思うなかれ。
/dev/dspからの、つまりマイクからの音声をMP3にリアルタイムエンコードできるのです。

AGC(Auto Gain Control)付きマイク内蔵のiPAQ + Resco Audio Recorderの実用度の前には飯事同然ですが、録音後にGPSからのlat/lng、PHSの位置情報をid3tagで埋め込む、PIMデータから予定の件名を埋め込むなどのアレゲな遊びで自己満足に浸りましょう。

使用例

基本形。マイク端子からの音を、直接MP3にエンコード。これがARM Shineのレーゾンデートルというべき使用方法でしょう。

shine -ps -b 64 /dev/dsp rec.mp3

標準のボイスレコーダで録音したWAVをエンコードすることも可能です。

shine44 recording01.wav rec.mp3

22秒の16bit/44.1kHzのWAVを14秒で128kbpsのMP3にエンコードできました。
128kbpsなら実時間以下でエンコード可能です。

-rw-r--r-- 1 zaurus qpe 337711 Sep 12 00:00 rec.mp3
-rw-r--r-- 1 zaurus qpe 1859628 Sep 12 00:00 recording01.wav

オチ

MP3リアルタイムエンコードというものに、恋慕に近い特別な感情を抱く自分は、ARM Shineがお気に入り。
ただこれ、自分の環境では音が飛んじゃうみたいですね。何か曲を録音してみると分かりやすいと思います。
実用はやっぱり無理か!?
4桁機種ではどうなんでしょうか。

自分のバイナリが疑わしい人(自分でも疑わしい)は、comprec 0.02に含まれるshineを試してみてください。

パッチ

パッチというほどのものではありませんが、32.0kHzを44.1kHzにするパッチ。

--- comprec-0.02/wave.c Mon Feb 17 06:53:11 2003
+++ comprec-0.02m/wave.c Tue Sep 12 21:02:22 2006
@@ -108,7 +108,8 @@
header.length = 500000;
header.channels = 1;
header.bit_samp = 16;
- { int speed = 32000;
+ /* 2006.09.12 modified by komugi 32000 -> 44100 */
+ { int speed = 44100;
int channels = 1;
int format = AFMT_S16_LE;
if (ioctl(fileno(config.wave.file), SNDCTL_DSP_SETFMT, &format)) {

Mac OS X上でコンパイルするためのMakefileの変更です。

--- comprec-0.02/Makefile Mon Feb 17 06:53:11 2003
+++ comprec-0.02m/Makefile Tue Sep 12 17:12:35 2006
@@ -1,8 +1,7 @@
-ZROOT=/home/zaurus/develop
CC_NATIVE=gcc
-CC=$(ZROOT)/arm/bin/arm-linux-gcc
-AS=$(ZROOT)/arm/bin/arm-v4l-linux-as
-STRIP=$(ZROOT)/arm/bin/arm-v4l-linux-strip
+CC=arm-linux-gcc
+AS=arm-linux-as
+STRIP=arm-linux-strip
IPKG_BUILD=./ipkg-build

CFLAGS+=-Wall -O2 -fno-exceptions -g
@@ -29,7 +28,7 @@
pyuic Maindlg.ui > Maindlg.py

table1.h table2.h: tables
- tables
+ ./tables

tables: tables.c
$(CC_NATIVE) -o $@ $(CFLAGS) $< -lm
@@ -64,6 +63,7 @@
depend: .depend

.depend:
- makedepend -f - -- $(CFLAGS) -- $(CSOURCES) > .depend
+ /usr/X11R6/bin/makedepend -f - -- $(CFLAGS) -- $(CSOURCES) > .depend

include .depend
+# DO NOT DELETE

|

« Linux Zaurus SL-C700 / SL-C760の分解方法とキーボード換装、SDカードスロット修理 | Main | Linux Zaurus SL-C760のSDカードスロット修理(続き) »

Comments

shineで録音音量を大きくする方法がありましたら教えていただけませんか?

Posted by: Tel Ohtsuka | 2007.02.13 at 07:22 PM

comprecのソース(PyQt(Python))を見てみると分かりますが、
/dev/mixer1を操作してGainをコントロールしています。
ゆえに、ZaurusにPyQtを導入し、comprecを使えるようにすることが一番簡単ではないかと思います。

http://unimut.fsk.uni-heidelberg.de/demi/comprec/index.html

>def setGain(self, vol):
>self.mixer.setVolume("igain", 100-vol)

とありますので、デフォルトが100である場合、小さくしかできないかもしれませんが。

http://homepage3.nifty.com/rio_i/lab/oss/006mixer_test.htm
http://www.linux.or.jp/JF/JFdocs/Sound-HOWTO-6.html

setmixerというコマンドがあるようです。
OpenZaurusにsetmixerのパッケージがありました(動作未確認)。
libgcc 3.4.4が少なくとも必要かと思います。
http://openzaurus.linuxtogo.org/feed-browser/?action=details&pnm=setmixer

これでigainを100にした上でなお音が小さい場合は、高感度のマイクを使うとか、マイクアンプを入れるとかって手段になるでしょうか。

Posted by: moyashi | 2007.02.14 at 01:57 AM

早速のご返答ありがとうございました。

 標準のレコーダーでは録音音量がいじれるので、多分出来ると思っていた次第です。レコーダーで録音音量を設定して終了したら、標準録音は40%に戻ってしまうようです。

 さて推奨して抱きましたQtPyはどうにも牛刀な感じで、試してみるも入れるパッケージがわからず動かせませんでした。
 結局setmixerのソースパッケージをzaurus上でセルフコンパイル(gcc 3.3.1)して
setmixer mic 100
が実行でき、確かに音量が変わることを確認しました。これ以上はご指摘のとおりマイクを改善するしかないでしょうね。


 現在録音しつつ議事録を取れるマシンとして利用してます。録音の頭だしがいくらか楽になるよう.emacsに
;;; 改行の入力時に時刻を入力する
(defun my-insert-time ()
(interactive)
(insert (format-time-string "%02y/%02m/%02d %H:%M:%S\n")))
(global-set-key "\C-m" 'my-insert-time)
をいれて、改行時の時刻を自動記録しております。

Posted by: Tel Ohtsuka | 2007.02.14 at 03:22 PM

コメントありがとうございます。
動作確認よかったです。
使っている方が実際に居ると知り、存外の喜びです。

mpfe(mplayer frontend)とエディタを合体させたテープ起こしソフトをRuby/Qteで作ってみたいと思っています。
emacs内ならmpg123.elとglobal-set-keyで終わり、な気がしますが……。
どうせ使う人なんか居ないだろうし、車輪の再発明だから、それでいいかもしれないですね。

Posted by: moyashi | 2007.02.14 at 10:03 PM

 あれ?mpg123ってzaurusでは重くて使い物にならないという話をどっかで見たような。四桁シリーズならどうにかなるのかな。

 ついでといっては何ですが、fliteも導入しております。
 最新記事での日本語の音声合成に、ただただ脱帽。
 テープ起こしが出来たら、インタビュー・議事録用最強ですね。期待しております。今後も頻繁に寄らせていただきます。

Posted by: Tel Ohtsuka | 2007.02.15 at 09:23 AM

そんな話しが出てますね>mpg123
実は試したことが無いので、実際どうでしょう? 機会があったら試してみます。

fliteもお使いですか。シェルスクリプトから気軽に呼べるので結構遊べます。

MBROLA+muDaTTSは研究の余地ありですね。「グ」とかしゃべらないので。
kakasiの段では大丈夫だから、その他のところでどうにかなってるんでしょう。

テープ起こしについては、期待しないで待っていてください。
基本的にはmpfeにQMultiLineEditを加えて各種機能にアクセラレートキーを設定し、テキストファイルの保存機能を追加すればいっちょあがり、なはずですが……。
MPlayer::seek(step)という秒単位のシークメソッドもあるので大丈夫なはず。

Posted by: moyashi | 2007.02.15 at 10:36 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/13760/11868204

Listed below are links to weblogs that reference MP3高速エンコーダARM Shine (Shine Fixed Point) v1.06(改変版含む)のZaurus向けパッケージ:

« Linux Zaurus SL-C700 / SL-C760の分解方法とキーボード換装、SDカードスロット修理 | Main | Linux Zaurus SL-C760のSDカードスロット修理(続き) »