LINUX.ORG.RU

недостоверное воспроизведение звука в alsa


0

0

Вот это новость! В линуксе вопроизведение звука не есть достоверным. Прослушивание качественной музыки сведено на ноль. http://rapidshare.de/files/48142291/SB_test.wav.html --тестовый трек. Прослушайте и сами все поймете. Именно в таком качестве работает вся музыка на оригинальных cd. Там синусоида, которая должна идеально ровно звучать. В виндовсе в foobar2000+ssrc96000 играет идеально, в линуксе в амарок ужасные искажения. Пробовал через wine запустить foobar2000+ssrc96000 - искажения просто ужасные


Re: недостоверное воспроизведение звука в alsa

как страшно жить....

isden ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Прослушал. Звук чистый, никамких искажений. ESI Juli@, dmix и ресемплинг в .asoundrc отключены. В OSS - такая же фигня. ЧЯДНТ?

Автор, осиль элементарную настройку альзы, прежде чем с огромными глазами дрожащим голосом открывать всем Правду. Файлику этому, кстати, уже лет десять, его используют именно для проверки корректности ресемплинга.

ist76 ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

На тестовом треке основной уровень приходится на пик в районе 20 КГц. Твой "оригинальный cd" не умеет воспроизводить такие частоты, это особенности формата, а не alsa. Дальше что? Будешь что-то доказывать, размахивая теоремой Котельникова?

YAR ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

1) ответил:ist76. Прослушал. Звук чистый, никамких искажений. ESI Juli@, dmix и ресемплинг в .asoundrc отключены. В OSS - такая же фигня. ЧЯДНТ? 2) ответил: На тестовом треке основной уровень приходится на пик в районе 20 КГц. Твой "оригинальный cd" не умеет воспроизводить такие частоты, это особенности формата, а не alsa. Дальше что? Будешь что-то доказывать, размахивая теоремой Котельникова?

1) Т.е оба сообщения друг другу противоречат:) у одного на джулай чистый и без искажений звук и при этом РЕСЕМПЛИНГ ОТКЛЮЧЕН. гг Забавно. 2) приходится на пик в районе 20 КГц --тут дело не в пиках вообще.

n1kt0 ()

Re: недостоверное воспроизведение звука в alsa

Не противоречат. Когда пытаешься воспроизводить непонятно что, то любая мелочь уже будет оказывать влияние. В Juli@ ЦАП отличается от того, что ты использовал, тот же сигнал он может уже по-другому рисовать, это раз. Во-вторых, а не делает ли Juli@ апсемплинг аппаратно?

На тему пиков (немного неточно выразился, там, скорее, спектр с пиком на 19 КГц) - а ты открой свою дорожку в audacity и посмотри, _что именно_ ты пытаешься воспроизводить. Ну нельзя из ничего получить нормальный сигнал, на таком каждая карта будет воспроизводить что-то свое.

В тему: http://linuxoid.hostopia.com/rain/sound/sine_12000_44-96-192.png

YAR ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Значение имеет не формат, а его параметры. Да, ты не можешь использовать WAV для сохранения произвольного сигнала с частотой 20 КГц, если частота дискретизации выбрана 44,1 КГц, так как на отриовку одного периода сигнала тебе дается чуть больше 2 выборок. Попробуй построить произвольный график по двум точкам, после чего по тем же двум точкам построй другой график. Да, и возможности CD-формата хорошо демонстрирует картинка выше.

YAR ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Это синтезированная дорожка, тут нет погрешностей оцифровки - просто 3 отдельных дорожки с разными параметрами, показывающие возможности передачи сигнала. Как видишь, для более-менее точной передачи формы надо хотя бы 6-8 точек на период, следовательно, максимум, что ты можешь хоть как-то требовать от CD - это

rain@acnote:~$ calc 44100/6
7350

ЗЫ: если твой комментарий подразумевал, что я использовал твою дорожку - нет, у меня просто скриншот под рукой был, потому и "в тему".

YAR ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Аффтор, я тебе больше скажу: меняя настройки передискретизации в этом нашем говнолинупсе, получим ещё пару десятков вариантов воспроизведения этого файла. А единственно правильный вариант получится, только если частота ЦАПа звуковой карты совпадает с частотой дискретизации файла (в данном случае 44100Гц). Тут есть одна проблема: если ЦАП умеет несколько разных частот дискретизации и какая-то программа "держит" ЦАП звуковой карты на частоте 48000Гц (например), то потоки от других программ тоже придётся конвертировать в 48000Гц, со всеми вытекающими последствиями. И это вообще никак не зависит от ОС.

mironov_ivan ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

