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: