Как заставить устройство Alsa Loopback работать в Puredata

Вопрос или проблема

Я пытаюсь направить аудиосигнал из источника Airplay (с использованием Shairport-sync) в Puredata. Для этого я создал устройство Loopback в Alsa. Затем я установил это виртуальное устройство в качестве выхода для Shairport следующим образом (hw:2 – это устройство петли):

shairplay-sync -a -Airplay -- -d hw:2

Но когда я пытаюсь установить устройство петли в качестве входа для Puredata, я получаю следующее сообщение:

audio I/O stuck... closing audio

Я задумался, может ли эта проблема возникнуть из моего файла .asoundrc? Вот он:

# устройство PCM воспроизведения: используем подустройство петли 0,0
pcm.amix {
  type dmix
  ipc_key 219345
  slave {
  pcm "hw:Loopback,0,0"
  period_size 1024
        buffer_size 2048
        rate 44100
  }
}

# устройство PCM захвата: используем подустройство петли 0,1
pcm.asnoop {
  type dsnoop
  ipc_key 219346
  slave.pcm "hw:Loopback,0,1"
}

# дуплексное устройство, объединяющее наши PCM устройства, определенные выше
pcm.aduplex {
  type asym
  playback.pcm "amix"
  capture.pcm "asnoop"
}

# ------------------------------------------------------
# для jack alsa_in и alsa_out: сигнал с петли на другом конце
pcm.ploop {
  type plug
  slave.pcm "hw:Loopback,1,1"
}

pcm.cloop {
  type dsnoop
  ipc_key 219348
  slave {
  pcm "hw:Loopback,1,0"
  period_size 1024
        buffer_size 2048
        rate 44100
  }
}

# ------------------------------------------------------
# устройство по умолчанию

pcm.!default {
  type plug
  slave.pcm "aduplex"
}

Мне стоит добавить что-то о формате или еще что-то?

К вашему сведению, устройство Loopback хорошо работает с Jack audio. Puredata тоже.
Я бы не хотел использовать Jack, потому что он, похоже, использует слишком много ресурсов (я не смог заставить Jack, Puredata и устройство петли работать вместе, оно каждый раз зависает…)

Спасибо за помощь!

К вашему сведению, Shairport Sync теперь может давать вам аудиопоток напрямую без необходимости в устройстве ALSA loopback. Вы можете скомпилировать его так, чтобы он выводил аудио на пайп или в stdout.

Ответ или решение

Чтобы наладить работу Alsa Loopback device с Pure Data, необходимо учесть несколько аспектов конфигурации ALSA и самого Pure Data. Ниже представлено пошаговое руководство, которое поможет вам в этом процессе.

Пошаговая настройка для работы Loopback устройства с Pure Data

1. Проверка установки и конфигурации Shairport-Sync

Убедитесь, что вы правильно установили Shairport-Sync и настроили его для вывода звука на ваше Loopback устройство. Вашу команду:

shairport-sync -a -Airplay -- -d hw:2

необходимо сохранить, так как она управляет маршрутизацией аудиосигнала. Однако, если Shairport-Sync может напрямую выводить звук на pipe или stdout, это может значительно упростить настройку. Убедитесь, что вы используете последнюю версию Shairport-Sync, которая поддерживает эти параметры.

2. Конфигурация .asoundrc

Ваш файл .asoundrc выглядит довольно многообещающе, но его следует несколько скорректировать для обеспечения стабильной работы с Pure Data. Ниже представлено несколько рекомендаций:

  • Убедитесь, что у вас правильно настроены pcm.amix и pcm.asnoop для захвата и воспроизведения в случае, если вы планируете использовать такие конфигурации.

  • Добавьте параметры формата для ваших PCM устройств. Например, вы можете указать формат аудио и количество каналов:

pcm.amix {
  type dmix
  ipc_key 219345
  slave {
    pcm "hw:Loopback,0,0"
    rate 44100
    format "S16_LE"  # 16-бит формат
    channels 2       # Стерео
  }
}

И аналогично для asnoop:

pcm.asnoop {
  type dsnoop
  ipc_key 219346
  slave {
    pcm "hw:Loopback,0,1"
    rate 44100
    format "S16_LE"
    channels 2
  }
}

3. Настройка Pure Data

После корректировки .asoundrc файла, откройте Pure Data и выполните следующие шаги:

  1. Перейдите в меню Media -> Audio Settings.
  2. В разделе "Audio I/O" выберите ваше Loopback устройство в качестве Input Device и Output Device. Это должно быть Loopback,0,1 для входа и Loopback,0,0 для выхода.
  3. Примените изменения и протестируйте их, убедившись, что Pure Data не выдает сообщение audio I/O stuck... closing audio.

4. Устранение проблем

Если вы по-прежнему сталкиваетесь с ошибками:

  • Проверьте, не используются ли Loopback устройства другими приложениями. Убедитесь, что Shairport-Sync и Pure Data не конфликтуют за контроль над устройствами.
  • Попробуйте увеличить значения period_size и buffer_size в вашем .asoundrc для уменьшения нагрузки на процессор.

Заключение

Используя данный подход, вы можете устранить возможные проблемы в конфигурации ALSA и обеспечить корректную работу Pure Data с Loopback устройствами. Также рассмотрение возможности компиляции Shairport-Sync для вывода звука через pipe может упростить процесс и снизить нагрузку на ресурсы системы. Если все указанные шаги были выполнены и настройки конфигурации в порядке, Pure Data и Shairport-Sync должны работать совместно без сбоев.

Оцените материал
Добавить комментарий

Капча загружается...