Showing posts with label mikmod. Show all posts
Showing posts with label mikmod. Show all posts

Friday, November 30, 2007

dev-fr.org ... le paradis du homebrew

Bon, j'ai bien aimé "Bloops", adoré "Tetris Attack DS" et "Setsuzoku no Puzzle" ... Mia est passé sur PSP. J'ai bien ri avec Kaboom et versé une larme de nostalgie sur XRickDS et GianaSister DS ... Quoi d'autre. Quid quand les blogs restent quois ? Tournons nous vers les forums !

Après quelques semaines peu convaincantes sur playeradvance (trop noob) et gbadev (trop prise de tête), j'ai essayé dev-fr, et jusqu'ici, je suis séduit ^_^. C'est tout à fait le genre "gazette" que je cherchais. Si vous avez déjà acheté un magazine un peu "touche à tout" sur l'informatique (je pense par exemple au PC team, création graphique, musicale, jeux, OS alternatifs et programmation), vous aurez peut-être remarqué que j'ai tendance à animer ce blog un peu comme quelques rubriques dans ce style de journal.

Okay, i liked Bloops, loved Tetris Attack DS and Setsuzoku no Puzzle. I quite liked Mia's homebrew too, but he's now dev'ing on the PSP. Kaboom made me laugh and both XrickDS and GianaDS have wet my eyes with tears of nostalgia. Then what ? What when blogs are silent ? Let's check out the forums.

My experience on player advance (too n00b) and gbadev (people are just too complicated) didn't convince me until i found dev-fr.org. That's exactly the kind of homebrew gazette i was looking for (i once hoped Drunken Coders news would offer this, but it turn out they merely advertise new movies available on the moonbook project >_<).

Here's a small sample on what you can found there (okay, it's a french-speaking forum. Noone's perfect). An interesting event on that board is the Saturday's demo. A homebrew guru details with videos and code a common special effect or programming technique. It can be about particle systems or the use of horizontal blank interrupts to achieve wobbling and parallax scrolling. Very pleasant.

 Petit tour d'horizon, donc, de ce que j'ai vu d'intéressant. Je laisserai à mon frère le soin de faire les tests et les scores ^_^

FAT Mod Player, par cid2mizard. Comme le nom l'indique, ça sert à écouter .mod ... Tous les mods que vous auriez mis sur votre carte flash.

Autre évènement sympaLa démo du samedi soir: scrolling list. Un principe assez original: illustrer des techniques de programmation (généralement sur la DS) avec le code à la clé. Des articles généralement très bien ficelés, et dignes de ce que l'on trouvait dans les magazine (même si les démos, elles, ne sont pas nécessairement très impressionnantes comparées à ce que l'on voyait sur la Scène Amiga il y a 10 ans d'ici. Le mot d'ordre, c'est BabySteps ...

Plop invaders ... un petit jeu bien sympa qui rappelle le principe de Chuzzle (mais pas tout à fait) avec un scénario digne des invasions blorks de Kid Paddle.

C'est mignon, ça fait cogiter les neurones et c'est bien ficelé, même si les graphismes dans les phases de jeu sont parfois un peu légers à mon goût (et les plops sont probablement un chouya trop petits).

Then come the Plops. Kind of blobs from unexpected nuclear experiment that you have to erradicate by exhausting their air. A chuzzle-like (though the gameplay differ) with a Kid Paddle-like scenario. Cute, mind-twisting and well tied together, despite some effort could be done to improve in-game gfx.  

Par Mollusk , Pitt et Zeblackos. Une collection de mini-jeux un peu curieux, réalisés dans un langage dont personne ne voudrait, mais pour un résultat qui vous dévorera des heures de transport en commun.   

Another blog-worthy stuff is Mental Games by Mollusk & friends. The kind of minigames pack that many suggest on the DS, but with a retro-look that gave me the urge to try it (compared to Puzzle Maniak which still leaves me cold). Ideal if you want 5-minutes fun in the bus. Check out my blogmarks if you want to keep up to date of my other findings. 

Le tout, évidemment, uploadé sur ma DS Phat avec mon propre petit "runme", que j'ai boosté à 1Mbps, et ses scripts perl ... Parce que je le veux bien.

edit: je suis loin d'avoir fait le tour, bien sûr, et comme je ne suis pas mon frère, je ne vais pas essayer d'animer une rubrique "le jeu homebrew de la semaine". Mais si je repère un jeu qui a l'air de valoir le coup sur ces forums, je l'ajoute dans mes blogmarks.

