LINUX.ORG.RU

Инициализация WineASIO работает только на «чистом» JACK

 ,


0

1

Доброго времени суток! Собственно такая проблема, под вином поднимается Reaper, через WineASIO направляется в JACK. Суть в том, что если инициализация WineASIO происходит после того как подключена вторая звуковая карта через alsa_out или просто mixbus или ardour уже запущен, — то корректной инициализации не происходит. В Patchage появляется только блок с заголовком Repaer, никаких входов/выходов, а в Repaer при нажатии на Play курсор стоит на одном месте и тишина. Если всё поотрубать, оставить только чистый JACK с его физическими входами/выходами карты, и после этого переинициализировать ASIO в Reaper, то тогда всё ок, после этого можно уже запускать всё остальное, в таком случае всё работает. Но открой ты другой проект в Reaper или случайно зайди в настройки звука в Reaper (при этом стопается связь с ASIO), — то всё, опять ASIO поднимется, если снова всё отрубать. Это не торт. В чём может крыться проблема и как лечить? Я так полагаю возможно где-то в реестре Wine-префикса висит попытка автоконнекта виназии, которая при наличии много и больше всяких разных портов не может завершиться успехом. Как-то можно выпилить, чтобы всё работало нормально?

Дистр: xubuntu 12.04 с openbox-ом. Reaper с виназией поставлен shell скриптом-инсталлятором, который раздаётся на оффициальном форуме Reaper. Проблема наблюдается так же и в виназии собранной из исходников.

Благодарю!



Последнее исправление: unclechu (всего исправлений: 1)

Прошу прощения за некоторый оффтоп, но хочу спросить - начиная с убунты 12.10 вайнасио не поддерживается, а хотелось бы всё-таки иметь на своей 13.04 этот продукт. Не знаете ли каких рецептов?

piyavking ★★★★
()
Ответ на: комментарий от piyavking

Не знаю, и вообще, по правде говоря, впервые слышу, что с 12.10 не поддерживается. Исходники открыты, можно поковырять, если не лень: https://sourceforge.net/projects/wineasio/.

unclechu
() автор топика

Решилось сборкой своей виназии с минованием подключения к физическим портам, а сразу к любым виртуальным.

http://habrahabr.ru/post/135835/ — тут описано что убирать из asio.c — ищем по ключевому слову “JackPortIsPhysical”.

unclechu
() автор топика
19 мая 2013 г.
Ответ на: комментарий от unclechu

В asio.c

Это убираем:

/* connect to the hardware io */
    if (This->wineasio_connect_to_hardware)
    {
        for (i = 0; i < This->jack_num_input_ports && i < This->wineasio_number_inputs; i++)
        {
            /* TRACE("Connecting JACK port: %s to asio: %s\n", This->jack_input_ports[i], jack_port_name(This->input_channel[i].port)); */
            if (strstr(jack_port_type(jack_port_by_name(This->jack_client, This->jack_input_ports[i])), "audio"))
                if (jack_connect(This->jack_client, This->jack_input_ports[i], jack_port_name(This->input_channel[i].port)))
                    WARN("Unable to connect %s to %s\n", This->jack_input_ports[i], jack_port_name(This->input_channel[i].port));
        }
        for (i = 0; i < This->jack_num_output_ports && i < This->wineasio_number_outputs; i++)
        {
            /* TRACE("Connecting asio: %s to jack port: %s\n", jack_port_name(This->output_channel[i].port), This->jack_output_ports[i]); */
            if (strstr(jack_port_type(jack_port_by_name(This->jack_client, This->jack_output_ports[i])), "audio"))
                if (jack_connect(This->jack_client, jack_port_name(This->output_channel[i].port), This->jack_output_ports[i]))
                    WARN("Unable to connect to %s\n", jack_port_name(This->output_channel[i].port));
        }
    }

Это добавляем:

jack_connect(This->jack_client, "system:capture_1", jack_port_name(This->input_channel[0].port));
    jack_connect(This->jack_client, "system:capture_2", jack_port_name(This->input_channel[1].port));
    jack_connect(This->jack_client, jack_port_name(This->output_channel[0].port), "system:playback_1");
    jack_connect(This->jack_client, jack_port_name(This->output_channel[1].port), "system:playback_2");

unclechu
() автор топика
Ответ на: комментарий от unclechu

А также:

This->jack_input_ports = jack_get_ports(This->jack_client, NULL, NULL, JackPortIsPhysical | JackPortIsOutput);

Заменяем на:

This->jack_input_ports = jack_get_ports(This->jack_client, NULL, NULL, 0);

И:

This->jack_output_ports = jack_get_ports(This->jack_client, NULL, NULL, JackPortIsPhysical | JackPortIsInput);

Заменяем на:

This->jack_output_ports = jack_get_ports(This->jack_client, NULL, NULL, 0);

unclechu
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.