[sanniolug] Re: SBLive + ALSA + MIDI

  • From: Massimiliano Mirra <mmirra@xxxxxxxxx>
  • To: sanniolug@xxxxxxxxxxxxx
  • Date: Mon, 25 Aug 2003 18:53:59 +0200

Brix <brix82@xxxxxxxxx> writes:

>> Prova ad eseguire questo comando:
>> 
>> strace -o log pmidi -l
>
> le cose più interessanti che ottengo sono queste:

(Dopo aver sfxload'ato, suppongo.)

>
> [...]
> open("/dev/snd/seq", O_RDWR)            = 3

Hai il supporto per devfs?

----[ tuo log ]

ioctl(3, 0x80045300, 0xbffff7e4)        = 0
ioctl(3, 0x80045301, 0xbffff7e0)        = 0
brk(0)                                  = 0x804ce60
brk(0x804de60)                          = 0x804de60
brk(0)                                  = 0x804de60
brk(0x804e000)                          = 0x804e000
brk(0)                                  = 0x804e000
brk(0x8051000)                          = 0x8051000
brk(0)                                  = 0x8051000
brk(0x8052000)                          = 0x8052000
ioctl(3, 0xc0305302, 0xbffff840)        = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40012000
write(1, " Port     Client name           "..., 54) = 54
ioctl(3, 0xc0dc5310, 0xbffff93c)        = -1 ENOTTY (Inappropriate ioctl for 
device)
ioctl(3, 0xc0dc5310, 0xbffff93c)        = -1 ENOTTY (Inappropriate ioctl for 
device)
...
/* segue una sfilza di ioctl() a vuoto ... */
...
ioctl(3, 0xc0dc5310, 0xbffff93c)        = -1 ENOTTY (Inappropriate ioctl for 
device)
munmap(0x40012000, 4096)                = 0
_exit(0)                                = ?

----

Uhm.  Sembra che il problema sia a livello di scheda o di driver della
scheda, insomma di chiunque decida che quello è un `inappropriate
ioctl for device'.

Cosa leggi in /proc/pci a proposito della tua scheda?  Questo è quello
che vedo io:

  Bus  0, device  11, function  0:
    Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 4).
      IRQ 10.
      Master Capable.  Latency=32.  Min Gnt=2.Max Lat=20.
      I/O at 0xe800 [0xe81f].
  Bus  0, device  11, function  1:
    Input device controller: Creative Labs SB Live! MIDI/Game Port (rev 1).
      Master Capable.  Latency=32.  
      I/O at 0xec00 [0xec07].

E questo è il mio log di `strace -olog pmidi -l', non so se ti è utile
per cavarne fuori qualcosa.

----[ mio log ]
open("/dev/snd/seq", O_RDWR)            = 5
ioctl(5, 0x80045300, 0xbffff758)        = 0
brk(0x805a000)                          = 0x805a000
brk(0x805e000)                          = 0x805e000
ioctl(5, 0x80045301, 0xbffff718)        = 0
ioctl(5, 0x4040534e, 0xbffff96c)        = 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40014000
write(1, " Port     Client name           "..., 54) = 54
ioctl(5, 0xc0bc5351, 0xbffff904)        = 0
ioctl(5, 0xc0a45352, 0xbffff854)        = 0
ioctl(5, 0xc0a45352, 0xbffff854)        = 0
ioctl(5, 0xc0a45352, 0xbffff854)        = -1 ENOENT (No such file or directory)
ioctl(5, 0xc0bc5351, 0xbffff904)        = 0
ioctl(5, 0xc0a45352, 0xbffff7a4)        = 0
ioctl(5, 0xc0a45352, 0xbffff7a4)        = -1 ENOENT (No such file or directory)
ioctl(5, 0xc0bc5351, 0xbffff904)        = 0
ioctl(5, 0xc0a45352, 0xbffff6f4)        = 0
write(1, " 64:0     External MIDI 0       "..., 53) = 53
ioctl(5, 0xc0a45352, 0xbffff6f4)        = -1 ENOENT (No such file or directory)
ioctl(5, 0xc0bc5351, 0xbffff904)        = 0
ioctl(5, 0xc0a45352, 0xbffff644)        = 0
write(1, " 65:0     Emu10k1 WaveTable     "..., 59) = 59
ioctl(5, 0xc0a45352, 0xbffff644)        = 0
write(1, " 65:1     Emu10k1 WaveTable     "..., 59) = 59
ioctl(5, 0xc0a45352, 0xbffff644)        = 0
write(1, " 65:2     Emu10k1 WaveTable     "..., 59) = 59
ioctl(5, 0xc0a45352, 0xbffff644)        = 0
write(1, " 65:3     Emu10k1 WaveTable     "..., 59) = 59
ioctl(5, 0xc0a45352, 0xbffff644)        = -1 ENOENT (No such file or directory)
ioctl(5, 0xc0bc5351, 0xbffff904)        = 0
ioctl(5, 0xc0a45352, 0xbffff594)        = -1 ENOENT (No such file or directory)
ioctl(5, 0xc0bc5351, 0xbffff904)        = -1 ENOENT (No such file or directory)
munmap(0x40014000, 4096)                = 0
_exit(0)                                = ?

----


> Vorrei realizzare un "ear trainer", 

Interessantissimo!  Provai solfege, scritto in Python con la parte che
gestisce il MIDI in C, ma non mi piacque.  Cercavo degli esercizi per
l'orecchio musicale relativo, vari in una stessa tonalità, piuttosto
che intervalli a caso, insomma in do mobile, tipo i dettati melodici
del Pasteris o gli esercizi proposti sul metodo di Goitre.  (Uhm,
direi che puoi considerarla la tua prima feature request. ;-))

> solo che non posso con OSS perchè serve la versione commerciale.

Né ti conviene, visto che dal kernel 2.6 in poi è stato (finalmente)
adottato ufficialmente ALSA, e OSS è solo in emulazione.

> Opening /dev/sequencer ...
> 1 synths available
> 5 midi sequencers available
> 0 bytes written to /dev/sequencer
> Opening /dev/music ...
> 6 synths available
> 5 midi sequencers available
> error writing packet to /dev/music : Invalid argument
> Non ci ho capito nulla.

Vorrei poter dire diversamente.  :-\ Ma, vista anche la considerazione
di sopra, non ti conviene a questo punto sfruttare le API di ALSA?

> Tra l'altro ho provato ad installare rosegarden, e noto con
> [dis]piacere che riesce a suonarmi i files midi su
> /dev/sequencer. Boh!

<clueless>, sorry.  Ma ho visto di recente un thread su
it.comp.os.linux.software in cui si parlava degli stessi sintomi,
forse trovi qualcosa di utile lì.


-- 
Tip | [DEBIAN] Replicare una installazione:
of  | # dpkg --get-selections > list.txt # Esporta la lista dei pacchetti
the | # dpkg --set-selections < list.txt # Importa sulla nuova Debian
day | # apt-get dselect-upgrade          # Installa pacchetti nella lista
0024| (Il primo "#" rappresenta il prompt di root)

Other related posts: