パルスオーディオプログラミングは私のデバイスをすべて見つけることができません

パルスオーディオプログラミングは私のデバイスをすべて見つけることができません

この問題はC ++プログラムの作成中に発生したため、問題をより明確にするために最小限のコード例を作成しました。

#include <portaudio.h>
#include <iostream>

int main()
{
    Pa_Initialize();

    int devices = Pa_GetDeviceCount();
    std::cout << devices << std::endl;

    for (int i = 0; i != devices; ++i) 
    {
        auto * info = Pa_GetDeviceInfo(i);
        std::cout << info->name << std::endl;
    }

    Pa_Terminate();
}

したがって、このコードは私が持っているサウンドIOデバイスを印刷する必要があります。私はこのコードを2台のLinuxコンピュータ(ubuntu 16とubuntu 18.10)でテストしました。初めてUbuntu 16でアプリケーションを実行していますが、sysdefault(有用なデバイス)を含む多くのデバイスを検出します。その後、Ubuntu 18で同じアプリケーションを実行しましたが、私のsysdefaultが見つかりませんでした。コマンドを確認したaplay -L 後、arecord -LAlsaがsysdefaultを認識していることを確認して、パルスオーディオの問題だと思いました。 pavucontrolをダウンロードしていくつかの調整をしましたが、成功しませんでした。最後に、これはより不合理なことです。 pavucontrolをダウンロードして調整した後、ubuntu 16で私のアプリケーションを再利用しようとしましたが、うまくいかず、ubuntu 16からpavucontrolを削除したときに動作しました。しかし、ubuntu 18で同じことを行うとそうではありません!私のUbuntu 16は古いシステムで、多くのcppライブラリがインストールされており、過去数年間にわたって調整されていますが、私のUbuntu 18はフォーマットされたノートブックで、ほとんど何もインストールされていないことに言及する価値があります。ここで問題をよりよく理解するために、いくつかのコンソール出力を追加します。

$aplay -L
> 
> default
>     Playback/recording through the PulseAudio sound server null
>     Discard all samples (playback) or generate zero samples (capture) pulse
>     PulseAudio Sound Server hdmi:CARD=HDMI,DEV=0
>     HDA Intel HDMI, HDMI 0
>     HDMI Audio Output hdmi:CARD=HDMI,DEV=1
>     HDA Intel HDMI, HDMI 1
>     HDMI Audio Output hdmi:CARD=HDMI,DEV=2
>     HDA Intel HDMI, HDMI 2
>     HDMI Audio Output dmix:CARD=HDMI,DEV=3
>     HDA Intel HDMI, HDMI 0
>     Direct sample mixing device dmix:CARD=HDMI,DEV=7
>     HDA Intel HDMI, HDMI 1
>     Direct sample mixing device dmix:CARD=HDMI,DEV=8
>     HDA Intel HDMI, HDMI 2
>     Direct sample mixing device dsnoop:CARD=HDMI,DEV=3
>     HDA Intel HDMI, HDMI 0
>     Direct sample snooping device dsnoop:CARD=HDMI,DEV=7
>     HDA Intel HDMI, HDMI 1
>     Direct sample snooping device dsnoop:CARD=HDMI,DEV=8
>     HDA Intel HDMI, HDMI 2
>     Direct sample snooping device hw:CARD=HDMI,DEV=3
>     HDA Intel HDMI, HDMI 0
>     Direct hardware device without any conversions hw:CARD=HDMI,DEV=7
>     HDA Intel HDMI, HDMI 1
>     Direct hardware device without any conversions hw:CARD=HDMI,DEV=8
>     HDA Intel HDMI, HDMI 2
>     Direct hardware device without any conversions plughw:CARD=HDMI,DEV=3
>     HDA Intel HDMI, HDMI 0
>     Hardware device with all software conversions plughw:CARD=HDMI,DEV=7
>     HDA Intel HDMI, HDMI 1
>     Hardware device with all software conversions plughw:CARD=HDMI,DEV=8
>     HDA Intel HDMI, HDMI 2
>     Hardware device with all software conversions sysdefault:CARD=PCH
>     HDA Intel PCH, ALC3234 Analog
>     Default Audio Device front:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     Front speakers surround21:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     2.1 Surround output to Front and Subwoofer speakers surround40:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     4.0 Surround output to Front and Rear speakers surround41:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     5.0 Surround output to Front, Center and Rear speakers surround51:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     7.1 Surround output to Front, Center, Side, Rear and Woofer speakers dmix:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     Direct sample mixing device dsnoop:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     Direct sample snooping device hw:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     Direct hardware device without any conversions plughw:CARD=PCH,DEV=0
>     HDA Intel PCH, ALC3234 Analog
>     Hardware device with all software conversions

そしてアプリケーションを実行します。

$./main
6
HDA Intel HDMI: 0 (hw:0,3)
HDA Intel HDMI: 1 (hw:0,7)
HDA Intel HDMI: 2 (hw:0,8)
hdmi
pulse
default

質問/要求は次のとおりです。問題の原因は何ですか? alsaではないかもしれませんがportaudioですか?しかし、最初のケースでは動作するので、パルスオーディオですか?それでは、今再現してみましたが、どうすれば問題を解決できますか?

答え1

したがって、このコードは私が持っているサウンドIOデバイスを印刷する必要があります。

いいえ、そうではありません。それは印刷されますポルタディオ解決されるかもしれないし解決されないかもしれない抽象化装置アルザス機器(今日、ほとんどの場合そうですが)。

特にPortaudio開発者は、一部のALSAデバイス(特に純粋なハードウェアデバイス)のみを含み、ALSAプラグインは含まないことにしたようです。

全部リストしたいならアルザスデバイス、Portaudioの代わりにALSAライブラリを使用するのはどうですか? Portaudioは常にいくつかの抽象化を提供しているため、この抽象化を受け入れて使用したり、Portaudioを使用したりしないでください。

また参考にしてくださいパルス放送まったく異なる問題が発生します。 PulseaudioはすべてのハードウェアALSAデバイスを取得するため、Portaudioで利用可能な唯一のデバイスはpulse(またはdefaultを指す場合pulse)です。

したがって、Pulseaudioを使用してPulseaudio受信機(Pulseaudioが表示するハードウェアデバイスを含む)を一覧表示するには、Pulseaudioライブラリを使用します。

答え2

結局問題はアルシャのものだった。 Ubuntu 18システムにサウンドカード(または少なくとも仮想サウンドカード)を取り付ける必要があり、Alsaはデフォルトでサウンドカードのみを読み込みます。この問題の回避策はいくつかあります。私にとって効果的な方法は、/etc/asound.conf次の2行を含む設定ファイルを変更/作成することでした。

defaults.pcm.card 2
defaults.ctl.card 1


ベースカードが変更されます。

関連情報