0

Androidデバイスでadbシェルを介して実行されているネイティブLinuxプログラム内で、オーディオをキャプチャしようとしています。

私は(非常に静かな)ノイズしか得ていないように見えたので、つまり実際の信号はありませんでした(興味深いことに、同様のことを行う Android/Java プログラムは、その入力に信号があることを示していました)。alsa_amixer を実行しました。合ってるやつ:

Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch penum
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 63
  Front Left: Capture 31 [49%] [0.00dB] [off]
  Front Right: Capture 31 [49%] [0.00dB] [off]

"オフ"。それはノイズを説明するでしょう。そこで、alsa_amixer を使用してチャンネルのミュートを解除する方法の例を探したところ、「49% オン」や「49% ミュート解除」、または単に「ミュート解除」などのパラメーターのさまざまな提案が見つかりましたが、どれも機能しませんでした。(ボリューム % が省略されている場合、「無効なコマンド!」と表示されます。それ以外の場合、ボリュームは設定されますが、オン/ミュート解除は無視されます)

また、これをプログラムで行う方法も検索しました (手動のアプローチが今のところ役に立ちますが、最終的にはこれを行う必要があります) が、あまり幸運ではありませんでした。私が見つけた唯一のALSA libコマンドは、「snd_mixer_selem_set_capture_switch_all」でした

4

2 に答える 2

0

alsa_amixer を介してこれらを手動で設定する方法は機能しますが、Android が「BoardConfigCommon.mk」を変更してビルドされている場合のみ、エントリで BOARD_USES_ALSA_AUDIO := true ではなく false になります。

ええ、これはおそらく Android の ALSA を無効にします。そのため、ミキサーの設定に干渉しなくなります。

そこにいるAndroidプログラマーの皆さん、これはもちろん非常にニッチなユースケースであることに注意してください. これは、ほとんどの人がやりたいことではありません。私はたまたまここでAndroidデバイスを異常な方法でいじっています;-)

于 2013-02-11T10:18:13.703 に答える
0

質問者が提案したようにコードを投稿するだけで、外部リンクも好きではありません。

#include <alsa/asoundlib.h>


int main()
{
    snd_mixer_t *handle;
    snd_mixer_selem_id_t *sid;

    snd_mixer_open(&handle, 0);
    snd_mixer_attach(handle, "default");
    snd_mixer_selem_register(handle, NULL, NULL);
    snd_mixer_load(handle);

    snd_mixer_selem_id_alloca(&sid);
    snd_mixer_selem_id_set_index(sid, 0);
    snd_mixer_selem_id_set_name(sid, "Capture");
    snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid);

    snd_mixer_selem_set_capture_switch_all(elem, 0);
    snd_mixer_selem_set_capture_dB_all(elem, 0, 0);

    snd_mixer_close(handle);
}
于 2013-05-23T21:16:37.090 に答える