лять аффтар, ты вообще разбираешься в теме? от тебя ни одного аргументированого док-ва нет, почитай по теме чонить а? сгенерируй несколько тест-сигналов, возьми осциллограф -побалуйся хотя-бы.
..споришь о вкусе устриц с теми кто их ел..(М.Ж.)

S_Paul ★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Сладенький, ты просто не разбираешься в колбасных обрезках.
Прослушал - все чисто.
Карта EMU-0404
$ cat /etc/asound.conf
pcm.!default {
type rate
slave {
pcm "hw:0,0"
rate 48000
}
converter "samplerate_best"
}

dagger ()

Re: недостоверное воспроизведение звука в alsa

У меня воспроизводится тоновый набор номеронабирателя. И ещё в фоне какой-то звук, похожий на звук цикады.
А чё там должно быть?

iZEN ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

>У меня воспроизводится тоновый набор номеронабирателя. И ещё в фоне какой-то звук, похожий на звук цикады.

тоже самое, только без цикад. высокие частоты давят на ухо нехило.

плеер quod libet, ноут asus eeepc 901 с звуковухой intel hda, уши - sennheiser hd477

z0D5e8n7x_2 ()

Re: недостоверное воспроизведение звука в alsa

>тоже самое, только без цикад. высокие частоты давят на ухо нехило.

У меня ничего не давит на уши. Всё нормально воспринимаю.

iZEN ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Спасибо за тестовый файлик. Выбрал наиболее оптимальный SRC в asound.conf

Suigintou ★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Звук intel-hda

aplay SB_test.wav > жёсткий стрёкот

mplayer SB_test.wav -af resample=48000:0:2 > чуть получше

mplayer SB_test.wav -srate 48000 > вообще без слышимых искажеий

Амарок ставить неохота...

uzbl ()

Re: недостоверное воспроизведение звука в alsa

amarok использует xine.

Как сказать этому дерьму (xine) не делать resampling?

В ~/.kde3.5/share/apps/amarok/xine-config

audio.synchronization.resample_mode:off

я сказал. Начались щелчки и искажения. Всё остальное (aplay, например) с defaults.pcm.rate_converter "samplerate" в asound.conf играет тест без искажений.

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

Нашёл патчик на xine-lib вот сдесь, http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg20475.html

Теперь амарок тест воспроизводит правильно, но при смене композиции начинается дёрганье, что то с буферами... Рою дальше.

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

> Звук intel-hda
> mplayer SB_test.wav -af resample=48000:0:2 > чуть получше

> mplayer SB_test.wav -srate 48000 > вообще без слышимых искажеий


Хм, занятно, у меня тоже intel-hda, но без искажений вариант с -af resample, а с -srate небольшие есть.

А у тебя какой чип у звуковухи? У меня Realtek ALC268.

narayan ()

Re: недостоверное воспроизведение звука в alsa

Вы тестовый файл проигрывали? Должен быть звук набора номера без посторонних верещаний. Если ресемплер ресемплит коряво, появляются искажения, которые и слышно. mplayer ресемплит автоматом, поэтому искажений нет. aplay без ключей честно плюёт в звуковуху - искажения.

Если сказать в asound.conf

defaults.pcm.rate_converter "samplerate_best" (к примеру)

Алса начнёт ресемплить сама с 44100 > 48000, и делать это без искажений.

После этого играет всё, кроме испльзующего xine-lib. Эта гадская прога при выводе в alsa ресемплит linear ресемплером, дающим искажения (верещание). Если отключить ресемплинг в конфиге, начинает глючить, щёлкать и менять скорость воспроизведения. Если пропатчить патчем выше - звучит нормально, но всплывает проблема с выравниванием буферов, из за чего при смене трека звук в амароке дёргается. Эту проблему я не победил, так как не собираюсь развивать блин xine. Решил выводом в esd.

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

А вообще топикстартеру спасибо. Я вспомнил, что года два назад пытался фиксить это, так как слышал как косячит амарок. Но тогда я умер на настройке alsa :)

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

>Вы тестовый файл проигрывали? Должен быть звук набора номера без посторонних верещаний. Если ресемплер ресемплит коряво, появляются искажения, которые и слышно.

Через SoX тот же звук, что и через Xine.

> play /home/igor/tmp/SB_test.wav

/home/igor/tmp/SB_test.wav:

  Encoding: Signed PCM    
  Channels: 2 @ 16-bit   
Samplerate: 44100Hz      
Replaygain: off         
  Duration: 00:00:02.75  

In:100%  00:00:02.75 [00:00:00.00] Out:121k  [      |      ] Hd:0.0 Clip:0    
Done.

iZEN ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

А вот так:

> play /home/igor/tmp/SB_test.wav --rate 48k

/home/igor/tmp/SB_test.wav:

  Encoding: Signed PCM    
  Channels: 2 @ 16-bit   
Samplerate: 44100Hz      
Replaygain: off         
  Duration: 00:00:02.75  

