Emuladors MAME amb Linux

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

referències

marcianitos.org, web de referència a l'estat, va tancar el 2009, però encara està disponible l'històric del fòrum:

BD sobre ROMs i dependències

jocs populars

(classificació segons dues llistes. Amb signe + aquells que surten repetits en les dues llistes)

Una altra llista:

Categories de jocs d'Arcade

Una altra manera de categoritzar:

Adventure; Arcade; Casino; Fighting; Flying; Misc; Multiplayer; Pinball; Platform; Puzzle; Racing; Shooting; Sports; Strategy

en aquest enllaç també tinc una llista dels 50 millors jocs, i una bd molt extensa classificada per categories, fabricant, any. Quant a la categoria platform, un bon representant és el Donkey Kong, per ex.

És interessant considerar la categoria flying, i concretament es distingeix entre flying horizontal i flying vertical.

El que jo dic marcianitos és la categoria shooter i gallery (molts jocs entren en dues categories, i he de considerar ampliar la meva classificació a dues categories).

Descàrrega de ROMs

A part dels ROMs que es poden aconseguir per eMule, en aquest enllaç es poden descarregar les ROMs:

i diuen que estan actualitzades. Ho dic perquè tinc moltes ROMs que no arranquen (The selected game is missing on ore more required ROM or CHD images), i això és perquè són versions de ROMs antigues que la meva versió de mame (sdlmame -h) no suporta. Per exemple, mirar si el joc 1942 descarregat d'aquí sí que funciona.

$ sdlmame -h
M.A.M.E. v0.136 (Apr  5 2010) - Multiple Arcade Machine Emulator
Copyright Nicola Salmoria and the MAME Team
...
The selected game is missing on ore more required ROM or CHD images
...
it sounds like you're using an outdated rom set
Nice. Thanks guys! I got updated ROMs and things are working well now.

Ja he aconseguit fer funcionar el joc 1942. De la pàgina http://www.rom-world.com/dl.php?name=MAME veig que hi ha 3 sets (3 versions) per a 1942. Una d'elles sí que funciona, i puc comprovar quina és directament amb sdlmame. Per a wahcade encara no funciona, només m'apareix una versió de 1942. El que he de fer és a wahcade-setup editar la playlist:

I així hauré d'anar fent per a tots els jocs que no funcionen, aconseguir tenir una llista fiable i depurada.

Tinc un ROM Set que la majoria dels jocs no van. La solució és doble. El primer és descarregar les ROM Bios que no tinc de:

El segon és fer un informe de tots els jocs que no van, i mirar si substituint-los pel zip que trobo a

o a un altre lloc ja funciona.

Llocs on trobar ROMs:

Puc verificar si una ROM funciona o no:

$ mame -verifyroms galaga
galaga      : gg1_1b.3p (4096 bytes) - NOT FOUND
galaga      : gg1_2b.3m (4096 bytes) - NOT FOUND
galaga      : gg1_4b.2l (4096 bytes) - NOT FOUND
galaga      : gg1_5b.3f (4096 bytes) - NOT FOUND
galaga      : gg1_7b.2c (4096 bytes) - NOT FOUND
galaga      : prom-4.2n (256 bytes) - NOT FOUND
galaga      : prom-3.1c (256 bytes) - NOT FOUND
galaga      : prom-1.1d (256 bytes) - NOT FOUND
galaga      : prom-2.5c (256 bytes) - NOT FOUND
galaga      : 51xx.bin (1024 bytes) - NOT FOUND
galaga      : 54xx.bin (1024 bytes) - NOT FOUND
romset galaga is bad
1 romsets found, 0 were OK.

$ mame -verifyroms galaga3
galaga3     : gp3-4c.8d (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp3-3c.8c (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp3-8b.11d (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-7.11c (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp3-6b.11b (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-1.4b (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-11.11p (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-10.11n (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-12.11r (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-9.11m (8192 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-3.1p (256 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-1.1n (256 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-2.2n (256 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-7.6s (256 bytes) - NOT FOUND (shared with parent)
galaga3     : gp2-4.3f (256 bytes) - NOT FOUND (shared with parent)
galaga3     : 62xx.bin (2048 bytes) - NOT FOUND (shared with parent)
romset galaga3 [gaplus] is bad
1 romsets found, 0 were OK.

espera trovar aquests fitxers, i realment mirant què hi ha dins dels fitxers galaga.zip no té res a veure

En canvi, un joc que sí funciona:

$ mame -verifyroms pacplus
romset pacplus is good
1 romsets found, 1 were OK.
<pre>
I això pot donar peu a fer informes de ROMs que no funcionen:
<pre>
$ mame -verifyroms pac* > verify.txt
$ mame -verifyroms * > verify.txt

ROM Bios

són les ROMs que no representen un joc, sinó una màquina concreta i són necessaris per que funcionin els jocs d'aquella màquina, per exemple Neo Geo.

The systems that require BIOS files are (as of MAME 0.79):

   * Arcadia System (ar_bios) *
   * CVS (cvs)
   * DECO Cassette System (decocass)
   * MegaPlay (megaplay) *
   * Megatech (megatech) *
   * Neo-Geo (neogeo) *
   * Nintendo Super System
   * Nintendo Playchoice-10 (playch10)
   * Nintendo Super System (nss)
   * Polygame Master (pgm)
   * ST-V (stvbios)
   * Super Kaneko Nova System (skns)
   * System GX (konamigx)
   * Taito FX1 (taitofx1)
   * TPS (tps)
   * ZN1 (zn1)
   * ZN2 (zn2)
   * System GX (konamigx)
   * Konami System GX (in konamigx.zip)

Les ROM Bios es poden obtenir de varis llocs. Per ex,

MAME BIOS (0.131)
Acclaim PSX 	acpsx.zip
Aleck64 PIF BIOS 	aleck64.zip
American Laser Games BIOS 	alg_bios.zip
Amiga CD 32 Bios 	cd32.zip
Arcadia System Bios 	ar_bios.zip
Atari PSX 	atpsx.zip
Atari System 1 BIOS 	atarisy1.zip
Atlus PSX 	atluspsx.zip
Atomiswave Bios 	awbios.zip
Baby Phoenix/GV System 	konamigv.zip
Chihiro Bios 	chihiro.zip
Crystal System BIOS 	crysbios.zip
Deco Cassete System 	decocass.zip
Galaxy Games (BIOS v1.90) 	galgbios.zip
Hikaru BIOS 	hikaru.zip
Hyper Neogeo 64 Bios 	hng64.zip
Konami Viper BIOS 	kviper.zip
MPU4 Video Firmware 	bctvidbs.zip
Max-A-Flex 	maxaflex.zip
Megaplay Bios 	megaplay.zip
Megatech Bios 	megatech.zip
Multi Amenity Cassette System 2 BIOS 	mac2bios.zip
Multi Amenity Cassette System BIOS 	macsbios.zip
Naomi 2 Bios 	naomi2.zip
Naomi Bios 	naomi.zip
Naomi Ferrari F355 Challenge BIOS 	f355bios.zip
Naomi GDROM BIOS 	naomigd.zip
Naomi House of the dead 2 BIOS 	hod2bios.zip
Neo-Geo 	neogeo.zip
Neo-Geo (Pre 0.127.6 set + Other Emus) 	neogeo_old.zip
Nintendo Super System BIOS 	nss.zip
PGM (PolyGame Master) BIOS 	pgm.zip
PS Arcade 95 	psarc95.zip
PlayChoice-10 BIOS 	playch10.zip
ST-V Bios 	stvbios.zip
Super Kaneko Nova System BIOS 	skns.zip
Konami System 573 BIOS 	sys573.zip
Konami System GX 	konamigx.zip
TPS 	tps.zip
Taito FX1 	taitofx1.zip
Taito GNET 	taitogn.zip
Triforce Bios 	triforce.zip
Video System PSX 	vspsx.zip
Capcom ZN1 	cpzn1.zip
Capcom ZN2 	cpzn2.zip

Sortosament, després de copiar les ROM Bios, veig que ara la majoria dels jocs sí que funcionen. De totes maneres el joc Galaga i Galaga3 (són dels favorits) encara no he aconseguit fer-los funcionar. Clar que em pensava que era de Neo Geo i sembla ser que no (la informació es pot cercar per exemple a http://maws.mameworld.info/maws/)

Nota: és possible que part dels meus problemes es solucionin amb els fitxers CHD que també són necessaris per a alguns jocs.

Descàrrega aMule

i similars cercar en el aMule MAME 0.141

Emulador amb Linux

MAME: Multiple Arcade Machine Emulator

nota: veure més avall la solució correcta

Descarrego la última versió (multiplataforma): mame0141s.zip

Gmame: blog sobre MAME amb Linux/Ubuntu

$ sudo apt-get install libgtk2.0-dev

En el synaptic instal.lo el paquet xmame-common, que alhora instal.la el paquet xmame-sdl, i també xmame-x i xmame-tools

Informació sobre xmame-common, xmame-x:

Mame is an arcade machine emulator: it includes a Z80, 6502 and
lastly I86 uP emulators, joined to several arcade machine hardware
emulators. Each arcade emulator contains a full description about
hardware, mem maps, video, sounds and so, making possible that if
you have original ROM images of a supported arcade game, you can
play the game.

You NEED the rom images to play a game: this is not a game
emulator, just an arcade machine one.

This package provides files common to all versions of the emulator.
To get the actual emulator, install one or more of
xmame-x, xmame-svga or xmame-sdl.

xmame-sdl:

SDL binaries for the Multiple Arcade Machine Emulator

És a dir, que el MAME és un emulador d'una màquina Arcade (per exemple, inclou un emulador de Z80). Per jugar ens falten les ROM, que és pròpiament l'emulador del joc.

Hi ha ROMs lliures i d'altres que no. Les ROMs es poden treure de:

i una llarga llista de ROMs:

millor fer servir aMule

llegeixo la FAQ de http://mamedev.org/:

Once I get the game ROMs, where do I put them?

Put them in the "roms" subdirectory of your main MAME directory. You do not need to uncompress the ZIP files.
<pre>
Però això no cal fer-ho. Finalment, ja puc fer la primera partida, arrencant en línia de comandes:
<pre>
$ ./xmame.SDL /home/joan/MAME/ROMs/sidetrac.zip

podria fer:

$ sudo gedit /etc/xmame/xmamerc
i ficar el directori on tinc les ROMs:
rompath /home/user/games

Tanmateix, no aconsegueixo fer funcionar el joc amb gmameui (veure méa avall la GUI)

Llegeixo (tutorial how-to del juny de 2010):

sembla ser que xmame està mort i el que es porta ara és sdlmame

sdlmame (solució correcta: NO!)

Instal.lo els paquets sdlmame i sdlmame-tools (i elimina els paquets relacionats amb xmame)

El sdlmame funciona de la següent manera en mode consola:

$ ./sdlmame -rompath /home/joan/MAME/ROMs sidetrac

tot i que va molt lent de velocitat (mirar)

configuració

Fitxers de layout

En la pàgina http://www.mameworld.info/ podem descarregar els fitxers layouts i el zip que inclou les imatges de marquees, bezels i overlays. Ara bé, què he de fer amb això? On he de posar el fitxer .lay per veure el Bezel? Veure més endavant

mame a pèl (solució correcta, que és de fet sdlmame)

El problema ve de què hi ha molts jocs que no em funcionen, com el Galaga i Galaga3, i comprovo les versions de què tinc instal.lat.

$ sdlmame
Build version:      0.136 (Apr  5 2010)

el sdlmame l'havia instal.lat amb sudo apt-get install sdlmame,

i ara, maig 2011, van per MAME 0.142u3 (com veig a mamedev.org)

sdlmame ha de tenir el mateix versionat que mame, doncs és un paquet dummy.

sdlmame for Ubuntu:

D'aquí descarrego la última versió per a Ubuntu 11.04 Natty (10th May 2011): mame_0.142u3-0ubuntu1~ppa3~natty_i386.deb (fixar-se si estem a 32 o 64 bits). També hi ha el source per si el vull compilar.

$ sudo apt-get -f install -> per resoldre els paquets trencats (he tingut problemes)
$ sudo apt-get autoremove

Primer de tot he de baixar i instal.lar el paquet mame-common: (disposo de paquets debian per a fer tot el que ve ara. M'he de fixar molt en la correspondència de versions)

$  sudo dpkg -i mame-common_0.142u3-0ubuntu1~ppa1~lucid_all.deb

i ara ja puc instal.lar el mame

$ sudo dpkg -i mame_0.142u3-0ubuntu1~ppa1~lucid_amd64.deb (la màquina on estic fent les proves és de 64 bits)

(És molt important que coincideixi les versions entre mame-common i mame. Per exemple, en el nostre cas, 0.142u3 per a lucid)

i finalment el paquet sdlmame, que no s'encarrega del mame, sinó del SDL (cagada!!)

$ sudo apt-get install sdlmame

però l'he cagat instal.lant el paquet sdlmame

$ mame -v
Parsing mame.ini
Parsing mame.ini
Build version:      0.136 (Apr  5 2010)

Per tant, torno a desinstal.lar-ho tot, instal.lo mame-common i mame, i ara sí que tinc la versió correcta:

$ mame -v
Parsing mame.ini
Parsing mame.ini
Build version:      0.142u3 (May  9 2011)
$ mame

no puc jugar perquè no està configurat el rompath

$ sudo joe /etc/mame/mame.ini 

edito el rompath (o bé millor fico les rom's a $HOME/.mame/roms, que és el que es suggereix)

Així doncs no instal.lo sdlmame, i no em cal perquè la meva GUI és el wah!cade. Tot funciona com abans. La mala notícia és que ara que treballo amb la última versió (0.142) continuen sense funcionar molts joc com el Galaga.

conclusió: no necessito per a res sdlmame. Treballo directament amb mame com a motor (emulador) i wah!cade com a interfície. Ara bé... els paquets aquests me'ls he descarregat de sdlmame4ubuntu (http://sdlmame.wallyweek.org/download/), i per tant els paquets .deb són els oficials de MAME + la funcionalitat SDL. Per tant, sí que estic treballant amb sdlmame. El que no he de fer és instal.lar el paquet sdlmame de synaptic.

També puc instal.lar les mametools:

$ sudo dpkg -i 	mame-tools_0.142u3-0ubuntu1~ppa1~lucid_amd64.deb

MAME front-end

i ara necessito un front-end per a GNome

sdlmame

sdlmame ja és de per si un front-end. Es tracta d'editar el fitxer mame.ini que está a /etc/sdlmame. El primer és afegir el rompath: $HOME/MAME/ROMs. Ara he d'aconseguir que vagi lleuger.

Sempre s'ha de fer Configure General Inputs, doncs la majoria dels jocs tenen els mateixos controls

#
# VIDEO OPTIONS
#
video                     opengl -> software?
numscreens                1   
window                    0   
keepaspect                1   
unevenstretch             1   
effect                    none
centerh                   1
centerv                   1
waitvsync                 0

Fixem-nos que són les mateixes opcions que en el gmameui

De moment la clau entre anar ràpid o lent és el video mode: opengl vs software

gmameui

gmameui (que és un fork de l'extint Gxmame)

No totes les configuracions són vàlides. Funciona molt bé. Tanmateix jo vull un front-end que quan arrenqui em proporcioni una pantalla completa i la funcionalitat d'un joc Arcade. Això ho aconseguiré amb wahcade.

Opcions GmameUI:

Display > Video
Video mode: software
run in window: no
maximize y
keep aspect ratio y
allow uneven xtretching y
centre: H y, V y
reduce tearing effects: y

Display > Vector
antialias y
beam width 1.0
flicker 1.0

OpenGL
filter n
prescale 1
disable opengl gl_ARB_texture_rectangle y
force power of two textures n
enable opengl VBO y
enable opengl GLSL n -> aquest és el factor que fa que si trio OpenGL en comptes de software queda molt ralentit fins al punt de no poder jugar.
no filter
let opengl manage brightness and contrast y

performance
automatic frameskip y
throttle y
sleep y
speed 1.0
refresh speed y
enable multithreading y
show FPS n

Coses a considerar: clarament video mode software té més bon rendiment que video mode Open GL. Ara bé, tinc ben instal.lats els drivers de la ATI? Clar que en mode software per defecte no tinc antialias. Vull efecte antialias? Ara bé, amb OpenGL no puc deshabilitar l'efecte antialias. Clar que hauria de tenir instal.lat el ATI Control Center. Les proves que de moment he fet em donen un rendiment millor per al mode software, i l'efecte antialias no hauria de ser necessari si vull emular jocs dels anys 80. Estic provant-ho amb el joc Phoenix.

Totes aquestes opcions han de tenir traducció en el fitxer mame.ini.

Wah!Cade (solució correcta)

Wah!Cade. A GNU/Linux friendly clone of Minwah's excellent MameWAH. It's a front end for games and emulators (e.g. the M.A.M.E. arcade game emulator), and has been designed with arcade cabinet controls & projects in mind. The source code is released under the GNU GPL license.

Requirements

    * python >= 2.4
    * pygtk2 >= 2.8
    * elementtree (included in python 2.5)
    * chardet python module (text encoding detection)
    * python imaging library (optional; required for image rotation in layouts)
    * gstreamer (optional; required for video & music playback)
    * pygame (optional; required for joystick support)

hi ha un paquet Debian, que es descarrega: wahcade_0.99pre8_all.deb. Però abans d'instal.lar-lo he de mirar els requeriments.

$ python --version
Python 2.6.5

Després de resoldre els requeriments, arrenca bé, però primer s'ha de configurar el wahcade-setup, que és on li dic on estan les ROMs, configuració de video, etc.

$ wahcade (arrenca però no puc fer res)
$ wahcade-setup

la idea és agafar el fitxer de configuració mame.ini directament del sdlmame. I el que es configura en el setup són aspectes més de disseny del front-end, i a on estan les llistes de roms. (però compte! que el fitxer mame.ini que es llegeix està a ~/.wahcade/ini/mame.ini, i hi ha d'altres configuracions .ini. mame.ini significa que el emulador és el M.A.M.E., però wahcade pot treballar amb altres emuladors (que a mi no m'interessen). Per canviar d'emulador, per defecte és la tecla 4.

Una cosa bona és que podem tenir llistes predefinides de jocs.

el tema és... quants botons necessito per tenir un front-end totalment funcional i poder navegar per tots els jocs i fer play-lists?

Les tecles principals del wahcade-setup són:

Amb 4 tecles i les del cursor hauria de ser suficient, tant per al fron-end com per als jocs. Una tecla obligatòria és la next gamelist (la 3 o la tecla a la que ho associo), doncs la classificació dels jocs vindrà donada per llistes.

Les llistes de joc estan a la pestanya Emulator:

amb aquesta configuració l'usuari va triant de forma dinàmica una llista básica i funcional. Les llistes estan a ~/.wahcade/files. La idea és crear una llista a wahcade-setup, i encara que allà es podria editar, és un engorro. Copiem mame-0.lst a mame-1.lst, mame-2.lst,... i editem les roms que volem (hi ha 11 línies en blanc entre joc i joc, el parsejat correcte importa).

Una altra cosa és comprovar que els jocs funcionin i siguin correctes.

En ppi per manipular el front-end n'hi ha prou amb les següents tecles: up, down, right, left, 1 (launch game, menu select), 2 (menu show, menu back), 3 (next gamelist). Una altra possibilitat és la tecla TAB, que dóna accés a la funcionalitat sdlmame (o millor amagar aquesta funcionalitat?)

amb un joystick i quatre botons ha de ser més que suficient.

Hi ha bastant de lio amb el layout que ha de sortir a la pantalla ppal. Una possibilitat és ficar

Finalment ja veig com s'ha de fer perquè surti una imatge del joc. A Emulator > Artwork#1 apunto al directori on tindré les imatges dels jocs: /home/joan/MAME/ROMs/artwork. Ara només em falta trobar les imatges dels jocs.

Aplicació per modificar el layout

$ wahcade-layout-editor

trobo bastants recursos d'artwork, fins i tot vectorial:

artwork i fitxers de layout (.lay)

En el fitxer mame.ini estan definides les Core Search Path Options.

#
# CORE SEARCH PATH OPTIONS
#
rompath                   $HOME/MAME/ROMs;/$HOME/.mame/roms;/usr/local/share/games/sdlmame/roms
samplepath                $HOME/.mame/samples;/usr/local/share/games/sdlmame/samples
artpath                   $HOME/.mame/artwork;/usr/local/share/games/sdlmame/artwork
ctrlrpath                 /etc/sdlmame/ctrlr
inipath                   /etc/sdlmame
fontpath                  /tmp;/usr/share/games/sdlmame
cheatpath                 $HOME/.mame/cheat;$HOME/.mame/cheat/cheat;/usr/local/share/games/sdlmame/cheat;/usr/local/share/games/sdlmame/cheat/cheat
crosshairpath             $HOME/.mame/crosshair;/usr/local/share/games/sdlmame/crosshair

Per tant, els fitxer .lay i les imatges associades, que està tot empaquetat en un zip que em puc descarregar de la pàgina de artwork, els he de ficar a $HOME/.mame/artwork o bé /usr/local/share/games/sdlmame/artwork

I en principi ja està, funciona. Una altra cosa és buscar la millor configuració del fitxer .lay segons la meva pantalla. ara estic fent proves amb la pantalla apaisada del portàtil, i no és el millor sistema per a fer proves.

Si en comptes del zip descomprimeixo la carpeta també funciona.

De tots els elements que hi ha en el fitxer arkanoid.lay (llegir la documentació), he de distingir entre els <elements /> (definició dels elements: overlay, bezel,...) i <view /> (com es veuen els elements). De les diferents parts que tenen les vistes, el que m'interessa més es el <screen />, doncs representa pròpiament la pantalla del joc

		<screen index="0">
           		<bounds x="416" y="142" width="1168" height="876" />
		</screen>

Com podem veure, tenim definides les dimensions (i per tant proporció) i el offset (tenint en compte que hi ha un bezel). Allò normal serà treballar amb una pantalla de resolució 4:3 (1024x768 hauria de ser un estàndar, no?), o potser (1152x864). He de tenir en compte que el fet de què hi hagi un bezel fa que no pugui aprofitar al màxim tota la pantalla.

El artwork del Mame Arcade està pensat per a configuracions de pantalles de 4:3. Jo, amb el portàtil (16:9) he de configurar la pantalla a 4:3 per tal d'aprofitar al màxim la pantalla, encara que es vegi deformat. Clar que el desavantage d'utilitzar els fitxers .lay és que es mengen una part de la pantalla.

salvapantalles de video amb wahcade

  1. salvapantalles de video extern. Una possibilitat és:
$ mplayer /mnt/disc_test/home/joan/videos_maria/video_6c.avi
$ sudo joe /usr/share/applications/screensavers/movie.desktop
[Desktop Entry]
Encoding=UTF-8
Name=Movie
Comment=Plays Videos
TryExec=movie.sh
Exec=movie.sh
StartupNotify=false
Terminal=false
Type=Application
Categories=Screensaver;
OnlyShowIn=GNOME;
$ sudo joe /usr/lib/gnome-screensaver/gnome-screensaver/movie.sh
#! /bin/bash

## setup MPlayer aruments, remove -nosound if you want the video
## to play sound. If you have to specify the video driver to use
## then add that to the list
MPLAYERARGS="-nosound -nolirc -wid $XSCREENSAVER_WINDOW -nostop-xscreensaver -fs -really-quiet"

## add videos to this list, one will be chosen and played, note
## that wild cards can be used here
VIDEOS=( "/mnt/disc_test/home/joan/videos_maria/video_6c.avi" 
        /mnt/disc_test/home/joan/videos_maria/*avi)

## child pid, no need to modify
CPID=0

## we handle SIGTERM and SIGINT here to kill the child
## if active then quit.
function ex {
    if [ $CPID -gt 0 ] 
    then
	kill -s 9 $CPID
    fi
    exit 0
}
trap ex SIGINT SIGTERM

## loop while video list is not empty
while [ ${#VIDEOS[*]} -gt 0 ] 
do
    ## pick a random video
    VIDEO=${VIDEOS["$RANDOM % ${#VIDEOS[*]}"]}

    ## play video
    mplayer $MPLAYERARGS "$VIDEO" &
    CPID=$!
    ## wait for video to finish
    wait $CPID
    ## if things went wrong then exit
    if [ $? -ne 0 ]
    then
	exit 1
    fi
    CPID=0
done
$ sudo chmod 755 /usr/lib/gnome-screensaver/gnome-screensaver/movie.sh

El screensaver del Ubuntu es diu gnome-screensaver. Per tant, en la configuració del wahcade he de dir que l'aplicació externa de screensaver sigui gnome-screensaver, que s'ha de triar en les preferències movie (perquè el nom del fitxer li he dit movie.desktop). Ara bé, de fet no caldria fer això. Senzillament com a screesaver extern he de ficar l'execució del script: /usr/lib/gnome-screensaver/gnome-screensaver/movie.sh, i així de fet m'estalvio un pas.

tips wahcade

vull que surti el nom del joc i no el nom del fitxer de la ROM:

Q: My list of MAME games is showing up, but it shows the rom name only, and not the actual title of the game?

A: Change the list_generation_method to rom_folder_vs_listxml (for recent versions of MAME) or rom_folder_vs_listinfo (for older versions) 

aquesta opció la fico en el wahcade-setup, o bé editant el fitxer :~/.wahcade/ini/mame.ini (o potser sdlmame.ini):

list_generation_method                  rom_folder_vs_lisxml

En qualsevol cas, el fitxer XML l'hauré d'editar jo i ha d'estar dins del directori on estan les ROM

Ja veig com va: en el folder ~/.wahcade/files hi ha un fitxer per a cada playlist. Per exemple, mame-0.lst és All Games. Cada joc són 13 files, dels quals la primera és el nom de la ROM i la segona el títol del joc. Amb això en tinc prou per fer una llista de tots els jocs. (I això és deixant a List Generation Method = ROM)

tecles wahcade

Estic limitat a 6 botons + joystick. El keybinding és fàcil, s'ha d'eliminat tot allò superflu en el wahcade-setup. Queda de la següent manera (fer-ho en el wahcade-setup, o recordar quin és el fitxer de configuració):

3: Next Gamelist -> 6
4: Next emulator -> l'he de treure
5: Previous Gamelist ->  l'he de treure
6: Previous emulator -> l'he de treure
Right: down 1 letter -> Right
F: down 1 page -> 5
Left: up 1 letter -> Left
R: up 1 page -> 2
ESC: Exit to Windows -> 3
1: Launch game -> 1
2: Menu Show. Aquest és el que em fa un lio: el trec -> l'he de treure
Shift_L Random Game -> 4

script per arrencar i apagar wahcade en l'inici del sistema

arrencar wahcade en l'inici de sistema i apagat automàtic en acabar l'aplicació. Que no calgui fer-ho com a sudo (o fer-ho com a sudo sense demanar password). I que hi hagi un mode debug que faci que puguis entrar en el SO. Hi ha dues maneres explicades a:

Per poder fer shutdown sense demanar password és molt fàcil:

Editem el fitxer /etc/sudoers, i afegim al final de tot:

joan ALL = NOPASSWD: /sbin/shutdown
o bé
%admin ALL = NOPASSWD: /sbin/shutdown

Podem fer sudo shutdown now i no demana el password.

El script per escollir en arrencar el sistema entre dues aplicacions (sdlmame(jukebox) seria similar a (acabar):

#!/bin/bash

#faig que qualsevol pendrive que introdueixi a /dev/sdc1 sempre es digui igual (la unitat p està definida a /etc/mtools.conf)
sudo /usr/bin/mlabel p:JUKEBOX
sleep 2

function mame_arcade(){
clear

#echo "Choose one of the following options:" 
#echo "===================================" 
echo
echo
echo
echo
echo
echo
echo
echo

echo "[1]. MAME Arcade"
echo "[2]. Jukebox"
echo "[3]. SO"
echo "[4]. shutdown"
echo

if read -t 3 -n1 opcio; then
sleep 1
case "$opcio" in

  "1" )
  echo
  echo "MAME Arcade"
  #gcalctool
  wahcade
  mame_arcade
  ;;

  "2" )
  echo
  echo "Jukebox"
  #system-config-printer-applet --no-tray-icon
  gnome-terminal --tab-with-profile=defecte  --disable-factory --geometry=100x100 -e 'python /home/joan/Baixades/PyTone-3.0.3/src/pytone.py "$@"'
  mame_arcade
  ;;

  "3" )
  echo
  echo "Ubuntu OS"
  exit 0
  ;;

  "4" )
  echo
  echo "shutdown"
  sudo shutdown now
  ;;

esac

else  
  echo "MAME Arcade"
  #gcalctool
  wahcade
  mame_arcade
fi
}

#-----------------------------------------------

clear

mame_arcade

exit 0

Fiquem aquest script que arrenquui en l'inici del sistema.

I podem ficar en el script una mica d'ASCII art, com ara:

  \----------------------------------\ 
   \                                  \       | \                             
    >    MAME ARCADE                   >------|  \
    /                                 /       --- \_____/**|_|_\____  |
   /----------------------------------/         \_______ --------- __>-}
                                                   /  \_____|_____/   |
                                                   *         |
                                                            {O}

I com ho poso tot això en l'inici del sistema? Doncs invocant aquest script des del gnome-terminal. A més, el gnome-terminal té opcions interessants, com la geometria de la finestra, amagar el menu, o carregar el gnome-terminal amb un perfil (que a més pot incloure una imatge de fons):

$ gnome-terminal --hide-menubar --geometry=80x60 -t "MAME" --window-with-profile=MAME -e /home/joan/mame_arcade.sh

Mirar en l'opció --geometry els valors que s'ajusten a la meva pantalla (no és un valor amb pixels).

Per al jukebox utilitzo l'opció --disable-factory per tal de què quan arrenqui el jukebox no arrenqui de seguida el MAME, sinó que el prompt espera a què apagui el jukebox.

En definitiva això el que fa és executar el script /home/joan/mame_arcade.sh des de un gnome terminal que té determinades opcions. Tot aquest carro l'he de ficar en els scripts que s'executen en l'inici del sistema, que quedaria de la següent manera:

$ gnome-terminal --tab-with-profile=MAME --hide-menubar --geometry=100x100 -t "MAME" -e /home/joan/mame_arcade.sh

Per tant, he de crear dos perfils: MAME (amb fons de pantalla), i defecte (basat en predeterminat, fons de pantalla negra i lletra blanca, buscar els millors colors), per al Jukebox.

Nota: Bash replacement of getchar

Al principi el script el tenia com a:

if read -t 3 opcio; then

i això significa que després de triar l'opció has de clicar Enter. Ara bé, no hi ha cap tecla en el control panel que dongui Enter, no és una opció vàlida. Per tal que quan apreti la tecla automàticament ja estigui triada l'opció es fa així:

if read -t 3 -n1 opcio; then

Juke-box

Existeix un paquet Ubuntu ($ sudo apt-get install pytone), però millor descarregar la última versió de:

Instal.lació pytone. La instal.lació és senzilla, però la configuració m'ha portat molt de cap perquè em descuidava fer:

Installation

If you want to use the internal libmad based player, you have to build one C extension module located in the pcm subdirectory. This can be done simply via

$ python setup.py build_ext -i

Note that by default this builds also a C extension module for the output ring-buffer, which requires the libao header files (see above). If you are happy with the Python version of the output buffer, you can disable building the C module by setting buildbufferedaoext = False at the top of the setup.py file before running the above command.

To enable support for transparent terminals (only needed for Python 2.3.x) set buildcursext = True at the top of the setup.py file before running the above command.

Això ha resultat molt important, doncs abans arrencava el pytone però les tecles no funcionaven.

consoles alternatives:

Vull integrar el meuy jukebox pytone amb sdlmame. Em registro a Emuversal Bulletin Board. (joanillo/jq****), i aquí hi ha el forum de sdlmame:

Subject: Integrating pytone jukebox

I have pytone jukebox installed and working, and I want to integrate it with sdlmame ROM's in a seamless way. 

pytone is called with a pyton script:
/usr/share/Pytone/pyton

Is it possible to build a ROM, like any other game, that executes this script. May be there are two approaches:
1) pytone is another ROM in the M.A.M.E. emulator
2) create another emulator just for this application

Any ideas?

TIA

La resposta és que no. Una cosa és el SDL MAME, i una altra cosa és el Jukebox. La integració entre tots dos vindrà donada pel script d'inici del sistema que em deixarà escollir entre l'un o l'altre.

Fitxer de configuració del pytone:

$ sudo joe /etc/pytonerc

compte! el fitxer de configuració no és el que està a /home/joan/PyTone-3.0.3/conf En aquest fitxer estan definits els keybindings i això serà molt important modificar-lo per tal que l'aplicació es comporti amb les tecles que jo defineixi.

Keybindings del pytone:

[keybindings.general]
# keybindings independent of filelist and playlist window
refresh                   = ctrl-l
# note that the exit key has to be pressed two times in fast succession
exit                      = ctrl-x
playerstart               = p P   
playerpause               = p P   
playernextsong            = n N   
playerprevioussong        = b B   
playerforward             = >     
playerrewind              = <     
playerstop                = S     
playlistdeleteplayedsongs = KEY_BACKSPACE
playlistclear             = ctrl-d
playlistsave              = ctrl-w
playlistreplay            = ctrl-u
playlisttoggleautoplaymode= ctrl-t
togglelayout              = KEY_F10
showhelp                  = ?
showlog                   = !
showstats                 = %
showiteminfolong          = =
showlyrics                = L
toggleiteminfowindow      = ctrl-v
volumeup                  = )
volumedown                = (
# Play speed controls
playerplayfaster          = }
playerplayslower          = {
playerspeedreset          = ~
# rating of currently playing song
playerratecurrentsong1    = alt-1 
playerratecurrentsong2    = alt-2 
playerratecurrentsong3    = alt-3 
playerratecurrentsong4    = alt-4 
playerratecurrentsong5    = alt-5 

[keybindings.filelistwindow]
# additional keybindings when filelist window is active

selectnext        = KEY_DOWN j
selectprev        = KEY_UP k  
selectnextpage    = ctrl-n KEY_NPAGE
selectprevpage    = ctrl-p KEY_PPAGE
selectfirst       = ctrl-a KEY_HOME 
selectlast        = ctrl-e KEY_END  
dirdown           = KEY_RIGHT KEY_SPACE \n KEY_ENTER l
dirup             = KEY_LEFT h
addsongtoplaylist = KEY_SPACE \n KEY_ENTER KEY_RIGHT l
adddirtoplaylist  = i I KEY_IC alt-KEY_RIGHT
playselectedsong  = alt-\n alt-KEY_ENTER
activateplaylist  = \t
insertrandomlist  = r R
rescan            = u U
toggledelete      = D  
search            = / ctrl-s
repeatsearch      = ctrl-g  

[keybindings.playlistwindow]
# additional keybindings when playlist window is active

selectnext       = KEY_DOWN j
selectprev       = KEY_UP k  
selectnextpage   = ctrl-n KEY_NPAGE
selectprevpage   = ctrl-p KEY_PPAGE
selectfirst      = ctrl-a KEY_HOME 
selectlast       = ctrl-e KEY_END  
moveitemup       = +
moveitemdown     = -
deleteitem       = d D KEY_DC
activatefilelist = \t KEY_LEFT h
playselectedsong = alt-\n alt-KEY_ENTER
shuffle          = r R
rescan           = u U
filelistjumptoselectedsong = KEY_RIGHT l

modifico el fitxer de configuració:

musicbasedir =/home/joan/jukebox

Puc tenir fitxers de configuració alternatius, i arrencar-los en la línia de comandes:

$ ./pytone --config /etc/pytonerc (per defecte)
$ ./pytone --config /home/joan/Baixades/PyTone-3.0.3/conf/pytonerc
$ ./pytone -r rebuild all databases. Necessari per actualitzar si he afegit cançons als directoris.
$ ./pytone -d -> debug mode per si no funciona investigar què passa

Ara vull sentir música! Mirar el fitxer de configuració. Una possibilitat és utilitzar el reproductor mpg123:

$ sudo apt-get install mpg123

Si no sento res, he de comprovar que funciona el reproductor mpg123:

$ mpg123 /home/joan/jukebox/01\ -\ Peter\ And\ The\ Wolf-\ Introduction.mp3 -> funciona

Tecles que necessito per utilitzar el pytone. A priori:

Altres coses que veig en el fitxer de configuració:

He de resoldre el problema que no sona amb un dels dos discs (en l'altre sí)

$ mpg123 /home/joan/jukebox/01_Peter.mp3 -> funciona

       -o module, --output module
              Select audio output module. You can provide a comma-separated list to use the first one that works.

       --list-modules
              List the available modules.

       -a dev, --audiodevice dev
              Specify the audio device to use.  The default is system-dependent (usually  /dev/audio  or  /dev/dsp).
              Use this option if you have multiple audio devices and the default is not what you want.
$ mpg123 --list-modules

Available modules
-----------------
[module.c:141] error: Failed to open module nas: file not found
pulse          output  Output audio using PulseAudio Server
dummy          output  Dummy audio output - does not output audio.
esd            output  Output audio using ESounD (The Enlightened Sound Daemon).
oss            output  Output audio using OSS
jack           output  Output audio using JACK (JACK Audio Connection Kit).
alsa           output  Output audio using Advanced Linux Sound Architecture (ALSA).

$ mpg123 -o pulse /home/joan/jukebox/01_Peter.mp3 -> funciona

miro el fitxe mpg123.py

#type = internal
type=mpg123
cmdline=-o pulse

el missatge d'error que trobo és

DeprecationWarning: os.popen4 is deprecated
/usr/bin/mpg123 -o pulse /home/joan/jukebox/01_Peter.mp3

deixo estar l'ús del mpg123

libao: cross platform audio output library

Ara ho provo amb xmms (que ara es diu xmms2)

$ xmms2

This program is deprecated and will be replaced by nyxmms2.

Consider setting runnycli to 'true' in config file to get future behaviour

(or set iknowoldcliisdeprecatedandwillgoaway to 'true' to hide this warning)
The config file is located at: /home/joan/.config/xmms2/clients/cli.conf
$ xmms2 play -> comença a sonar la playlist que hi ha definida al fitxer de configuració
$ xmms2 stop

Envio un mail al desenvolupador de pytone:

Excuse to contact you personally, but seems that the mail list is not very crowded.
I'm trying to listen music with internal/mpg123/xmms, withous success.

I run Ubuntu 10.04 and everyting seems correct in my system.

Trying using mpg123:
$ mpg123 -o pulse /home/joan/jukebox/01_Peter.mp3 -> it works!

then, in pytonerc:

type=mpg123
cmdline=-o pulse

$ ./pytone
and I found the error:
DeprecationWarning: os.popen4 is deprecated

I solved this putting in line 49 of mpg123.py:

        #self.pstdin, self.pstdout = os.popen4(self.cmdline + " -R -")

        p = subprocess.Popen("sort --version", shell=True, stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
        (self.pstdin, self.pstdout) = (p.stdin, p.stdout)

I found the clue in
*http://shoaibmir.wordpress.com/category/programming/python/

Now I'm very near to the solution but:

RuntimeError: Cannot initialize main player: type=mpg123, cmdline=/usr/bin/mpg123 -o pulse

I don't understand why, because this command works perfect in Linux prompt. I tested all the combinations of drivers/devices.

In the case of xmms, it seems that the actual version is xmms2, so in xmmsplayer.py I put:

abs_prog_name = xmms.control._find_and_check_executable("xmms2")

but xmms.control module is not found. (I installed the package related with python and xmms)

In the case of internal player I can see the gui interface. Everyting seems OK, but when I press P (or in autoplay=true) nothing sounds.

Thanks for your time,
Joan Quintana

Finalment sí que funcionava, es tracta d'entendre bé el funcionament del programa. Funciona de la següent manera. En el fitxer de configuració /etc/pytonerc:

type = internal
driver = oss
device = /dev/dsp
bufsize = 100
crossfading = on
crossfadingstart = 5
crossfadingduration = 6

També es pot triar el driver pulse (i alsa?), i el dispositiu pot ser /dev/dsp o /dev/audio.

Ara el tema és aconseguir una funcionalitat total amb els cursors i 4 botons (o bé 6 botons, doncs de fet tindré dos botons del milloncete-pinball)

Coses també a aconseguir és fer funcionar els dos players per tal de fer foses, i millorar l'aspecte visual (més contrastat). No tinc clar com fer la fosa. Sembla ser que he de tenir dos dispositius d'audio, que és lògic: /dev/dsp i /dev/dsp1 (que aquest últim no el tinc). Però també hi ha el mixer (jo tinc /dev/mixer). Mirar l'apartat mixer configuration a pytonerc.

Per tal que funcioni el secundari també l'he de posar a /dev/dsp.

una altra cosa: què passa si fico les cançons dins de carpetes? Busca dins les carpetes?

pytone: base de dades sqlite3 (no cal fer-ho)

La base de dades està a ~/.pytone/main.db (o allà on digui el fitxer de configuració /etc/pytonerc), i és SQLite. Això vol dir que puc crear playlists directament a la base de dades treballant amb sqlite. Si obrim el fitxer main.db veiem que és SQLite format 3. Per tant,

$ sudo apt-get install sqlite3

SQLITE3(1)                                                          SQLITE3(1)

NAME
       sqlite3 - A command line interface for SQLite version 3

SYNOPSIS
       sqlite3 [options] [databasefile] [SQL]
$ sqlite3 .help/home/joan/.pytone/main.db
sqlite> 
sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /home/joan/.pytone/main.db    

sqlite> .tables
albums            playlistcontents  playstats         taggings        
artists           playlists         songs             tags

sqlite> select * from playlists;
1|123
123 és el nom d'una playlist que he creat en l'aplicació pytone (ctrl-W per gravar una playlist, i surt una finestra per ficar el nom)

sqlite> select * from playlistcontents;
1|13|1
1|12|2
1|11|3
1|10|4
1|15|5
1|47|6
1|33|7
1|31|8

relaciona la playlist amb les cançons: id_playlist, id_cançó, num_ordre

sqlite> select * from songs;
...
46|file://Pascal Comelade (1992) Haikus de Pianos [320]/09 c'era una volta il west.mp3|mp3|C'era Una Volta Il West|3|3|3|1992|VCOMM|V
.||116|9||||0|320000|0|44100|||||4660479|1301840308.05631|1301840308.05631||0|0|
...

Per tant, si vull ficar la cançó c'era una volta il west.mp3 a la playlist, he de fer:

sqlite> insert into playlistcontents values(1,46,9);

i aquesta, treballar directament amb la base de dades, és una de les possibles maneres d'editar les playlist si estic limitat per 4 o 6 botons + joystick.

Una altra possibiliat és tenir en el menú d'inici dues instàncies de pytone, que accedeixen a dos fitxers de configuració diferents (i que ataquen la mateixa base de dades). El primer té la configuració Arcade (joystick + 4/6 botons). La segona té configuració teclat, i és amb aquesta configuració que puc editar còmodament les playlists. (o bé dues instàncies del pytone, o bé una sola instància amb dos fitxers de configuració diferents).

Per exemple,

$ ./pytone -c /home/joan/pytonerc

agafa el fitxer de configuració /home/joan/pytonerc, quan el fitxer de configuració per defecte és /etc/pytonerc. Aquí la única cosa que s'ha de tenir en compte que no diu la documentació és que el fitxer de configuració s'ha de dir pytonerc (un altre nom no és vàlid)

pytone keybindings amb 6 botons

Sembla ser que amb 4 botons no és possible tenir tota la funcionaltat d'editar/afegir/esborrar les playlist. Per tant, parteixo de la base que treballaré amb 6 botons a veure si aconsegueixo tota la funcionalitat.

La llista de keybindings per defecte és la següent:

##############################################################################
# keybindings
##############################################################################

# each entry is a space separated list of keys, where for each key:
# - the prefixes alt- and ctrl- may be used
# - case is important
# - KEY_... identifiers from the curses library (+KEY_SPACE for the space key) 
#   may be used

[keybindings.general]
# keybindings independent of filelist and playlist window
refresh                   = ctrl-l
# note that the exit key has to be pressed two times in fast succession
exit                      = ctrl-x
playerstart               = p P
playerpause               = p P
playernextsong            = n N
playerprevioussong        = b B
playerforward             = >
playerrewind              = <
playerstop                = S
playlistdeleteplayedsongs = KEY_BACKSPACE
playlistclear             = ctrl-d
playlistsave              = ctrl-w
playlistreplay            = ctrl-u
playlisttoggleautoplaymode= ctrl-t
togglelayout              = KEY_F10
showhelp                  = ?
showlog                   = !
showstats                 = %
showiteminfolong          = =
showlyrics                = L
toggleiteminfowindow      = ctrl-v
volumeup                  = )
volumedown                = (
# Play speed controls
playerplayfaster          = }
playerplayslower          = {
playerspeedreset          = ~
# rating of currently playing song
playerratecurrentsong1    = alt-1
playerratecurrentsong2    = alt-2
playerratecurrentsong3    = alt-3
playerratecurrentsong4    = alt-4
playerratecurrentsong5    = alt-5

[keybindings.filelistwindow]
# additional keybindings when filelist window is active

selectnext        = KEY_DOWN j
selectprev        = KEY_UP k
selectnextpage    = ctrl-n KEY_NPAGE
selectprevpage    = ctrl-p KEY_PPAGE
selectfirst       = ctrl-a KEY_HOME
selectlast        = ctrl-e KEY_END
dirdown           = KEY_RIGHT KEY_SPACE \n KEY_ENTER l
dirup             = KEY_LEFT h
addsongtoplaylist = KEY_SPACE \n KEY_ENTER KEY_RIGHT l
adddirtoplaylist  = i I KEY_IC alt-KEY_RIGHT
playselectedsong  = alt-\n alt-KEY_ENTER
activateplaylist  = \t
insertrandomlist  = r R
rescan            = u U
toggledelete      = D
search            = / ctrl-s
repeatsearch      = ctrl-g

[keybindings.playlistwindow]
# additional keybindings when playlist window is active

selectnext       = KEY_DOWN j
selectprev       = KEY_UP k
selectnextpage   = ctrl-n KEY_NPAGE
selectprevpage   = ctrl-p KEY_PPAGE
selectfirst      = ctrl-a KEY_HOME
selectlast       = ctrl-e KEY_END
moveitemup       = +
moveitemdown     = -
deleteitem       = d D KEY_DC
activatefilelist = \t KEY_LEFT h
playselectedsong = alt-\n alt-KEY_ENTER
shuffle          = r R
rescan           = u U
filelistjumptoselectedsong = KEY_RIGHT l

Després de considerar les diferents possibilitats, utilitzaré 6 tecles, que seran del 1 al 6, i quedarà de la següent manera:

Generals:

Estic en el FileList:

Estic en la PlayList:

reserva


Fixem-nos que en el keybinding no hi ha definit el TAB, doncs és la tecla per defecte per moure's entre finestres. Anem a ficar-ho en el fitxer pytonerc:

##############################################################################
# keybindings
##############################################################################

# each entry is a space separated list of keys, where for each key:
# - the prefixes alt- and ctrl- may be used
# - case is important
# - KEY_... identifiers from the curses library (+KEY_SPACE for the space key) 
#   may be used

[keybindings.general]
# keybindings independent of filelist and playlist window
#refresh                   = ctrl-l
# note that the exit key has to be pressed two times in fast succession
exit                      = 3 ;ctrl-x
playerstart               = 4 ;p P
playerpause               = 4 ;p P
#playernextsong            = n N
#playerprevioussong        = b B
#playerforward             = >
#playerrewind              = <
#playerstop                = S
#playlistdeleteplayedsongs = KEY_BACKSPACE
playlistclear             = 6 ;ctrl-d
#playlistsave              = ctrl-w
#playlistreplay            = ctrl-u
#playlisttoggleautoplaymode= ctrl-t
#togglelayout              = KEY_F10
#showhelp                  = ?
#showlog                   = !
#showstats                 = %
#showiteminfolong          = =
#showlyrics                = L
#toggleiteminfowindow      = ctrl-v
#volumeup                  = )
#volumedown                = (
## Play speed controls
#playerplayfaster          = }
#playerplayslower          = {
#playerspeedreset          = ~
## rating of currently playing song
#playerratecurrentsong1    = alt-1
#playerratecurrentsong2    = alt-2
#playerratecurrentsong3    = alt-3
#playerratecurrentsong4    = alt-4
#playerratecurrentsong5    = alt-5

[keybindings.filelistwindow]
# additional keybindings when filelist window is active

selectnext        = KEY_DOWN ;j
selectprev        = KEY_UP ;k
#selectnextpage    = ctrl-n KEY_NPAGE
#selectprevpage    = ctrl-p KEY_PPAGE
#selectfirst       = ctrl-a KEY_HOME
#selectlast        = ctrl-e KEY_END
dirdown           = KEY_RIGHT ;KEY_SPACE \n KEY_ENTER l
dirup             = KEY_LEFT ;h
addsongtoplaylist = KEY_RIGHT ;KEY_SPACE \n KEY_ENTER KEY_RIGHT l
adddirtoplaylist  = 2 ;i I KEY_IC alt-KEY_RIGHT
playselectedsong  = 5 ;alt-\n alt-KEY_ENTER
activateplaylist  = 1 ;\t
#insertrandomlist  = r R
#rescan            = u U
#toggledelete      = D
#search            = / ctrl-s
#repeatsearch      = ctrl-g
#focus             = f

[keybindings.playlistwindow]
# additional keybindings when playlist window is active

selectnext       = KEY_DOWN ;j
selectprev       = KEY_UP ;k
#selectnextpage   = ctrl-n KEY_NPAGE
#selectprevpage   = ctrl-p KEY_PPAGE
#selectfirst      = ctrl-a KEY_HOME
#selectlast       = ctrl-e KEY_END
moveitemup       = 2 ;+
#moveitemdown     = -
deleteitem       = KEY_LEFT ;d D KEY_DC
activatefilelist = 1 ;\t KEY_LEFT h
playselectedsong = 5 ;alt-\n alt-KEY_ENTER
#shuffle          = r R
#rescan           = u U
filelistjumptoselectedsong = KEY_RIGHT ;l

colors

els colors estan molt ben triats per defecte, la única cosa que falta és que el gnome-terminal sigui fons negre i font blanca.

pendrive amb mp3's

Una altra qüestió és que, si les cançons mp3 vénen en un pendrive (buscant la facilitat d'ús), com aconseguir que sigui quin sigui el pendrive que fico sempre es pugui accedir de la mateixa manera, per ex /media/PENDRIVE.

1a opció

Depenent de com s'hagi formatat el pendrive hi ha vàries causístiques. Dóno per suposat que l'usuari de Windows té el pendrive en format FAT32

$ sudo mlabel -i /dev/sdc5 -s ::
 Volume label is LACIE  

edito el fitxer /etc/mtools.conf. Assigno al meu pendrive la unitat p

drive p: file="/dev/sdc5" 

tenint el pendriver muntat faig

$ sudo mlabel p:JUKEBOX

i canvia el nom de LACIE per JUKEBOX

per fer els canvis permanents fico aquesta informació en el script que s'executa en l'inici del sistema: mame_arcade.sh

sudo /usr/bin/mlabel p:JUKEBOX
sleep 2

he de fer que mlabel es pugui executar com a sudo sense demanar pwd. (joan ALL=NOPASSWD:/usr/bin/mlabel al fitxer /etc/sudoers)

Aquest mètode per a la targeta SD també em val:

$ sudo mlabel -i /dev/mmcblk0p1 -s ::
no té label

$ sudo mlabel q:TARJA

El problema és que aquest mètode renombra el llapis USB, de manera que quan el fico a un altre ordinador el nom queda (això no és el que vull!).

2a opció (la correcta)

Toquem el fitxer /etc/fstab:

El fitxer fstab dóna informació de quins punts de muntatge es muntaran en l'inici del sistema. Repassem la comanda mount:

mount [-fnrsvw] [-t vfstype] [-o options] device dir
$ sudo mount -t vfat /dev/sdc /media/jukebox

vfat si el llapis està formatat amb FAT32 o FAT16.

el directori jukebox ha d'existir.

Editem el fitxer fstab i mirarem bé les opcions per tal que el llapis es monti amb els permisos correctes:

$ sudo joe /etc/fstab
/dev/sdc /media/hola vfat auto,users,uid=joan,gid=users 0 

l'usuari joan (amb el que inicio el sistema) té permís d'escriptura (i lectura) en el dispositiu.

Pinball

A MAME he vist que només hi ha un joc pinball. Ara bé, hi ha PinMAME i el Emilia Pinball Project (està antiquat).

Disseny Control Panel

Tinc joystick i 6 botons. He de tenir en compte que s'ha de definir el comportament dels botons en diferents aplicacions:

En l'adhesiu del control panel ha d'haver-hi la xuleta de què fa cada joc, i ha de ser un compromís entre el disseny i la claredat. S'utilitzarà diferent color/tipus de lletra per saber a quina aplicació fa referència la llegenda.

En els jocs:

5: coin -> 2
1: 1 player/start -> 1
ESC: exit -> 3
Ctrl: Fire -> 4
Alt: Fire2 -> 5
Space: Fire3 -> 6

Resum/xuleta configurar sistema

Monto una màquina, i aquí va el resum de què s'ha de fer per configurar tota la màquina.

Instal.lació Ubuntu i primers passos

He instal.lat Xubuntu 10.04 pensant en què la màquina vagi lleugera, però no és una opció del tot necessària ja que wahcade està basat en GTK i al final s'instal.len totes les llibreries de GTK/Gnome.

$ sudo apt-get install joe gedit gnome-terminal
sudo apt-get remove abiword

sudo apt-get install sdlmame sdlmame-tools

configurar el so per tal d'escoltar un video del youtube (pulseaudio) (Mesclador. Targeta de so: Playback: audio intern Analog Stereo (Pulse Audio Mixer)

Aplicacions > Ajustaments > Gestor d'ajustaments del XFCE: configuro els serveis que vull que s'inicïin amb els sistema, i quins no. No preguntar login en l'inici del sistema, i no preguntar res en aturar el sistema.

sdlmame

Em descarrego els roms lliures i els fico a $HOME/.mame/roms, que és el directori per defecte si miro el fitxer /etc/sdlmame/mame.ini:

$ sdlmame

Recordem:

$ sdlmame -rompath /home/mame/.mame/roms sidetrac
$ sdlmame sidetrac

sdlmame em va realment molt lent:

No, you want opengl enabled so you get the proper benefit of Mame.

What's your specs, and are you sure you've enabled your graphics driver? I can't think of anything else it could be. I only have a very basic PC myself, but SDLMame is fantastic on it. You shouldn't be having any bother...
...
Yeah, fixed it. I just forgot to install the graphics drivers, haha. Works like a charm (and Ubuntu sure is prettier with desktop effects)

In mame.ini, set antialias to 0

Try enabling the multi-threading option as well.
That increased sdlmame's average speed from 84 to 99 for me.

Code:

sdlmame -mt

Aplicacions > Sistema > Controladors de maquinari. Detecta que és una targeta NVidia, i em proposa dos controladors propietaris. Instal.lo el que em recomana. Efectivament, reinicio i ja funciona. Com es comenta, l'opció més correcta és utilitzar video > opengl (allibera el processador de les tasques de video). És important tenir ben configurada la targeta de video.

La targeta de video és una GeForce FX 5500

També he instal.lat en el synaptic els paquets libsage2 i libsage-dev (supports OpenGL in SDL applications). Té sentit instal.lar això doncs sdlmame és tecnologia SDL.

wahcade

Tinc instal.lat python 2.6.5 (també el paquet dev)

He instal.lat el sistema xubuntu 10.04 buscant un millor rendiment, però això és una fal.làcia perquè wahcade és una aplicació GTK, i és ara, quan instal.lo wahcade, que instal.laré totes les llibreries GTK. Un dels requeriments de wahcade és pygtk2 >= 2.8, que s'instal.la amb el paquet python-gtk2-dev, i que alhora instal.la el paquet libgtk2.0-dev, per tant s'instal.la GTK2. En total s'instal.len 133MB.

$ sudo apt-get install python-gtk2-dev

$ sudo apt-get install python-pygame
$ sudo apt-get install python-chardet

$ sudo dpkg -i /media/dades/wahcade_0.99pre8_all.deb

$ wahcade-setup fico el directori on tinc els roms

$ wahcade

per defecte, wahacde està pensat per a 1024x768. Fico de moment aquesta resolució de pantalla, tot i que per defecte la tarja gràfica suporta 1280x1024

pytone

Descarrego pytone de http://www.luga.de/pytone/#download

$ sudo apt-get install libao-dev
$ python setup.py build_ext -i

$ ./pytone

Please define at least one song database in your configuration file. Fitxer de configuració pytonerc.

$ gedit /etc/pytonerc

El cert és que si no utilitzo l'opció --config per dir on és el fitxer de configuració, el busca a /etc/pytonerc. Per tant,

$ sudo cp ~/PyTone-3.0.3/conf/pytonerc /etc

El primer que faig és definir musicbasedir:

musicbasedir =/media/dades
$ ./pytone -r

per crear el fitxer main.db

Recordem que per tancar, Ctrl-X dues vegades (abans de definir els nous keybindings). D'entrada no sona res:

Software prerequisites

     * Python 2.3 (available from [2]here); 
     * for the mad based internal player (optional):
          + Python header files,
          + pymad (available from [3]here) and
          + pyvorbis (optional, available from [4]here),
          + pyao (available from [4]here, please use version 0.82 or above) or 
            the new Python OSS module in Python 2.3.
          + libao header files (available from here, if you want to compile
            the C version of the output ring-buffer.
     * for the xmms based external player (optional):
          + xmms 1.2.6 or higher (available [5]here) and
          + pyxmms (available from [6]here)
     * for the mpg321 or mpg123 based external player (optional):
          + mpg321 (available from [7]here) or
          + mpg123 (available from [8]here)
     * for the mixer interface (optional):
          + Python OSS module (included in Python 2.3 or available from [9] here)
sudo apt-get install python-pymad
sudo apt-get install python-pyvorbis python-pyvorbis-dbg
sudo apt-get install python-pyao python-pyao-dbg

i ara ja funciona (escoltar música).

De fet, hi ha tres configuracions d'audio que funcionen:

Coses que falten

recopilatori de fitxers i directoris

mame/sdlmame lloc on estan definides les roms:

les roms estan a $HOME/.mame/ (definit en aquest fitxer)

també és on hi ha definit les configuracions bàsiques de MAME, com ara opengl/software.

wahcade

pytone



creat per Joan Quintana Compte, març 2011

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines