Вопрос или проблема
Я пытаюсь направить аудиосигнал из источника 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 и выполните следующие шаги:
- Перейдите в меню
Media
->Audio Settings
. - В разделе "Audio I/O" выберите ваше Loopback устройство в качестве
Input Device
иOutput Device
. Это должно бытьLoopback,0,1
для входа иLoopback,0,0
для выхода. - Примените изменения и протестируйте их, убедившись, что 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 должны работать совместно без сбоев.