« 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カードスロット修理(続き) »