Skip to content

ALSA EC: Combining the FIFO with dsnoop to share audio #26

@cnkoder

Description

@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

Used Asound.conf

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
}

Note: 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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions