Portaudio не распознает все аудиоустройства - PullRequest
2 голосов
/ 28 июня 2019

Эта проблема возникла у меня, когда я писал программу на 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();
}

Так что этот код должен печатать устройства, которые у меня есть для звукая протестировал этот код на двух Linux-компьютерах с Ubuntu 16 и Ubuntu 18.10 и с некоторыми настройками, которые кажутся нерациональными для изменения результата (я объясню позже), результаты были очень абсурдными.Сначала я запустил свое приложение на Ubuntu 16, и оно обнаружило множество устройств, включая sysdefault (который был полезным).Затем я запустил то же самое приложение на Ubuntu 18, и оно не нашло sysdefault, я проверил с помощью команд aplay -L и arecord -L, что Alsa распознает sysdefault, поэтому я подумал, что это проблема pulseaudio.Я скачал pavucontrol и сделал несколько изменений без удачи.Наконец, вот еще одна иррациональная вещь: я попытался снова использовать свое приложение на Ubuntu 16 после загрузки и настройки pavucontrol, и это не сработало, более того, когда я удалил pavucontrol на Ubuntu 16, это сработало, но когда я сделал то же самое на 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

Вопрос / запрос: Что создает проблему?Это, вероятно, не Альса, так что это portaudio?но в первом случае это сработало, так что это Pulseaudio? и если да, то как я могу решить проблему теперь, когда я ее воспроизвел?

1 Ответ

0 голосов
/ 30 июня 2019

После того, как все проблемы возникли у Алсы.Я должен использовать звуковые карты (или, по крайней мере, виртуальные звуковые карты) на компьютере с Ubuntu 18, и Alsa по умолчанию считывает только один. Для решения этой проблемы есть много способов, который мне помог - изменить / создать конфигурациюфайл /etc/asound.conf с этими двумя строками:

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

~
Это изменило то, что было картой по умолчанию.

...