audigy se щелчки

добрый день. имеется звуковая карта audigy se. завелась нормально, звук есть. но при переключении треков в плейлисте происходит непрятный щелчок. вывожу через alsa. на просторах интернетов пишут об этом эффекте, но как излечить - не известно. для intel hd audio рекомендуют поставить опцию модуля power_save в 0, но у модуля этой карточки (snd_ca0106) такой опции нет. кто нибудь встречался с таким? есть идеи, как решить? неважно как, главное, чтоб не щелкало. может можно как нить заставить ее работать постоянно? заранее спасибо

У меня сейчас mpd на сервере

У меня сейчас mpd на сервере точно на такой же карте Audigy SE с модулем snd_ca0106 играет, никаких щелчков!
Более того, уже лет 5 работает, глюков не замечал.
Можно поинтересоваться, что за проигрыватель?

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

да не важен проигрыватель. и

да не важен проигрыватель. и в audacious, и в qmmp, и даже во флеш видео, когда на паузу ставлю, и снова play жму. такое ощущение, что в эти моменты карта отключается, потом опять включается. звук такой, как будто к джеку прикасаются. а через что пускаете звук? просто альса? щелкает не при проигрывании, а именно при смене трека, при паузе. в общем, в переходном состоянии между работает/не работает.

пс. http://yandex.ru/yandsearch?text=audigy+se+linux+%D1%89%D0%B5%D0%BB%D1%87%D0%BA%D0%B8&lr=213
проблема эта не нова. но как пофиксить - не ясно :(

vvviperrr написал(а): а через

vvviperrr написал(а):
а через что пускаете звук? просто альса?

просто альса.
когда-то давное ещё через esound, oss, но последняя вроде как через плагин альсы была.

а, с windows глюк был, да =)
винда не определяла звуковуху, нужно было полностью питание отрубать, потом включать, помню такое ))

плата побывала на 5-х материнках, нигде щелчков под Linux замечено мною не было, шо ж не везёт-то так мне =(

с alsamixer F5 пробовали играться?
alsa модулем или *?
у меня в ядре, если что...

zgrep -i snd /proc/config.gz | grep -v \#

CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_RAWMIDI=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_HRTIMER=y
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_VMASTER=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_RAWMIDI_SEQ=y
CONFIG_SND_AC97_CODEC=y
CONFIG_SND_PCI=y
CONFIG_SND_CA0106=y

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

alsamixer первым делом

alsamixer первым делом крутил. у меня тож чистая альса. больше крутить негде. альса вкомпилена в ядро. драйвер был модулем, смотрю у тя вкомпилен, пересобрал, эффекта не дало.
т.е у тебя при подаче звука за карту и при остановке вообще никаких побочных эффектов? не просто переключение треков, а прекратить подачу сигнала на карту, и возобновить. может ты просто их не замечаешь?
воткни колонки в розетку, возьми джек и прикладывай/отпускай его к пальцу, например. вот именно такие "щелчки". но проблема не в колонках. в наушниках тож самое.

vvviperrr

vvviperrr написал(а):
alsamixer первым делом крутил. у меня тож чистая альса. больше крутить негде. альса вкомпилена в ядро. драйвер был модулем, смотрю у тя вкомпилен, пересобрал, эффекта не дало.
т.е у тебя при подаче звука за карту и при остановке вообще никаких побочных эффектов? не просто переключение треков, а прекратить подачу сигнала на карту, и возобновить. может ты просто их не замечаешь?
воткни колонки в розетку, возьми джек и прикладывай/отпускай его к пальцу, например. вот именно такие "щелчки". но проблема не в колонках. в наушниках тож самое.

вообще никаких побочных эффектов за 5 лет, что только ни делал, alsa от 0.9хз_какая до 1.0.23 =(
эксперимент с прикладыванием пальца провёл, да, если бы так щёлкало, можно было бы вешаться =)

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

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

с двумя потоками проблем нет,

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

потестил щас, пустил в альсаплеере трек с минимальной громкостью (но не выключенной), в другом плеере щелчков нет. идеально просто. просто записать "тишину", и ее на цикл поставить? или как лучше эмулировать пустой поток?

http://despicere.blogspot.com/2009/12/blog-post.html
ну блин, альса виновата, инфа 100% :) вот тока у audigy se нет таких опций....

тока цикл нужно делать так,

тока цикл нужно делать так, чтобы следующий поток перекрывал предыдущий, как-то так

function noise60sec {
	(play noise_file &>/dev/null)&
}

while [ 1 == 1 ]; do
	noise60sec
	sleep 55 # чтобы перекрывал
done

костыль, канешн, но на первое время...

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

угу, я это понимаю.... хотя

угу, я это понимаю.... хотя попробую еще что нить придумать. все равно спасибо за ответы)

vvviperrr написал(а): угу, я

vvviperrr написал(а):
угу, я это понимаю.... хотя попробую еще что нить придумать. все равно спасибо за ответы)

как вариант, можно на /usr/src/linux/sound/pci/ca0106/ca0106.h наложить такой патч:

