LINUX.ORG.RU

Помогите настроить alsa

 , , ,


0

1

С помощью Chat GPT составил конфиг:

pcm.!default {
    type asym

    playback.pcm {
        type dmix
        ipc_key 1024
        slave.pcm 'hw:0,0'
        slave {
           pcm 'hw:0,0'
           rate 44100
           format S24_3LE
        }
        bindings {
            0 0
        }
    }

    capture.pcm {
        type plug
        slave.pcm 'hw:0,0'
        format S24_3LE
    }
}

pcm.rate44100 {
    type rate
    slave.pcm dmix
    rate 44100
    resample.quality 10
}

pcm.rate48000 {
    type rate
    slave.pcm dmix
    rate 48000
    resample.quality 10
}

pcm.rate88200 {
    type rate
    slave.pcm dmix
    rate 88200
    resample.quality 10
}

pcm.rate96000 {
    type rate
    slave.pcm dmix
    rate 96000
    resample.quality 10
}

pcm.rate192000 {
    type rate
    slave.pcm dmix
    rate 192000
    resample.quality 10
}
Но что-то в этом конфиге не правильно.

mpv пишет:
[ao/alsa] ALSA channel map conflicts with channel count!
[ao/alsa] Asked for 2 channels, got 1 - fallback to mono.
AO: [alsa] 44100Hz mono 1ch s32
звук есть только из левого динамика.
Ещё такая ошибка:
$ aplay file.wav -v --dump-hw-params   
Playing WAVE 'file.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
HW Params of device "default":
--------------------
ACCESS:  MMAP_INTERLEAVED MMAP_NONINTERLEAVED RW_INTERLEAVED RW_NONINTERLEAVED
FORMAT:  S32_LE
SUBFORMAT:  STD MSBITS_MAX MSBITS_20 MSBITS_24
SAMPLE_BITS: 32
FRAME_BITS: 32
CHANNELS: 1
RATE: 44100
PERIOD_TIME: (125170 125171)
PERIOD_SIZE: 5520
PERIOD_BYTES: 22080
PERIODS: [2 3]
BUFFER_TIME: (250340 375511)
BUFFER_SIZE: [11040 16560]
BUFFER_BYTES: [44160 66240]
TICK_TIME: ALL
--------------------
aplay: set_params:1387: Sample format non available
Available formats:
- S32_LE
format точно поддерживается, и он так ругается вообще на любой формат, даже на S16_LE, и даже если вообще формат не указывать.
Если закомментировать секцию bindings:
$ aplay file.wav -v   --dump-hw-params   
Playing WAVE 'file.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
HW Params of device "default":
--------------------
ACCESS:  MMAP_INTERLEAVED MMAP_NONINTERLEAVED RW_INTERLEAVED RW_NONINTERLEAVED
FORMAT:  S32_LE
SUBFORMAT:  STD MSBITS_MAX MSBITS_20 MSBITS_24
SAMPLE_BITS: 32
FRAME_BITS: 64
CHANNELS: 2
RATE: 44100
PERIOD_TIME: (125170 125171)
PERIOD_SIZE: 5520
PERIOD_BYTES: 44160
PERIODS: [2 3]
BUFFER_TIME: (250340 375511)
BUFFER_SIZE: [11040 16560]
BUFFER_BYTES: [88320 132480]
TICK_TIME: ALL
--------------------
aplay: set_params:1387: Sample format non available
Available formats:
- S32_LE
и в mpv звук 2 канала.
Обратите внимание, что с секцией bindings и без неё в выводе aplay разница в 4-х строчках (FRAME_BITS, CHANNELS, PERIOD_BYTES, BUFFER_BYTES).

Может, этот конфиг вообще не правильный. Нужен конфиг, чтобы был звук из нескольких программ, format S24_3LE, чтобы всегда использовался та частота дискретизации что в источнике (по умолчанию это не работает) и resample.quality 10 и rate_converter samplerate_best (если это имеет смысл, или эти опции не нужны потому что всегда будет использоваться частота дискретизации источника?).

★★★★★

Последнее исправление: teod0r (всего исправлений: 2)

в общем, по сравнению с дефолтом тебе не нравится, что используется plughw вместо hw. возьми /usr/share/alsa/pcm/default.conf, скопируй в ~/.asoundrc и удали оттуда плагин plug.

вместо

default {
        # use plughw as default
        type plug
        slave.pcm {
                type hw
                card $CARD
        }
        hint.device 0
}

пропиши

default {
        type hw
        card $CARD
        hint.device 0
}

должно хватить. дальше по ситуации.

anonymous
()
Ответ на: комментарий от firkax

таких тонкостей не знал. т.е. так невозможно сделать? чтоб в каждой программе была частота дискретизации из воспроизводимого файла?
какую тогда частоту прописать? карта поддерживает 44100 48000 88200 96000 192000.
сейчас вернулся к старому конфигу:

pcm.!default {
        type plug
        slave.pcm dmixer
}

pcm.dmixer {
        type dmix
        ipc_key 1024

        slave {
                pcm 'hw:0,0'
                format S24_3LE
                period_time 0
                period_size 1024
                buffer_size 4096
#               rate 96000
        }

}
куда прописать:
resample.quality 10
rate_converter samplerate_best
?
как подобрать period_size и buffer_size?

teod0r ★★★★★
() автор топика