Конечно, не мне тягаться с zezic, но я все же посмел разбавить серость и уныние скриншотов в галерее своим скриншотом с пони.
Собственно, вся информация о системе на скриншоте.
Однако, хотя я пришел в галерею, я пришел не столько системой хвастать, сколько рассказать об одной проблеме из расчета, что о ней, в итоге, прочитает много людей и может кто подскажет что делать. У меня, друзья, не работает звук (и видео не играется нормально — либо стерео не работает, либо жестокая непоправимая рассинхронизация, vlc просто не играет, это все время). Однако он не просто «не работает»: до тех пор, пока я не попробую быстро изменить громкость любого канала (Master, Headphones), кроме PCM, звук работает, но когда я начинаю быстро менять громкость на указанных каналах, программа-миксер зависает, а mocp, например, начинает проигрывать звук дергано, как HD-видео на медленном соединении. Поиски и чтение форумов результатов не принесло, поэтому я решил замерить за сколько времени(с момента, когда ломается звук) amixer последовательно изменит громкость от нуля до 80%. Написал несложный скрипт, который это делал. Тест с работающим звуком:
plcmn@equestria:~$ time ./test.sh
real 0m0.743s
user 0m0.350s
sys 0m0.203s
plcmn@equestria~$ time test.sh
real 4m41.763s
user 0m0.607s
sys 0m12.037s
plcmn@equestria:~$ cat test.sh
export i=0
while [ $i -lt 80 ]
do
amixer set Master $i%
let i=$(($i+1))
done
Смотрится невероятно. Я полез в код alsa-utils. Я, конечно, даже не джуниор, но там ТАКОЙ код. При проверке кода alsa-lib с помощью cppcheck, я обнаружил, например
[src/mixer/simple_none.c:1661]: (error) Array 'simple.ctls[14]' accessed at index 14, which is out of bounds.
Весело, в общем. Но касательно моей проблемы я ничего не нашел, поэтому я полез делать нубодебаг, печатая в stderr время задержек между выполнением блоков инструкции, таким образом локализовав проблемную строчку:
// 430 amixer.c
err = vol_ops[dir].v[vol_type].set(elem, chn, val, correct);
// Которая вызывает
int snd_mixer_selem_set_playback_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value)
{
CHECK_BASIC(elem);
CHECK_DIR_CHN(elem, SM_CAP_PVOLUME, SM_CAP_PVOLUME_JOIN, channel);
return sm_selem_ops(elem)->set_volume(elem, SM_PLAY, channel, value);
}
// Из libasound
Задержка, измерявшаяся с помощью clock() (с использованием CLOCKS_PER_SEC) там составляла около 0.173488 мс. Real time было больше (около секунды-двух). Я понял, что придется лезть в alsa-lib, склонировал git, попробовал собрать, но не собирается. Пока что остановился на этом, пытаюсь собрать.
Если что-нибудь найду, обязательно напишу, по крайней мере, в багтрекер, а может (если смогу) и патч сделаю.
Почему я все это написал. Быть может кто-либо из лоровцев сталкивался с подобной проблемой и может подсказать мне в чем дело?
P.S. А ошибок cppcheck показал много, даже очень, незакрытые va_start(), null pointer dereference и прочие. Очень некрасивый код, там есть, например, реализация полиморфизма через указатели на фукнции, приплетен язык Python (alsa-lib из-за этого и не собирается, пока не знаю в чем проблема, ругается на несуществующего члена структуры, его там действительно нет, декларации нигде не нашел, комментирование строчки родило новые проблемы, поэтому это я пока оставил на потом) и прочие радости.
P.P.S. При перезагрузке со сломанным звуком (единственный способ решить проблему) в выводе показывается сообщение об ошибке связанное с аудио, точно не помню, могу, если кому интересно, посмотреть и сюда добавить. Даже при сломанном звуке chromium продолжает нормально играть и музыку и видео, а deadbeef, например, без проблем играет музыку. Но все прочее, что я пробовал (а пробовал я много, я даже pulseaudio ставил и пытался настроить, но последняя не видела выход для наушников, только hdmi, поэтому я ее удалил) не работало.
P.P.P.S. Забыл добавить, спасибо Khnazile за напоминание:
$ lspci -vv
00:01.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Kabini HDMI/DP Audio
Subsystem: Dell Device 0614
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin B routed to IRQ 40
Region 0: Memory at f0240000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [48] Vendor Specific Information: Len=08 <?>
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Express (v2) Root Complex Integrated Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0
ExtTag+ RBE+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0f00c Data: 4153
Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
--
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD] FCH Azalia Controller (rev 02)
Subsystem: Dell Device 0614
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 32, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 41
Region 0: Memory at f0244000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0f00c Data: 4163
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
$ aplay -l
plcmn@equestria:~/$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Generic_1 [HD-Audio Generic], device 0: ALC3223 Analog [ALC3223 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
No offense. Просто рассказываю про свой интересный опыт. :)
Всем добра и дружбомагии!
>>> Просмотр (1366x768, 481 Kb)