[Armadillo:08321] Re: Armadillo-800EVA/Android起動時のマイク入出力について
email@hidden
2012年 9月 14日 (金) 22:21:25 JST
ふかせです。
たびたびすみません。解決とは言い難いのですが、
コードに潜っていたらクリアな音声を録音できたようです。
因果関係もあやしいですが…
悩んでいたのは私だけなのかもしれませんが…
【詳細】
以下が私の試した変更です。
---- ここから ----
- hardware/alsa_sound/alsa_default.cpp.orig 2012-09-14
21:33:54.464555887 +0900
+++ hardware/alsa_sound/alsa_default.cpp 2012-09-14
19:45:27.708314390 +0900
@@ -118,7 +118,7 @@
curMode : 0,
handle : 0,
format : SND_PCM_FORMAT_S16_LE, // AudioSystem::PCM_16_BIT
- channels : 1,
+ channels : 2,
sampleRate : AudioRecord::DEFAULT_SAMPLE_RATE,
latency : 250000, // Desired Delay in usec
bufferSize : 2048, // Desired Number of samples
---- ここまで ----
【補足】
○ 副作用?
以下のようなログがコンソールに流れ、録音アプリの応答がなくなることも多
々あるので
問題がある変更なのかもしれません。
capture write error (DMA or IRQ trouble?)
playback write error (DMA or IRQ trouble?)
playback drain error (DMA or IRQ trouble?)
○ 画面描画能力の劣化
Androidのルートファイルシステムを作り直しているため、画面描画の
ハードアクセラレーションの恩恵がなくなり、動作全体がもっさりとして
画面がちらつきます。
このあたりはArmadillo-800EVAマルチメディア評価パッケージを
うまく利用できれば改善できるのでしょうか…
【確認したこと】
以下は今回の変更とは直接的な関係はないです。
○Androidで録音する際のサンプリングレートの確認
Linuxカーネルにログを仕掛け、サンプリングレートを確認
以下のようなログを得て、8kHzと確認
WM8978 0-001a: params_rate : 8000
WM8978 0-001a: wm8978->f_mclk: 12288000
WM8978 0-001a: wm8978->mclk_idx: 4294967295
WM8978 0-001a: wm8978_configure_pll(codec): 0
WM8978 0-001a: wm8978->f_pllout: 12288000
WM8978 0-001a: diff : 0
WM8978 0-001a: best : 5
WM8978 0-001a: f_sel: 12288000
WM8978 0-001a: mclk_denominator[best]: 1
WM8978 0-001a: mclk_numerator[best]: 6
WM8978 0-001a: wm8978->sysclk: 1
WM8978 0-001a: wm8978->f_256fs: 2048000
WM8978 0-001a: WM8978_MCLK: 1
○ Debian上gstreamerでchannelは2に設定すべきではないかと推測
Debian上のgstreamerで
# gst-launch alsasrc ! 'audio/x-raw-int,channels=1,rate=8000,width=16'
! audioresample ! wavenc ! filesink location=sample8.wav
と実行するとめちゃくちゃな音が録音されました。
# gst-launch alsasrc ! 'audio/x-raw-int,channels=2,rate=8000,width=16'
! audioresample ! wavenc ! filesink location=sample8.wav
と実行するとクリアな音声が記録できました。
以上のことから、ALSAに関連する部分に似たような所はないか探していました。
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
#
# No Python, No Life!!!
#
送信元: email@hidden
宛先: email@hidden
日付: 2012/09/13 11:58
件名: [Armadillo:08319] Armadillo-800EVA/Android起動時のマイク入出力につ
いて
送信者: email@hidden
ふかせです
Armadillo-800EVA上でAndroidを起動し、CON10へ接続したマイクで
正常に録音できるノウハウをお持ちの方いらっしゃいますでしょうか?
何か情報お持ちの方いましたら、ご教授お願いします。
【状況】
1) プラグインパワーのマイクを使用するためログにあるパッチを当てたカーネル
を用意
http://lists.atmark-techno.com/pipermail/armadillo/2012-August/008199.html
→ これによってマイクから何かしらの入力が可能になる
2)Armadillo-800EVAで録音し、また再生を行うため次の操作をする。
a) ”メッセージ”アプリ起動
b) ”新規作成”を選択
c) メッセージ作成画面で”メニュー”ボタン押下→ポップアップメニュー”添
付”を選択→
ダイアログメニュー”音声録音”を選択
d) 録音 → 確認再生
録音はしている。
この確認再生の時点で低速再生したような、こもった音になっている。
※ シリアルコンソールには以下のようなメッセージがでています
WM8978 0-001a: Imprecise sampling rate: 48000Hz, consider using
PLL
e) ”この録音を使用”ボタンを押下
f) ”ホーム”ボタン押下で一旦ホーム画面へ戻り”音楽”アプリを起動
g) ”音楽”アプリで再生してみる
この再生でも同様に低速再生したような、こもった音になっている。
※ このときもシリアルコンソールには以下のようなメッセージがでています
WM8978 0-001a: Imprecise sampling rate: 48000Hz, consider using
PLL
h) 録音したamrファイルをホストPCに転送し、QuickTimeなどで再生してみまし
たが結果は同じでした。
あと少し録音レベルが低いでしょうか…
3) カーネルのcodecに関する設定、主にサンプリングレートの調整かと思い以下の
ファイルをいじってみていますが、
まともな音声として録音できていません。
※カーネルソースのトップディレクトリから
sound/soc/codecs/wm8978.c の wm8978_dai構造体の中身など
【おまけ】
以下は私が調べた内容なので不正確かもしれません
http://stackoverflow.com/questions/7023821/how-to-set-audio-sampling-rate-higher-than-44-1khz-on-linux-android-platform
※ このリンクによればAndroidの全てのデバイスで扱えるオーディオは44100Hzの
サンプリングレートのものらしく他はデバイス依存?
※ Imprecise sampling rate... のログがでているのもこのことによる影響?
※ Armadillo-400シリーズの話ですが、以下のリンクに”AndroidでAudio機能を使
用する場合は、
ALSA_AUDIO(ALSA_DEFAULT_SAMPLE_RATE=48000)で使用してください ”という
記述がある
http://armadillo.atmark-techno.com/dev/linux-2.6.35-at-alpha2-release
気になったのでAndroidのソースに一連のパッチを当てる。
device/atmark-techno/armadillo-800eva/BoardConfig.mk に "ALSA_AUDIO〜
"の記述がコメントアウトされているのを発見したので
これを活かしAndroidを再構築→結果は変化なし
以上です。
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
#
# No Python, No Life!!!
#
_______________________________________________
armadillo mailing list
email@hidden
http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
armadillo メーリングリストの案内