Alsa не может передать запись в aplay, ресурс занят EDIROL UA-101

В вашем примере используется fifo, а не pipe, поэтому на него распространяетсяfifo(7).pipe(7)также сообщает:

A FIFO (short for First In First Out) has a name within the filesystem (created using mkfifo(3)), and is opened using open(2). Any process may open a FIFO, assuming the file permissions allow it. The read end is opened using the O_RDONLY flag; the write end is opened using the O_WRONLY flag. See fifo(7) for further details. Note: although FIFOs have a pathname in the filesystem, I/O on FIFOs does not involve operations on the underlying device (if there is one).

I/O on pipes and FIFOs
The only difference between pipes and FIFOs is the manner in which they are created and opened. Once these tasks have been accomplished, I/O on pipes and FIFOs has exactly the same semantics.

Итак, теперь изfifo(7):

The kernel maintains exactly one pipe object for each FIFO special file that is opened by at least one process. The FIFO must be opened on both ends (reading and writing) before data can be passed. Normally, opening the FIFO blocks until the other end is opened also.

Таким образом, перед обоими концами (здесь, что означает, что есть как минимум читатель и писатель ), открыты блоки записи в соответствии с fifo(7). После того, как оба конца были открыты, а затем (конец )чтения (с )закрыт, запись генерирует SIGPIPE в соответствии с pipe(7).

Пример использования канала (не fifo )см. в пример разделаpipe(2):включает канал()(без открытия (), поскольку канал ()фактически создал пару каналов open ), close (), read ()write ()and fork()(почти всегда есть разветвление ()при использовании канала ).

Самый простой способ обработки SIGPIPE из вашего собственного кода C, если вы не хотите, чтобы он умирал при записи в fifo, — это вызвать signal(SIGPIPE, SIG_IGN);и обрабатывать его, проверяя errno EPIPEпосле каждой записи ()вместо этого.

1
27.12.2019, 14:14
1 ответ

Сама Alsa отлично работает с дуплексным потоком, я пробовал со звуковой картой USB:

arecord -D plughw:CARD=UA25EX | aplay -D plughw:CARD=UA25EX -

просто работает (ничего особенногоasoundrc).

Итак, я бы предположил, что ваша звуковая карта USB по какой-то причине позволяет либо воспроизведение, либо запись, но не то и другое одновременно.

0
28.01.2020, 00:00

Теги

Похожие вопросы