In:100%  00:00:02.75 [00:00:00.00] Out:132k  [      |      ]        Clip:0    
Done.

ИСКАЖЕНИЙ НЕТ!

iZEN ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Осталось прописать в asound.conf ресемплер и перенаправить всё, что юзает xine-lib через esd. Я вылечил так. samplerate_best жрёт больно много CPU, я поставил samplerate. На слух разницу не слышу.

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

Тогда обычные звуковые записи будут повышать свой samplerate автоматически что ли? Но там уже другие искажению будут проявляться — типа "ступенька".

iZEN ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Если у вас оригинал 44100, а карта 48000 (то есть аппратно 44100 не умеет), то ресемплить будет либо приложение, либо ядро (алса). Я предпочитаю делать всё в одном месте (в ядре). И если бы не xine, всё было бы шоколадно. А теперь у меня лишний костыль - esd. А ресемплит всё равно ядро. Просто xine не может звуковуху грамотно открыть...

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

> Если у вас оригинал 44100, а карта 48000 (то есть аппратно 44100 не умеет), то ресемплить будет либо приложение, либо ядро (алса). Я предпочитаю делать всё в одном месте (в ядре).

Ядерная часть ALSA (драйвера) занимаются только выводом потока, все преобразования потока (в т.ч. ресемплинг, смешивание, маршрутизация каналов и т.п.) выполняет цепочка ALSA-плагинов в пространстве пользователя. libasound при инициализации читает конфиг и по нему загружает плагины из разделяемых библиотек и соединяет их в конвеер.

mironov_ivan ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Спасибо К.О. :)

Я несколько коряво выразился :) Естественно в пространстве пользователя :) Для простоты назвал это "в ядре" поскольку этим занимается "драйвер", а не пользовательское приложение.

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

> Вы тестовый файл проигрывали? Должен быть звук набора номера без посторонних верещаний. Если ресемплер ресемплит коряво, появляются искажения, которые и слышно. mplayer ресемплит автоматом, поэтому искажений нет. aplay без ключей честно плюёт в звуковуху - искажения.

Так так, стоп. Т.е. вот того мерзкого звука в конце быть не должно?! А должен быть только чистый звук набора номера? Тогда как понимать:

> В виндовсе в foobar2000+ssrc96000 играет идеально, в линуксе в амарок ужасные искажения. Пробовал через wine запустить foobar2000+ssrc96000 - искажения просто ужасные


Я пробовал в венде на двух разных звуковых картах - искажения есть. Значит и в венде звуковая подсистема работает неправильно?!

mironov_ivan ★★★★★ ()

Re: недостоверное воспроизведение звука в alsa

Да. Что то использует linear interpolator. Alsa by default, без samplerate plugins, использует простейший linear, так что те же искажения. По ссылке выше срываются покровы и обнажаются тайны :)

kdf16rc ()

Re: недостоверное воспроизведение звука в alsa

> Да. Что то использует linear interpolator. Alsa by default, без samplerate plugins, использует простейший linear, так что те же искажения. По ссылке выше срываются покровы и обнажаются тайны :)

Очень интересно... А то я первым делом попробовал aplay -vD hw:0,0 SB_test.wav и думал что интерполяции не будет. А оно вон оно как...

mironov_ivan ★★★★★ ()

По горячим следам...

Итак, в оригинале этот файл называется "udial.wav". Гугль выдаёт на это название кучу всего. Вот одна из ссылок: http://jimmyauw.com/2007/02/08/udial-explained/. Высокочастотный (~20КГц) писк там _есть_, это факт. Сам тест основан на том, что большинство людей звук такой частоты не слышат (1), если он правильно воспроизводится. При неправильном воспроизведении, когда ресемплинг искажает этот высокочастотный звук и он становится смесью низкочастотных, слышны искажения. Проблема в том, что предположение (1) не совсем верно. Некоторые люди такие частоты всё-таки слышат. Так что высокочастотный писк может быть слышен, главное чтобы он не давал низкочастотных искажений.

Вот кстати:
tail -c +65 udial.wav | aplay -r 5000 -f S16_LE -c 2 # замедлено примерно в 8 раз
tail -c +65 udial.wav | aplay -r 10000 -f S16_LE -c 2 # /4
tail -c +65 udial.wav | aplay -r 20000 -f S16_LE -c 2 # /2
tail -c +65 udial.wav | aplay -r 44100 -f S16_LE -c 2 # оригинал
Высокочастотная составляющая должна звучать одинаково, только чем быстрее - тем тише. Как я уже сказал выше, в оригинале подавляющее большинство её не услышат, а остальные услышат тихий раздражающий писк.

P.S. Проверил этот звук на маме - не слышит =).

mironov_ivan ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.