[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

alsa не делает ресамплинг если использовать эквалайзер-плагин



Курение манов и прочих доков не привело к просветлению. Имеется
подозрение, что я что-то делаю не так.
Проблема: все звуки рейтом 44100 Гц прекрасно воспроизводятся, работает
звук в флэш и видео, к качеству претензий нет.
Но скачал музыку с рейтом 48000 Гц и не смог ее воспроизвести.
alsa ругается, вот:

[alsa.c:117] error: initialize_device(): cannot set hw params
[audio.c:630] error: failed to open audio device

Вот мой asound.rc:

# begin of asound.rc
pcm.azalia{
    type hw
    card 0
}
ctl.azalia{
    type hw
    card 0
}
pcm.dsp {
    type plug
    slave.pcm mymixer
#    slave.pcm equalplug
}
pcm.mymixer{
    type dmix
    ipc_key 1024
    slave {
#   	        pcm "hw:0,0"
		pcm azalia
                period_time 0
                period_size 2048
                buffer_size 8192
                rate 44100
        }
        bindings {
                0 0
                1 1
        }
}
pcm.equal{
    type plug
#    slave.pcm dsp
    slave.pcm mymixer
#    slave.pcm equalplug
}
ctl.equal{
    type equal
}
pcm.equalplug{
    type equal
    slave.pcm equal
#    slave.pcm mymixer
}
pcm.!default {
    type plug
#    slave.pcm mymixer
    slave.pcm equalplug
#    slave.pcm equal
}
# EOF

Если убрать параметр rate в pcm.mymixer, то все начинает работать, но
ресемплинг alsa несколько портит картину. Проброс сигнала через
эквалайзер (минуя pcm.equalplug, сразу на pcm.equal) тоже решает
проблему, но использование эквалайзера alsa позволяет получить приятный
звук и заметно разгрузить проц, чем также хотелось бы воспользоваться.

Задумка была, чтобы все, с рейтом 44100гц шло напрямую (основная масса),
а что нет (48000гц, например, ибо такого совсем немного) - через
ресемплинг. Для этого и предусмотрен плуг pcm.equal, который и должен
делать полное преобразование формата, включая ресемплинг, если он нужен
и пробрасывать, если нет. Но по ходу получается, что если в цепочке
используется эквалайзер, то ресемплинг тупо отваливается или работает
только на 48000 Гц. Что я делаю не так? Можно просто линком бросить в
меня. Заранее спасибо.

ЗЫ Пульс не предлагать.


Reply to: