Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2009-04-28 04:21:50 Son 8bit // Gameboy

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Son 8bit // Gameboy



Bonsjours les gens...

Il est tard...
J'ai les yeux qui me piquent...
... et je n'arrive pas à retrouver un petit patch présent dans la 0.40.3-extended qui permet de produire des sons de Gameboy.
Je sais qu'il y est...
Je l'ai vu...
Je m'en suis servi...
Mais il se cache, le coquin.
Si vous le croisez, pourriez-vous lui dire qu'un monsieur fatigué l'attend dans le hall. tongue
Merci.

Pour info, dans mes recherches je suis tombé sur http://mmonoplayer.com/mspexternals.php qui propose des patchs d'émulation de sons d'anciennes consoles.
Beaucoup de MSP, mais aussi deux patchs ATARI pour PD...

Aux plaisirs...


L'Amour au Peuple !

Hors ligne

 

#2 2009-11-29 15:06:28 Re : Son 8bit // Gameboy

arboreal
nouveau membre
Date d'inscription: 2009-01-03
Messages: 6

Re: Son 8bit // Gameboy



C'est peut être tard et ce n'est peut etre pas ce que tu cherches mais y a truc qui ressemble à ce que tu cherches dans l'help de [list-sieve]

Hors ligne

 

#3 2009-12-03 10:37:36 Re : Son 8bit // Gameboy

mrpropre
membre
Lieu: paris
Date d'inscription: 2008-11-13
Messages: 96
Site web

Re: Son 8bit // Gameboy



On sait jamais, à voir également ceci: http://www.zenpho.co.uk/chipwave.shtml


8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----
http://www.raphaelisdant.fr/

Hors ligne

 

#4 2009-12-03 12:09:41 Re : Son 8bit // Gameboy

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: Son 8bit // Gameboy



Hello,

Plein de choses intéressantes dans le lien proposé par mrpropre, en particulier à la fin de ce pdf : http://www.zenpho.co.uk/PhillPhelps-ChiptuneSynth.pdf des infos sur les capacités sonores des différentes puces.

Il se trouve que par ce week-end (pluvieux) je me suis lancé dans une modélisation sonore de l'atari 2600 en me basant sur différents documents qui expliquent son fonctionnement. Ce n'est pas vraiment au point mais ça ressemble smile Le chip utilisé par le 2600 (TIA) fonctionne en 32000 Hz, et mon programme en 44100, du coup il y a des harmoniques supplémentaires... Enfin, je compte améliorer ça et en faire un instrument jouable. En attendant voila les sons produits et le programme, en chuck!

Le principe : il y a 16 formes d'onde différentes définies par des registres binaires, lus à des vitesses différentes (32 vitesses = 32 notes) et 16 niveaux d'amplitude.
Les infos sur les formes d'ondes et les fréquences produites viennent de http://home.arcor.de/estolberg/texts/freqform.txt

Un exemple sonore : toutes les ondes différentes bout à bout, pour chacune les 32 notes, le volume ne change pas.


Code (chuck) :

// http://home.arcor.de/estolberg/texts/freqform.txt
// http://www.biglist.com/lists/stella/archives/199704/msg00007.html
// http://www.randomterrain.com/atari-2600-memories-batari-basic-music-sound.html
// http://www.whimsey.com/atari_docs/
// http://home.arcor.de/estolberg/tools/index.html

Step s=>dac;
1 => s.gain;

// Distorsion modes 0-15 data 
[
  // 0 : Distorsion 0 
  // No sound, used to output 4-bit samples by changing the volume very fast
  [ [1],    // Source Samples data
    [1],    // Modifier data
    [1] ],  // Clock mode (pixelclock = 3 * cpuclock)
  // Distorsion 1 / Buzzy Tones
  [ [0,0,1,0,1,0,0,0,0,1,1,1,0,1,1],    
    [1],    
    [1] ],
  // Distorsion 2 / Carries distorsion 1 downward into a rumble
  [ [0,0,1,0,1,0,0,0,0,1,1,1,0,1,1],    
    [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],    
    [1] ],
  // Distorsion 3 / Flangy wavering tones, like a UFO
  [ [0,0,1,0,1,0,0,0,0,1,1,1,0,1,1],    
    [0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1],    
    [1] ],
  // Distorsion 4 / Pure tone
  [ [0,1],    
    [1],    
    [1] ],
  // Distorsion 5 : same as 4
  [ [0,1],   
    [1],    
    [1] ],
  // Distorsion 6 / Between pure tone and buzzy tone
  [ [1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],    
    [1],    
    [1] ],
  // Distorsion 7 / Reedy tones, much brighter
  [ [0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1],    
    [1],    
    [1] ],
  // Distorsion 8 : 511 bits of white noise 
  // White noise / explosions / lightning, jet / spacecraft engine
  [ [1,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,
     0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,
     1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1,
     1,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,0,
     1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,
     1,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,1,
     0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,
     1,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,
     1,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,
     1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,0,
     0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,
     0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,
     0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,0,0,1,0],    
    [1],    
    [1] ],
  // Distorsion 9 : same as 7
  [ [0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1],  
    [1],    
    [1] ],
  // Distorsion 10 : same as 6
  [ [1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [1],    
    [1] ],
  // Distorsion 11 : same as 0
  [ [1],       
    [1],    
    [1] ],
  // Distorsion 12 / Pure tone, goes much lower in pitch than 4 & 5
  [ [1,0],    
    [1],    
    [3] ],
  // Distorsion 13 : same as 12
  [ [1,0],       
    [1],    
    [3] ],
  // Distorsion 14 / Electronic tones, mostly lows, extends to rumble
  [ [1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],    
    [1],    
    [3] ],
  // Distorsion 15 / Electronic tones, mostly lows, extends to rumble
  [ [0,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1],    
    [1],    
    [3] ]
] @=> int DMData[][][];








0 => int pitch;      // 0-31 pitch value
0 => int distorsion; // 0-15 distorsion mode (modifies source & modifier)
0 => int volume;     // 0-15

6 => int newDistorsion;

1 => int sourceLength;
1 => int modifierLength;

0 => int i;    // source index (0 -> source length - 1)
0 => int j;    // modifier index (0 -> modifier length - 1)
0 => int timeIndex;

float sample;
float sampleValue;
0 => float lastSampleValue;
float sampleVolume;

1.4134615384::samp => dur tbase;    // 44100 / 31200 (TIA PAL samplerate based on pixelclock)
//1.4026717557::samp => dur tbase;  // 44100 / 31440 (TIA NTSC samplerate based on pixelclock)
dur t;
tbase => t;

// test values
8 => volume;
0 => pitch;




while(t => now){

  if (newDistorsion != distorsion) {
    newDistorsion => distorsion;
    
    DMData[distorsion][0].size() => sourceLength;
    DMData[distorsion][1].size() => modifierLength;
    
    // switch between cpuclock and pixelclock (pixelclock = 3 * cpuclock)
    if (DMData[distorsion][2][0] == 3) tbase + tbase + tbase => t;
    else tbase => t;
    
    0 => i;
    0 => j;
  }

  (1.0 / 16) * volume => sampleVolume;

  
  // TODO : passer en deux voies
  if (DMData[distorsion][1][j] == 1) {
    DMData[distorsion][0][i] => sampleValue;
    sampleValue => lastSampleValue;
  } else lastSampleValue => sampleValue;
  
  sampleValue * sampleVolume => sample;
  sample => s.next;
  
  if (timeIndex % (pitch + 1) == 0) i++;
  i % sourceLength => i;
  
  j++;
  j % modifierLength => j;
  
  // TODO : utiliser une seule base temporelle!
  timeIndex++;


  // tests values
  /*
  if (timeIndex%625 == 0) {
      volume++;     
  }*/
  if (timeIndex%1000 == 0) {
      pitch++;
      <<<pitch, distorsion, t, modifierLength, sampleVolume>>>;
  }
  if (timeIndex%32000 == 0) newDistorsion ++;
  //if (timeIndex%998400 == 0) newDistorsion ++;
  
  pitch%32 => pitch;
  //if (newDistorsion < 0) newDistorsion == 15;
  newDistorsion%16 => newDistorsion;
  volume%16 => volume;
  
}

Aussi, quelques liens :
l'audio sur la gameboy advance : http://belogic.com/gba/
une comparaison des sons produits par les différents modèles de gmaeboy(s) : http://www.herbertweixelbaum.com/comparison.htm
le système audio de la gameboy en bref : http://www.nullsleep.com/treasure/lsdj_tutorial/
le système audio de la NES en profondeur, apparemment GB et NES sont assez proches : http://nesdev.parodius.com/NESSOUND.txt
le manuel du chip POKEY, responsable du son sur les ordis Atari 8bit (400XL, 800XL, etc.): http://www.retromicro.com/files/atari/8bit/pokey.pdf

Hors ligne

 

#5 2009-12-03 13:47:29 Re : Son 8bit // Gameboy

pschiiitt
membre
Date d'inscription: 2009-03-21
Messages: 318

Re: Son 8bit // Gameboy



Merci emoc pour ce document :
http://www.zenpho.co.uk/PhillPhelps-ChiptuneSynth.pdf

J'avais déjà commencé à faire un vsti sur la structure simplifiée d'une SID station.
Et donc, je retrouve une partie de mon développement dans ce document, ce qui me conforte dans ma programmation.

Hors ligne

 

#6 2009-12-03 18:37:53 Re : Son 8bit // Gameboy

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Son 8bit // Gameboy



citation :

C'est peut être tard et ce n'est peut etre pas ce que tu cherches mais y a truc qui ressemble à ce que tu cherches dans l'help de [list-sieve]

C'était cela... merci... smile

Pour ce qui est des posts suivants... que du bon !! big_smilebig_smile


L'Amour au Peuple !

Hors ligne

 

#7 2010-01-18 01:09:56 Re : Son 8bit // Gameboy

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: Son 8bit // Gameboy



Hey!

Je viens de tomber là-dessus, des plugins pour supercollider pour émuler des chips 8-bit, on retrouve la TIA de l'atari 2600, mais aussi POKEY ou SID et d'autres. Le code source C est aussi fourni

http://www.fredrikolofsson.com/pages/code-sc.html

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024