The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз операционной системы OpenBSD 5.7"
Отправлено Аноним, 09-Май-15 00:34 
>> Вырубил sndiod (чтобы программы, использующие sndio, подключались в /dev/audio напрямую),
>> проиграл тот же файл - пилы нет, а audioctl говорит, что
>> play.rate=44100. То есть ресемплирование, видимо, успешно делается штатным кодеком, так
>> как в audio(4) используется линейное и тоже, судя по коду (очень
>> похож на код из sndiod), без dithering'а - как я понимаю,
>> в этом случае пилу я тоже должен был услышать.
> Точно сказать о качестве ресемплинга по наличию/отсутствия dithering'а нельзя ;)

Ага, понял, это я не тот код смотрел.

Вот, похоже, именно ресемплинг в sndiod (dsp.c, функция resamp_do):


        for (;;) {
                if (diff < 0) {
                        if (ifr == 0)
                                break;
                        ctx_start ^= 1;
                        ctx = ctxbuf + ctx_start;
                        for (c = nch; c > 0; c--) {
                                *ctx = *idata++;
                                ctx += RESAMP_NCTX;
                        }
                        diff += oblksz;
                        ifr--;
                } else if (diff > 0) {
                        if (ofr == 0)
                                break;
                        ctx = ctxbuf;
                        for (c = nch; c > 0; c--) {
                                s = ctx[ctx_start];
                                ds = ctx[ctx_start ^ 1] - s;
                                ctx += RESAMP_NCTX;
                                *odata++ = s + ADATA_MULDIV(ds, diff, oblksz);
                        }
                        diff -= iblksz;
                        ofr--;
                } else {
                        if (ifr == 0 || ofr == 0)
                                break;
                        ctx = ctxbuf + ctx_start;
                        for (c = nch; c > 0; c--) {
                                *odata++ = *ctx;
                                ctx += RESAMP_NCTX;
                        }
                        ctx_start ^= 1;
                        ctx = ctxbuf + ctx_start;
                        for (c = nch; c > 0; c--) {
                                *ctx = *idata++;
                                ctx += RESAMP_NCTX;
                        }
                        diff -= iblksz;
                        diff += oblksz;
                        ifr--;
                        ofr--;
                }
        }
        p->diff = diff;
        p->ctx_start = ctx_start;
        return oblksz - ofr;

Сравнивая с кодом в libsamplerate (пять режимов работы, три из них не дают "пилу" в прошлом тесте), больше всего сходства вижу с src_sinc.c, - а именно в том модуле реализованы те самые три "корректных" алгоритма. Но могу и ошибиться, конечно, так как весьма смутно понимаю, что тут на самом деле происходит. :(

> К сожалению не могу проверить дешевые кодеки в режиме 44.1kHz, так как
> alsa просто не позволяет выставить этот режим. Насколько я знаю -
> общая политика alsa избегать аппаратного ресемплинга, так как он обычно реализован
> через зад, точнее zoh или linear.
> А патчить alsa для включения 44.1 лениво :)
> Проверьте не изменилась ли скорость воспроизведения при форсировании 44.1.

Проверил, конечно. И сейчас ещё раз специально проверил через time aucat, чтобы своим ушам не доверять лишний раз. Тик в тик с sndio с выставлением на /dev/audio0 как 44,1кГц, так и 48кГц. У меня на одном из прошлых ноутбуков кодек вёл себя неадекватно в этом плане, так что я уже однажды обжёгшийся. :)

> К сожалению не нашел dataheet на ваш кодек.

Тем хуже ему... :)

>[оверквотинг удален]
>
> Использовать следующим образом. Отключить программную регулировку громкости (если она
> где-то используется). Включить всю аппаратную громкость на полную - в микшере
> и колонках. Если вся ваша звуковая система (плеер/драйвер/codec/dsp/dac) производят всю
> обработку аудио корректно или вообще никак не изменяют исходный сигнал (bit
> perfect), то вы услышите тихую музыку, плавно тонущую в равномерном шуме.
> Если звук будет звучать неоднородно, как бы то появляясь и исчезая c
> неприятными (жесткими) призвуками - где-то есть проблема. Если проблема возникает только
> на коком-то определенном формате, то значит проблема в плеере или используемой
> им библиотеке.

Попробовал с wav в aucat, ffplay (надеялся увидеть сонограмму), MoC (использует libsamplerate) и sox, с sndiod -r 44100 и без оного. По результатам - с sndiod звук немного тише (он приглушает звук на 3дБ, чтобы реальная громкость клиентов не скакала при изменении их количества в разумных пределах), но в обоих случаях слышно только музыку и шум (колонок), без призвуков и пропаданий.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру