Я думал об mplayer лучше (44100->48000 на ALSA)

Как-то я долго не придавал значения цифре 48000 на выводе в ALSA аудиодорожек с собственной частотой 44100, и вот сегодня дошли руки проверить, что же у меня не так настроено. Порыл man mplayer, погуглил – и не нашел НИ ОДНО способа это исправить.

То есть даже при выводе в “железный” hw:0,0 на хорошей многоканальной звуковухе с поддержкой всех мыслимых частот и безо всяких dmix, пульсы и прочих костылей, mplayer упорно и бессмысленно ресэмплирует любую частоту на 48000 перед выводом.

Гугл по моему запросу нашел только багрепорт мейнтейнерам Дебиана на аналогичную тему, в ответ на который дебианщики на голубом глазу заявили удивлённому немцу, что это не баг, а фича.

Я даже попробовал заменить mplayer на mplayer2 – но похоже, они сговорились :)
Остальные испробованные мной плееры, включая aplay, такого глюка не показали.

В конце концов я прописал в конфиг mplayer вывод в эмуляцию OSS – на него у mplayer такого глюка пока нет.
(Хорошо, что я давно уже прописал загрузку модуля snd-pcm-oss, вдруг понадобится вывести /dev/random в /dev/dsp :)

Вопрос – кто-нибудь знает, когда хотя бы примерно это началось, и что с этим делать (помимо написания багрепорта)?
Больше не меньше. Чего париться?
Или приступ перфекционизма? ;)
такие дела.
Да я в общем-то и не парюсь, жил же как-то до этого.
Однако 44100 не кратно 48000, а значит искажения неизбежны.
Если это не отключается, то или баг, или откровенная халтура разработчиков mplayer. Как к ним после этого относиться, и чего ещё ждать…
было , задавался как то, 44100 - цифры знакомые и не вызывают внимание, 48… др. дело. Я гуглил насчет конфига, хотел както заставить выводить звук таким каким он есть без изменений, специально для целей определения качества mplayer-ом на ходу, вместе с прослушиванием. Так и не нашел, подумал что я еще не слишком мудр и так надо.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
У mplayer есть опция -srate
Ей можно принудительно задать частоту вывода, и если она не совпадает с оригинальной, будет применено ресэмплирование.

Если указать вывод в OSS, можно наблюдать (и слушать) как она работает.
Но при выводе в ALSA mplayer просто игнорит её, и ВСЕГДА ресэмплирует в 48000, хоть -srate 8000 пиши, хоть 96000.

P.S.
Поправочка – не игнорит, переопределяет. Оказывается, mplayer точно думает, что звуковуха поддерживает ТОЛЬКО 48000Hz, и ведёт себя соответственно. Здесь я для проверки указал -srate 96000
==========================================================================
Building audio filter chain for 44100Hz/2ch/s16le -> 96000Hz/0ch/??...
[libaf] Adding filter dummy 
[dummy] Was reinitialized: 44100Hz/2ch/s16le
[libaf] Adding filter lavcresample 
[dummy] Was reinitialized: 96000Hz/2ch/s16le
[dummy] Was reinitialized: 96000Hz/2ch/s16le
Trying preferred audio driver 'alsa', options 'device=hw=0.0'
alsa-init: requested format: 96000 Hz, 2 channels, 9
alsa-init: using ALSA 1.0.26
alsa-init: setup for 1/2 channel(s)
alsa-init: using device hw:0,0
alsa-init: opening device in blocking mode
alsa-init: device reopened in blocking mode
alsa-init: got buffersize=65536
alsa-init: got period size 1024
alsa: 48000 Hz/2 channels/4 bpf/65536 bytes buffer/Signed 16 bit Little Endian
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
AO: Description: ALSA-0.9.x-1.x audio output
AO: Author: Alex Beregszaszi, Zsolt Barat <joy@streamminister.de>;
AO: Comment: under development
Building audio filter chain for 44100Hz/2ch/s16le -> 48000Hz/2ch/s16le...
[dummy] Was reinitialized: 96000Hz/2ch/s16le
[dummy] Was reinitialized: 48000Hz/2ch/s16le
[dummy] Was reinitialized: 48000Hz/2ch/s16le
Video: no video
Freeing 0 unused video chunks.
Starting playback...
да, идея попробовать принудительно поставить частоту тоже пришла в голову, но тогда возникает вопрос, а что если частота будет 48… Не будет ли снижения(обратного). Вариант принудительно заставить программу выдать нужное не устроила (априори), т.е. если бы наоборот нужно было бы “поиздеваться” над выходом - было бы логично. Остановился на
defaults.pcm.dmix.rate 44100
но так и не попробовал, видел где-то на лоре или где-то еще. Но вот когда звук будет “беднее” , то походу будет таже песня что с 41-48, только высота будет 41.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
sleepycat
да, идея попробовать принудительно поставить частоту тоже пришла в голову, но тогда возникает вопрос, а что если частота будет 48… Не будет ли снижения(обратного). Вариант принудительно заставить программу выдать нужное не устроила (априори), т.е. если бы наоборот нужно было бы “поиздеваться” над выходом - было бы логично. Остановился на
defaults.pcm.dmix.rate 44100
но так и не попробовал, видел где-то на лоре или где-то еще. Но вот когда звук будет “беднее” , то походу будет таже песня что с 41-48, только высота будет 41.
dmix работает только при выводе в “программный” интерфейс alsa-lib. Если выводить в hw, его не должно быть в принципе.

Я остановился на ao=oss , работает. Вроде :)
Что оно там делает с ним в ядре – не проверял, хотя можно устроить эксперимент с искусственным сигналом на частоте, кратной тактовой, и его отловом на выходе. Если будет интерференция – есть ресэмплирование. Если всё чисто – нету.
надеюсь Вы правы, к сожалению опыта нет в этой части чтобы как-то прокоментировать. Но всеже, можешь попробовать эту опцию, там просто подазрительно похоже стоит 48000.
Есть еще
pcm.rate_convert {
    type plug
    slave {
        pcm "hw:0,0"
        rate 48000
    }
}
как пример в вики для ресемплирования, но поиск по кейворду “rate” в конфиге не дало никаких совпадений кроме dmix'а. А “домашнего” конфига я не нашел вовсе. Т.е. кроме этого варианта у меня больше ничего не было. Хотя полностью в конфигурацию алсы я не влазил, может оно где там в др. месте “прописано”, просто я не доузнал, а может и вовсе нету в конфиге директив на этот счет…
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
Это секция конфига alsa-lib для конвертации “программного” вывода в 48000 с перенаправлением в hw:0,0
То бишь как раз то, что делает mplayer и без этого.
Нет, манипуляции с ALSA тут ни при чём – дело в самом mplayer, это он почему-то считает, что ALSA якобы ничего кроме 48000 не понимает. Другие плееры выводят в ALSA на любых стандартных частотах.
Natrio
Однако 44100 не кратно 48000, а значит искажения неизбежны.
А на слух это заметно? )))
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.