[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:18131] Re: alsautils_0.14.1



佐野@浜松です。

In <199910030216.LAA22093@xxxxxxxxxxxxxxxxxxx>,
 at Sun, 03 Oct 1999 11:13:52 +0900,
 on Re: alsautils_0.14.1,
  Fumihiko Murata <fmurata@xxxxxxxxxxxxxx> さん writes:

> えっと、amixer elements の結果を教えてもらえないでしょうか?

一般ユーザーでやったら

   $ amixer elements
   The ALSA sound driver was not detected in this system.

 root でやってみたら

   Element 'PC Speaker Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Route to element 'Input MUX',0,Mux2
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'PC Speaker',0,Input
     Route to element 'PC Speaker Volume',0,Volume1
     Voice 0: Mono
   Element 'Aux Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Route to element 'Input MUX',0,Mux2
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'Aux',0,Input
     Route to element 'Aux Volume',0,Volume1
     Voice 0: Left
     Voice 1: Right
   Element 'MIC Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Route to element 'Input MUX',0,Mux2
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'MIC',0,Input
     Route to element 'MIC Volume',0,Volume1
     Voice 0: Left
     Voice 1: Right
   Element 'FM Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Route to element 'Input MUX',0,Mux2
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'FM',0,Input
     Route to element 'FM Volume',0,Volume1
     Voice 0: Left
     Voice 1: Right
   Element 'CD Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Route to element 'Input MUX',0,Mux2
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'CD',0,Input
     Route to element 'CD Volume',0,Volume1
     Voice 0: Left
     Voice 1: Right
   Element 'Line Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Route to element 'Input MUX',0,Mux2
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'Line',0,Input
     Route to element 'Line Volume',0,Volume1
     Voice 0: Left
     Voice 1: Right
   Element 'PCM Volume',0,Volume1
     Route to element 'Output Accumulator',0,Accumulator1
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'Digital-Analog Converter',0,DAC
     Route to element 'PCM Volume',0,Volume1
     Resolution 16-bits
   Element 'Playback',0,Playback
     Route to element 'Digital-Analog Converter',0,DAC
     PCM device 0 0
   Element 'Master Volume',0,Volume1
     Route to element 'Master',0,Output
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'Master',0,Output
     Voice 0: Left
     Voice 1: Right
   Element 'Capture',0,Capture
     PCM device 0 0
   Element 'Analog-Digital Converter',0,ADC
     Route to element 'Capture',0,Capture
     Resolution 16-bits
   Element 'Input Gain Volume',0,Volume1
     Route to element 'Analog-Digital Converter',0,ADC
     Voice 0: Min 0 (-46.00dB), Max 15 (0.00dB)
     Voice 1: Min 0 (-46.00dB), Max 15 (0.00dB)
   Element 'Output Accumulator',0,Accumulator1
     Route to element 'Master Volume',0,Volume1
     Attenuation 0.00dB
   Element 'Input MUX',0,Mux2
     Route to element 'Input Gain Volume',0,Volume1
     Mux supports none input: YES
     Input element 'PC Speaker Volume',0,Volume1
     Input element 'Aux Volume',0,Volume1
     Input element 'MIC Volume',0,Volume1
     Input element 'FM Volume',0,Volume1
     Input element 'CD Volume',0,Volume1
     Input element 'Line Volume',0,Volume1

でした。よく見ると sound 関係のデバイス (/dev/dsp?, /dev/audio?, /dev/mixer? ...) 
などがみんな root.root になっていて、しかも普段使う一般ユーザーのアカウントに
 audio group を設定していなかったというのが原因みたいです。

 device file の group を audio にして、かつ permission 664 に設定したら
 xamixer は動くようになりました。でも gamix は Segmentation fault です。

Gnome 関係は全然使っていないので、設定とか準備とかできてない可能性高いですが。

なお、Debian パッケージの gamix をインストールし忘れたので、alsautils と
 xamixer はパッケージのもの、gamix は自分で make したものです。

一応 strace gamix した結果を眺めると

(snip)
    connect(3, {sun_family=AF_UNIX, sun_path="/tmp/.X11-unix/X0"}, 19) = 0
    uname({sys="Linux", node="yadon", ...}) = 0
    fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
(snip)
    open("/etc/gtk/gtkrc.ja", O_RDONLY)     = 4
    read(4, "style \"default\" {\n       fontset"..., 4000) = 216
    read(4, "", 4000)                       = 0
    close(4)                                = 0
    open("/Home/sano/.gamix/Config", O_RDONLY) = -1 ENOENT (No such file or directory)
(snip)
    write(3, "\20\0\6\0\r\0\300\4COMPOUND_TEXT\0\0\0", 24) = 24
    read(3, 0xbffff7ec, 32)                 = -1 EAGAIN (Resource temporarily unavailable)
    select(4, [3], NULL, NULL, NULL)        = 1 (in [3])
    read(3, "\1\0z\0\0\0\0\0\311\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0"..., 32) = 32
    gettimeofday({939045327, 609418}, NULL) = 0
    open("/dev/snd/mixerC0D0", O_RDWR)      = 4
    ioctl(4, RNDGETENTCNT, 0xbffff968)      = 0
    brk(0x8093000)                          = 0x8093000
    --- SIGSEGV (Segmentation fault) ---
    +++ killed by SIGSEGV +++

という感じで終っているようです。

   open("/dev/snd/mixerC0D0", O_RDWR)      = 4

という行は strace のログに 2 回現れているようなので、

 cflow main.c した時の

40      main {main.c 21}
41              probe_mixer {}

こっちのほうじゃなくて

79              gtk_timeout_add {}
80              disp_mixer ... {7}
81              gtk_main {}

こっちの disp_mixer の中にある

7               disp_mixer {main.c 157}
8                       gtk_hbox_new {}
9                       gtk_frame_new {}
10                      gtk_frame_get_type {}
11                      gtk_type_check_object_cast {}
12                      gtk_frame_set_shadow_type {}
13                      gtk_widget_show {}
14                      make_mixer {}

これの中で ( cflow mkmixer.c した時の )

 22              snd_mixer_open {}

これを実行した後で落ちているんじゃないかな。

と、ここまで調べてから、実は gamix が -g オプション付きで make されていた
ことに気がついて、 gdb で bt してみました。

(gdb) Starting program: /mnt/hda7/tmp/potato-make/chk/alsa-utils/test/alsa-utils-0.4.1/gamix/./gamix 

Program received signal SIGSEGV, Segmentation fault.
0x804b01e in disp_mixer () at main.c:190
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
(gdb) #0  0x804b01e in disp_mixer () at main.c:190
Cannot access memory at address 0x383836.

 break 189 して run 

