Cubianでのサウンドミキシング

Cubianで複数のオーディオファイルを並行して再生するタスクに直面したとき、私はまだ考えがありませんでした。 Linuxでは長年にわたってサウンドミキシングに問題はありませんでした。ALSAはこれをネイティブに行うことができ、多くのサウンドサーバーはあらゆる好みと予算に合わせてサービスを提供しています。



問題があり、当初考えていたよりも広範囲にわたることが判明しました。



問題番号1。 解決しました。 フォノンとパルスオーディオ



そのため、QTでアプリケーションを作成したときに、問題の問題に初めて遭遇しました。 フォノンがサウンドAPIとして選ばれました。 そして、アプリケーションを初めて起動するとすぐに、sunxiのオーディオドライバーがサウンドのミキシング方法を知らないことを発見しました。 この状況に落胆して、私はパルスを設定しました...そして、何の結果も得られませんでした。 より正確には、結果は異なります。クリック音と喘鳴、そして完全な沈黙のいずれかです。 インストールされた他のパッケージに応じて。 利用可能なすべてのサウンドデーモンを試した後(Debianにはそれほど多くありませんでした)、問題は解決されておらず、明らかにどこか深いところにあったので、私はパルスに戻りました。



pulseaudioの設定に行ったことがない人のために、私は少しやります
後退する
パルスは、システムとユーザーの2つのモードで機能します。 両方を別々に考えてみましょう:

1.システム。 マルチユーザーシステムでは推奨されません。 なぜ-ドキュメントを参照してください。 組み込みシステムの場合、それは非常に適切で、時には最適ですらあります。 デーモン自体がオーディオデバイスを取得し、 パルスアクセスグループのすべてのユーザーに(サウンド設定へのアクセスを含む)アクセスを与えます(パルスではなく、これは重要です)。

Debianでこのモードを有効にするには、 / etc / default / pulseaudioファイルにパラメーターを含める必要があります :PULSEAUDIO_SYSTEM_START = 1。 次に、 オーディオグループからパルスを除くすべてのユーザーを削除します。 pulseaudioのすべてのセッションインスタンス(ある場合)を釘付けし、pulseaudioサービスを開始します。 ユーザーがサウンドを使用できるように、 パルスアクセスグループに追加します

2.セッション。 マルチユーザーおよび組み込みシステムの両方で動作します。 ただし、カードのドライバーがミキシングの方法を知らない場合、特定の瞬間に1人のユーザーしかサウンドを再生できないことを理解する必要があります。 デフォルトでは、このモードはdebianで有効になっています。 ユーザーがサウンドカードとやり取りするには、 オーディオカードに追加する必要があります。



よりグローバルな問題の文脈では、いくつかの明白でない瞬間が人生を大きく複雑にする可能性があるためです。



最初の反復で目的の結果が得られなかったとき、Googleがこの問題について知っていることを見つけることにしました。 Googleはしぶしぶと答えた。 フォノンvlc-backendを使用するべきではなく、gstreamerを使用する必要があることがわかりました(私にとっては、vlcがメインメディアエンジンであると常に考えていたため、これはやや驚くべきことでした)。

その結果、最初の問題は黒魔術によって完全に解決されました: gstreamer0.10-plugins-uglyパッケージのインストール。 そして、フォノンが鳴り始めました。



問題番号2。 未解決。 VoIPおよびpulseaudio



2番目のタスクは、1つのコマンドでVoIPからオーディオ出力にストリームを送信し、もう1つのコマンドでオーディオファイルを再生することでした。 最初の部分は、chan_alsaを使用したアスタリスクによって解決されます。 ただし、chan_alsaはデバイスを完全に占有し、モジュールをアンロードするまで戻りません。 したがって、再びパルス。



今回はすべてがおかしいことが判明しました:chan_alsaは、アンロードするまでサウンドが単独でも他のアプリケーションでも再生されないというパルスで何かをします。 詳細なデバッグでパルスを開始すると、エラーをキャッチすることができます。エラーの要点は、「カードドライバーが曲がっていて、このデータをドライバー開発者に送信する」ということです。 まあ、問題はALSAドライバーにあるので、OSSを試すことにしました。 今回は音さえありましたが、アイデアがすぐにその意味を失ったほど中断しました。



これはすべて、すでに解決された最初の問題とソックスがうまく再生されていることを背景に起こったので、問題はドライバーではアスタリスクモジュールほどではないと思い、それを...たとえば、linphoneに置き換えることにしました。 ソフトフォンで問題が正確に繰り返されたとき、それが特定のアプリケーションではないという疑いがありましたが、...おそらく、ネイティブPCMカードのvoipオーディオストリームをリサンプリングすることでした。



この場合、異なるソースから同時にサウンドを再生するタスクがなく、linphoneは直接のサウンド再生の間だけデバイスを使用するため、回路からパルスを削除することにしました。



問題自体が解決されたという事実にもかかわらず、パルスを介してvoipオーディオストリームを出力する問題は残りました。 そして、誰かがそれに対する解決策を見つけた場合、私は非常に感謝します。



All Articles