518c518
< #define ADC_POWER		0x0000000d	//ADC PowerDown Control
---
> #define ADC_POWER		0x00000000	//ADC PowerDown Control
631c631
< #define SPI_PDWN_REG		2	/* power down all DACs */
---
> #define SPI_PDWN_REG		0	/* power down all DACs */
633c633
< #define SPI_DACD0_REG		10	/* power down individual DACs */
---
> #define SPI_DACD0_REG		0	/* power down individual DACs */
642c642
< #define SPI_PWRDNALL_REG	10	/* power down everything */
---
> #define SPI_PWRDNALL_REG	0	/* power down everything */

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

наложил, принял ребилдол, не

наложил, принял ребилдол, не помогло

vvviperrr

vvviperrr написал(а):
наложил, принял ребилдол, не помогло

что ж за непруха, в слепую, сложно канешн, если б мог воспроизвести вашу ситуёвину, вот ещё вариант пропатчить ca0106_main.c

575,576c575,576
< 		chip->spi_dac_reg[reg] |= spi_dacd_bit[epcm->channel_id];
< 		snd_ca0106_spi_write(chip, chip->spi_dac_reg[reg]);
---
> 		/*chip->spi_dac_reg[reg] |= spi_dacd_bit[epcm->channel_id];
> 		snd_ca0106_spi_write(chip, chip->spi_dac_reg[reg]);*/
1827c1827
< 	struct snd_card *card = pci_get_drvdata(pci);
---
> /*	struct snd_card *card = pci_get_drvdata(pci);
1843c1843
< 	return 0;
---
> 	return 0;*/

если не поможет, то дело не в powersave, а где-нибудь тут, при остановке чипа и очистке памяти

static void ca0106_stop_chip(struct snd_ca0106 *chip)
{
        /* disable interrupts */
        snd_ca0106_ptr_write(chip, BASIC_INTERRUPT, 0, 0);
        outl(0, chip->port + INTE);
        snd_ca0106_ptr_write(chip, EXTENDED_INT_MASK, 0, 0);
        udelay(1000);
        /* disable audio */
        /* outl(HCFG_LOCKSOUNDCACHE, chip->port + HCFG); */
        outl(0, chip->port + HCFG);
        /* FIXME: We need to stop and DMA transfers here.
         *        But as I am not sure how yet, we cannot from the dma pages.
         * So we can fix: snd-malloc: Memory leak?  pages not freed = 8
         */
}

, тут

static int snd_ca0106_pcm_close_playback(struct snd_pcm_substream *substream)
{
        struct snd_ca0106 *chip = snd_pcm_substream_chip(substream);
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_ca0106_pcm *epcm = runtime->private_data;
        chip->playback_channels[epcm->channel_id].use = 0;

        restore_spdif_bits(chip, epcm->channel_id);

        if (chip->details->spi_dac && epcm->channel_id != PCM_FRONT_CHANNEL) {
                const int reg = spi_dacd_reg[epcm->channel_id];

                /* Power down DAC */
                /*chip->spi_dac_reg[reg] |= spi_dacd_bit[epcm->channel_id];
                snd_ca0106_spi_write(chip, chip->spi_dac_reg[reg]);*/
        }
        /* FIXME: maybe zero others */
        return 0;
}

или тут

static int snd_ca0106_pcm_close_capture(struct snd_pcm_substream *substream)
{
        struct snd_ca0106 *chip = snd_pcm_substream_chip(substream);
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_ca0106_pcm *epcm = runtime->private_data;
        chip->capture_channels[epcm->channel_id].use = 0;
        /* FIXME: maybe zero others */
        return 0;
}

нет подходящего образца платы для тестирования =(

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

пробовал каментить содержимое

пробовал каментить содержимое этих функций и пересобирать - не помогает. странно все это, если у тебя норм. попробую на другой матери потестить

чтот сейчас дошло, у меня

чтот сейчас дошло, у меня ванильное ядро? гентушное щас потестить не смогу. а у тебя какое?

vvviperrr написал(а): чтот

гентушное, но разницы нет, и с ванильным работало
что-то у меня сомнения... почему после комментов соответствующих функций ничего не изменилось, неприличный вопрос канешн, но после ребилдола make modules_install && modprobe -r ca0106 && modprobe ca0106 был, дело ночью было, мож случайно пропустили, не?
да, и если что, я не советовал их комментить... если что... ) только powersave

а до того может эта карточка ещё где-нибудь побывала, какие симптомы?

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

я дрова тестил уже не как

я дрова тестил уже не как модулем, а как встроенные в ядро. поэтому make clean && make && make modules_install. да и ядро на новое заменил естественно :) а карточка нигде пока не была, новая. но дело не в карте, вот у человека такая же проблема была
http://www.linux.org.ru/forum/linux-hardware/3572149
не решили.
да, не в курсе, что значит выводить звук через jack? та тема закрыта, уже, спросить не у кого... спасибо

а, ясно... через

а, ясно...
через jack:
media-sound/jack-audio-connection-kit
потом
jackd -d alsa
для теста можно прямо в плейере указать выход jack

Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!

vvviperrr написал(а): да, не

vvviperrr написал(а):
да, не в курсе, что значит выводить звук через jack? та тема закрыта, уже, спросить не у кого... спасибо

Jack Audio Connection Kit

а вообще вытащи карточку и хорошенько исследуй ее на предмет вздувшихся или плохо пропаянных электролитов ;) заводской серийный брак - это нормально ;)))))

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".