ALSA: Setting FIFO type as the slave for dsnoop

GitHub issues - opened github at alsa-project.org
Wed Aug 10 17:42:20 CEST 2022


alsa-project/alsa-lib issue #257 was opened from cnkoder:

**Problem**

I am facing problems in using "dsnoop" to share/divide the audio stream into two. When dsnoop plugins' slave is set to be a FIFO it throws an error.

executed:

    sudo arecord -D default -f cd defRecording.wav -c 1 -r 32000

error:

    ALSA lib pcm_direct.c:1809:(_snd_pcm_direct_get_slave_ipc_offset) Invalid type 'fifo' for slave PCM

    arecord: main:828: audio open error: Invalid argument



This is the current asound.conf settings

asound.conf

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-html -->

    pcm.!default {
        type asym
        playback.pcm "playback"
        capture.pcm "capture1 "
    }

    pcm.playback {
        type plug
        slave.pcm "eci"
    }

    # Stream Output 1: Final
    pcm.capture1 {
        type plug
        slave.pcm "array"
    }

    # Stream Output 2: Final
    pcm.capture2 {
        type plug
        slave.pcm "array"
    }

    # Used to share the record device
    pcm.array {
        type dsnoop
        slave {
            pcm "eco"
            channels 1
        }
        ipc_key 666666
    }

    # Writes audio coming from any sort of player to ec.input, this is read by the echo
    # cancellation software.
    pcm.eci {
        type plug
        slave {
            format S16_LE
            rate 32000
            channels 1
            pcm {
                type file
                slave.pcm null
                file "/tmp/ec.input"
                format "raw"
            }
        }
    }

    # Read FIFO output which contains echo cancelled audio
    pcm.eco {
        type plug
        slave.pcm {
            type fifo
            infile "/tmp/ec.output"
            rate 32000
            format S16_LE
            channels 1
        }
        #ipc_key 666666
    }

<!-- end snippet -->

Note:
eco is used to read the FIFO file which contains the echo canceled audio coming in from cancellation software. This software's input is hw:0 and records audio directly from the microphone, and then processes and passes this over to ec.output

Dsnoop works well when the slave.pcm is a hardware device but as soon as I point to something else it fails. 
Is there a workaround or any other solution to tackle this problem?

Issue URL     : https://github.com/alsa-project/alsa-lib/issues/257
Repository URL: https://github.com/alsa-project/alsa-lib


More information about the Alsa-devel mailing list