カーネル空間 ALSA リサンプリングを無効にする

カーネル空間 ALSA リサンプリングを無効にする

私は現在、44.1と48khzのオーディオを再生するために〜12Mhzクロックと〜24Mhzクロックで駆動されるサウンドカードプロジェクトを進めています。 GPIOを使用してこの時計を切り替えます。これは、リサンプリングが発生したくないことを意味します。私の質問:カーネル空間リサンプリングを無効にする方法はありますか?

私はasoundrc.confを使用してユーザースペースでこれを無効にする方法を知っていますが、どのユーザーもルートではなくリサンプリングを有効/無効にするためにこの構成ファイルを変更できないため、カーネルスペースで実行することを好みます。

ありがとう

ベストアンサー1

デフォルトでは、ALSAはリサンプリングしません。特にカーネルドライバはリサンプリングしません。

したがって、カーネル空間でのリサンプリングを無効にすることはできません。

ALSAはプラグインを介して(ユーザースペースrateまたはplug)リサンプリングします。 ALSAは基本的plugに非サンプリングを提供しますhw。デフォルトでは、これを行わないようにALSAを設定する方法があると思いましたが、これはすべてのサウンドカードに影響を与える可能性があります。

しかし、私は、ユーザーがルートではなくリサンプリングを有効/無効にするためにこの設定ファイルを変更できるようにしたくないので、カーネルスペースでこれを行うことを好みます。

設定を変更せずに再サンプリングを避けるために、正しいデバイスを使用するだけです。また、これはあなたの決定ではなく、ユーザーの決定です。

最後に、Pulseaudioはどこでもリサンプリングされ、多くのユーザーがALSA上でPulseaudioを実行します。


プラグインですが、ALSAはデフォルトでプラグインにリサンプリングを指示します。

いいえ、そうではありません。このプラグインはrateリサンプリング用に特別に設計されており、plug他のプラグインと連携して動作します。rate「ALSAがプラグインにリサンプリングを指示する」という考えは完全に間違っています。

カーネルが出力するビットレートをどこで決定するのかを知る必要があります。

すべてのALSAカーネルドライバはそれを指定します。

結局のところ、これはユーザーの決定ではなく、Hi-Fiストリーミングデバイスです。

しかし、必要なプラグインチェーンを構築することはユーザーの決定です。リサンプリングが含まれます。私がリサンプリングをしたかったのですが、どうしてもそうしないようにしたら(実際にはできません)、ユーザーとして私はとても怒っています。

有効にする必要があるスイッチクロックがあります。これはまた、コーデックのシステム周波数が変更されたことをALSAに通知する必要があることを意味します。

大丈夫です。カーネルから得られたビットレートを確認することでこれを行うことができます。リサンプリングについて心配する必要はありません。

あなたの答えは私にとってあまり役に立ちませんでした...

私はあなたがいくつかの基本的な概念を誤解したと思い、より明確に説明したいと思います。それでも「カーネルでALSAリサンプリングを無効にする」と主張している場合は、最善を尽くすことを願っていますが、それがどのように機能するかを理解しようとすることを強くお勧めします。そうすれば、これが言葉にならないことがわかります。


あなたは私のユースケースに関係のないユーザースペースについて話しています。

カーネル空間とは何の関係もないリサンプリングについて話しています。リサンプリングはユーザー空間でのみ発生します。

周波数が変わると、ALSAにGPIOを切り替えるように指示することはできません。

もちろん。カーネルモジュールはサポートされているビットレートを宣伝します。カーネルモジュールにオーディオを送信するときに得られるビットレートに基づいてGPIOを設定できます。つまり、GPIOが44.1kHzオーディオを再生するには12MHzを選択し、48kHzオーディオを再生するには24MHzを選択し、12/24MHzの変更が制御できない逆の状況にない場合は、それに応じてオーディオを調整する必要があります。再生。

後者の場合には良い解決策はありません。 ALSAは、ハードウェアオーディオ出力がオーディオ再生中にビットレートを変更することを望まない。

つまり、カーネル空間のすべてのドライバに周波数が変更されたことを知らせる必要があります(MCASP、サウンドコーデック、PCM)。

それでは、あなたは反対の状況にありますか?これは、この要件が妥当であると考えることができる唯一の状況だからです。

リサンプリングに固執する場合、最善の方法は、現在のオーディオストリームでエラーを発生させ、新しいビットレートを唯一のビットレートで広告し、ユーザー空間に依存してオーディオを再開することです。これは組み込みシステムであり、ユーザースペースを完全に制御できるため、可能です(これらの情報はすべて問題の一部である必要があります)。

ただし、実際の問題と問題の状況をよく説明すると役立ちます。

おすすめ記事