Breakpoint 1, disp_mixer () at main.c:189
189                     for( i=0 ; i<card_num ; i++ ) {
(gdb) p i
$1 = 134770520
(gdb) n
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
(gdb) p i
$2 = 0
(gdb) p j
$3 = -1073743196
(gdb) p cards[0]
$4 = {info = {type = 11, hwdepdevs = 1, pcmdevs = 1, mixerdevs = 1, 
    mididevs = 1, timerdevs = 0, 
    id = "CARD_1\000\000\000\000\000\000\000\000\000", 
    abbreviation = "AudioDrive\000\000\000\000\000", 
    name = "ESS AudioDrive ES1688\000\000\000\000\000\000\000\000\000\000", 
    longname = "ESS AudioDrive ES1688 at 0x220, irq 5, dma 1", '\000' <repeats 35 times>, switches = 0, reserved = '\000' <repeats 127 times>}, 
  mixer = 0x8054af0}

(gdb) l
185                     }
186                     break;
187             case 1: /* V */
188                     mixer_container=gtk_vbox_new(FALSE,0);
189                     for( i=0 ; i<card_num ; i++ ) {
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
191                                     if( cards[i].mixer[j].enable ) {
192                                             cards[i].mixer[j].w=make_mixer(i,j);
193                                             if( !cards[i].mixer[j].w ) return -1;
194                                             gtk_box_pack_start(GTK_BOX(mixer_container),
(gdb) p cards[0].mixer
$5 = (s_mixer *) 0x8054af0
(gdb) p *(cards[0].mixer)
$6 = {handle = 0x0, groups = {groups_size = 9, groups = 9, groups_over = 0, 
    pgroups = 0x8054be0}, info = {type = 11, attrib = 0, 
    id = "ESx688", '\000' <repeats 25 times>, 
    name = "ESS AudioDrive ES1688", '\000' <repeats 58 times>, elements = 22, 
    groups = 9, switches = 0, reserved = '\000' <repeats 31 times>}, 
  group = 0x8054d08, ee_n = 1, ee = 0x8057130, w = 0x0, enable = 1, 
  enabled = 0, p_e = 1, p_f = 1}
(gdb) break 194
Breakpoint 2 at 0x804afdb: file main.c, line 194.
(gdb) cont
Continuing.

Breakpoint 2, disp_mixer () at main.c:194
194                                             gtk_box_pack_start(GTK_BOX(mixer_container),
(gdb) l
189                     for( i=0 ; i<card_num ; i++ ) {
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
191                                     if( cards[i].mixer[j].enable ) {
192                                             cards[i].mixer[j].w=make_mixer(i,j);
193                                             if( !cards[i].mixer[j].w ) return -1;
194                                             gtk_box_pack_start(GTK_BOX(mixer_container),
195                                                                               cards[i].mixer[j].w,TRUE,TRUE,0);
196                                     }
197                             }
198                     }
(gdb) p card_num
$7 = 1
(gdb) p cards[i].info.mixerdevs
Cannot access memory at address 0x38382e.
(gdb) p i
Cannot access memory at address 0x38382e.
(gdb) p j
$9 = 0
(gdb) p i
Cannot access memory at address 0x38382e.

もいっかい run

Starting program: /mnt/hda7/tmp/potato-make/chk/alsa-utils/test/alsa-utils-0.4.1/gamix/./gamix 

Breakpoint 1, disp_mixer () at main.c:189
189                     for( i=0 ; i<card_num ; i++ ) {
(gdb) n
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
(gdb) p i
$19 = 0
(gdb) p &i
$20 = (int *) 0xbffffa14

(gdb) n
191                                     if( cards[i].mixer[j].enable ) {
(gdb) n
192                                             cards[i].mixer[j].w=make_mixer(i,j);
(gdb) n

Breakpoint 2, disp_mixer () at main.c:194
194                                             gtk_box_pack_start(GTK_BOX(mixer_container),
(gdb) n
196                                     }
(gdb) n
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
(gdb) p i
Cannot access memory at address 0x38382e.
(gdb) p &i
$21 = (int *) 0x38382e

何故か内側のループを回る間に変数 i のアドレスが変更されてしまってますね。

もういっかい。

(gdb) watch &i
Hardware watchpoint 2: &i
(gdb) n
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
(gdb) n
#0  disp_mixer () at main.c:190
190                             for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
191                                     if( cards[i].mixer[j].enable ) {
(gdb) n
#0  disp_mixer () at main.c:191
191                                     if( cards[i].mixer[j].enable ) {
192                                             cards[i].mixer[j].w=make_mixer(i,j);
(gdb) n
#0  disp_mixer () at main.c:192
192                                             cards[i].mixer[j].w=make_mixer(i,j);
Error evaluating expression for watchpoint 2
Cannot access memory at address 0x383836.
Watchpoint 2 deleted.
0x804afbe in disp_mixer () at main.c:192
192                                             cards[i].mixer[j].w=make_mixer(i,j);
(gdb) p i
Cannot access memory at address 0x38382e.

 cards[i].mixer[j].w=make_mixer(i,j);

ここで変数 i のアドレスが変更されています。が、どうして変更されているのかは
わかりません。

ふと思いついて、Makefile を

CFLAGS = -g -O2 -I/usr/X11R6/include -I/usr/lib/glib/include
CFLAGS = -g -I/usr/X11R6/include -I/usr/lib/glib/include

として -O2 オプションを外したら、動くようになりました。

ii  gcc             2.95.2-0pre2   The GNU C compiler.
ii  g++             2.95.2-0pre2   The GNU C++ compiler.

です。

> あと、~/.gamix/Config も見せてください。

これは無い状態でやってます。

>  xlj06203> なんか今日 linux.debian.devel.changes 見てたら alsa 関係の
>  xlj06203> メンテナーが alsautils も新しいパッケージを出してそれが ftp サイトに
>  xlj06203>  install されたらしいので、そちらに乗り換えてみようかと思ってます。

> そうなですけど、gamix のバージョンナンバーが alsautils と同なんですけど、
> gamix 自体のバージョンはたぶん、1.00b5 なんだけどなぁ。
> #現在は 1.10 へ向けてバージョンアップ中

 Debian packge のほうの xamixer を使ったら

   Unable to open pixmap /usr/local/share/xamixer/pixmaps/icon3.xpm.
   Unable to open pixmap /usr/local/share/xamixer/pixmaps/mute3.xpm.
   Unable to open pixmap /usr/local/share/xamixer/pixmaps/unmute3.xpm.
   Unable to open pixmap /usr/local/share/xamixer/pixmaps/rec.xpm.
   Unable to open pixmap /usr/local/share/xamixer/pixmaps/unrec.xpm.
   Unable to open pixmap /usr/local/share/xamixer/pixmaps/simul.xpm.
   Unable to open pixmap /usr/local/share/xamixer/pixmaps/unsimul.xpm.

というエラーが出ました。自分で make したほうでは出なかったのに、
何故だろう ? Bug Report かな。

 Debian package の gamix はインストールし忘れていたので、また明日にでも
パッケージのソースを download するのと一緒にインストールしてみるつもりです。

以上、動作報告でした。

--
     # 11/13 に何かが起きる? > "http://www.szlug.factory.to";
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)