Friday, September 21, 2007

libmikmod deep test

I turned down the volume of my PC yesterday and let the DS be the music center, using a couple of updates on my "file server" (mostly truncating filenames and ungzipping on the fly submitted files). That was a fun time, but it revealed several oddities in the playback, so i have decided to delve deeper in the mikmod player library this lunch time to see whether i could improve playback.

The whole story is atm. only detailed in french, but to put it shortly, i mnaged to play a couple of .IT files from my brother thanks to a small patch (skip rendering in the first few ticks). I wish i could have opted for hardware playback, too, but this one seems completely buggy atm (understand: it completely locks down the system :P)


Hier, j'ai baissé le son de mon PC: c'est la DS qui a pris le relai, moyennant deux ou trois petits ajouts au programme servant de "serveur" côté PC (notamment, décompression à la volée et troncage approprié des noms de fichiers).

C'était sympa, mais le player a méchamment tendance à bugger, notamment au démarrage. J'ai essayé d'y voir un peu plus clair dans le code de mikmod (cf le post plus long). Il y a pas mal de positifs (j'arrive à jouer "Prehis2.it" de mon frère, par exemple ou la "pipe zone"), mais je crains que le player software ne devienne vite trop gourmand. Et le player hardware ? bin il crashe tout. oui, ma bonne dame.



note that while the job of hardware driver's update is straightforward, the software driver will actually try to fill the playout buffer at each step.



Software Mixing

Bon, le mixage hardware plante tout. comme ça au moins, c'est réglé. Dommage: le mixage software va être beaucoup plus tordu. Ici, le fonctionnement du mixeur est guidé par le playout buffer, une zone de mémoire dans lequel notre processeur principal construit un "wav" que le processeur secondaire (ARM7 et les circuits de la DS) transmettent vers nos oreilles.

Tout ce joue à l'aide de deux indicateurs de position (les "curseurs" dixit la bibliothèque mikmod) qui repère où en est l'écriture et où en est la lecture dans ce qu'il est commun d'appeler un buffer circulaire. Notre driver software va donc, à chaque appel de sa méthode Update(), calculer le nombre de bytes libres dans ce buffer et faire appel au virtual channel qui est chargé d'avancer dans le pattern et de produire des bytes.


#if 0
if (isfirst) {
isfirst--;
return;
}
#endif
il y avait dans Player_HandleTick() ce curieux bout de code avec comme commentaire "don't handle the very first ticks, this allows the other hardware to
settle down so we don't loose any starting notes"
. En clair, le "#if 0" désactive le bloc en question, qui avait pour effet de ne pas générer de données sur les "isfirst" premiers appels à HandleTick(). Comme quasiment tous mes mods démarraient de travers, je l'ai simplement réactivé, et je ne suis pas mécontent du résultat.


Mikmod_Update()


while(1) {
ge.handle();
MikMod_Update();
ge.animate();
}
Bion. Donc chaque appel à MikMod_Update(), pour la version "software mixing", le player va estimer combien de bytes du buffer ont déjà été joués et les remplacera par des nouveaux. Reste à quelle fréquence on va appeler cette fonction (plus elle sera appelée souvent, plus son temps d'exécution sera court, du coup).
La méthode la plus directe (et utilisée dans Tetris Attack) consiste à la placer après le traitement d'une nouvelle image.

Dans cette approche, le programme va alterner les tâches suivantes:
  1. lire l'état des boutons, de l'écran tactile, etc. et réagir en conséquence
  2. attendre le prochain rafraichissement (d'écran, hein. pas un soda-glacé)
  3. remettre à jour les tables de sprites (non, c'est pas non plus un rafraichissement. m'enfin)
  4. appeler mikmod_update pour produire plus de son dans le buffer
  5. traiter les animations
A première vue, c'est sous-optimal: on voudrait avoir le rendu du son comme tâche de fond, p.ex. pendant que l'on attend le rafraichissement d'écran (tant qu'à attendre, ...)


Tuesday, August 28, 2007

wifi + DS + libmikmod = ^_^

yeah! J'ai réussi à intégrer la nouvelle mouture de libmikmod (et ses drivers DS) de tetattds (sten larsson) avec le petit framework de téléchargement d'image pour la DS.

Résultat ? je peux transférer des fichiers .pcx et les visualiser (enfin, une portion de 256x256) sur la DS, transférer des .mod, des .it et des .s3m et les écouter (à 22KHz), et toujours sauver des fichiers et faire les mises à jour du soft depuis un serveur HTTP.

Ca commence tout doucement à ressembler à une extension de mon PC. C'est probablement encore très loin d'être "user friendly", mais ça prend forme ;)

Ceux qui veulent rejoindre mon cyborg de frère et k93 dans les rangs des béta-testeurs sont les bienvenus sur la page "download" du projet sourceforge . Les impatients qui veulent du code peuvent déjà faire un tour dans le CVS .

"This is a small step for humanity, but a giant leap for me!" ... I now have the latest DS port of libmikmod (from sten larsson's tetattds) integrated with my current beamed-picture-viewer (aka. runME) on the DS. That means in addition to .PCX pictures wifi transfer and display, i can also receive .MOD, .S3M and .IT tracked format (up to 256KB) and play them back on the DS. The ability of software upgrade through HTTP server is still there too and dramatically helps fast development.

The subtle rendering difference might be important for artists working on a PC for the DS platform (e.g. my bross will ultimately write/adapt tunes for DS games, so he'd love to listen what it sounds like without having to compile a binary or depending on an actual game. Still, both PC-server and DS-client sides are far from being intuitive or user-friendly, but that's a small step in the good direction.

As always, code is already available through the Sourceforge CVS if anyone is interested ^_^. I would just appreciate to be notified of it ;)

Tuesday, November 07, 2006

Homebrew Attack ...

A small picture of "Tetris Attack DS", a homebrew game by Sten Larsson. And by posting it here, i mainly mean "i love that game". Not only it keeps me smiling while i'm waiting for my fairy to fetch me with the car, but it's open source, running on a DS and featuring the now-famous "mikmod" module player library.

In other words, it has all the logic i need to start doing my own first game with music on the DS (as mikmod supports the .IT (impulse tracker) format my bros. uses to create music).

So stay tuned: "apple rumble" might be coming in the next few weeks ^_^


Un petit screenshot de "Tetris Attack DS", un jeu développé par Sten Larsson que j'aime encore bien. D'abord parce qu'il est bien sympa, que c'est un puzzle (donc, des heures de jeu :), que je peux l'emporter partout et y jouer 10 minutes quand ma fée n'arrive pas tout de suite avec la voiture ...

Mais surtout parce qu'il est libre (traduisez: j'ai les sources du programme en toute légalité), et qu'il utilise la (célèbre) bibliothèque "mikmod" pour jouer la musique et les effets du jeu. Autrement dit, tout ce dont j'ai besoin pour démarrer le code de mon premier jeu sur la DS avec une musique de mon frère

A bientôt donc peut-être avec mon tout premier jeu DS "Apple Rumble" ^_^

Saturday, December 31, 2005

modplayer (t.a.g)

Think about a spreadsheet. Imagine cells contain notes rather than numbers... and that somehow, by changing the color of a cell, you change the instrument that will be played for that cell. Columns are channels, rows are time slices. One page of your spreadsheet is a pattern, usually little more than a few drum loops with a part of the melody line and whatever else it needs. Your song is longer than this, of course, so it will need more patterns, and you may want to repeat some of them (you need a chorus, right?) so you have an extra list telling in what order to play them.

Now to make 'instruments', think you have sampled something with a microphone or another Audio In feature. Save all this (patterns-spreadsheets plus samples) together with a few extra info (song title and samples names) with the .MOD extension and voilà. You've got a module. To hear it again, you'll need a module player. I've used a lot of them, and I still do. I've studied the code of some of them. I've wrote a few and I'm still working on one for the Nintendo DS. Posts with the 'modplayer' tag should tell you more about it.

Quand on me demande ce que je veux dire avec mes 'modules', je retombe généralement sur cette explication d'une 'feuille excel qui contiendrait des notes de musique'. Cette feuille, on l'appelle un pattern. Elle se joue en boucle jusqu'à ce qu'on dise au programme d'en jouer une autre. Pour chaque note, il faudra un son numérisé à rejouer -- un sample -- soit à la fréquence où il a été enregistré, soit à une fréquence plus haute ou plus basse pour avoir d'autres notes.

Un 'modtracker', (ou juste un 'tracker'), c'est le programme avec lequel on les écrit. Un 'modplayer', c'est un logiciel ou une bibliothèque logicielle qui permet de les rejouer. Depuis que mon frangin a mis la main sur un tracker, comprendre, écrire et bidouiller des modplayers, c'est une partie fondatrice de mes activités de bricologicien.