All of lore.kernel.org
 help / color / mirror / Atom feed
* [FILE] Tune generation tool
@ 2005-07-12 19:37 Vincent Pelletier
  2005-07-13 16:31 ` Marco Gerards
  0 siblings, 1 reply; 9+ messages in thread
From: Vincent Pelletier @ 2005-07-12 19:37 UTC (permalink / raw)
  To: Grub-devel

[-- Attachment #1: Type: text/plain, Size: 479 bytes --]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Here is the source of a little tool to generate tunes for Grub 2 play
command.
Quick coded, could be more powerful but I'm not sure it's worth the work.

I'm not sure if it should enter the cvs, too. And if it does, where ?

Vincent Pelletier
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFC1BwTFEQoKRQyjtURAtk4AJ4hZTZmskufX/alWLRqZUiNoZ12nwCeMCC1
XDZsg5lKFEmX2s13/bjKt78=
=0X7Z
-----END PGP SIGNATURE-----

[-- Attachment #2: common.h --]
[-- Type: text/x-chdr, Size: 5376 bytes --]

/* The 12th root of 2.  Sort of.  */
#define T_TEMP_SCALE		1.0594630943592952645
#define T_DOWN_ONE_HALF(x)	((short) (x / T_TEMP_SCALE))
#define T_UP_ONE_HALF(x)	((short) (x * T_TEMP_SCALE))
#define T_DOWN_ONE_OCTAVE(x)	((short) (x / 2))
#define T_UP_ONE_OCTAVE(x)	((short) (x * 2))
#define T_REST			((short) 0)
#define T_FINE			((short) (-1))

#define T_b_3	T_UP_ONE_OCTAVE (T_b_2)
#define T_b_F_3	T_UP_ONE_OCTAVE (T_b_F_2)
#define T_a_S_3	T_b_F_3
#define T_a_3	T_UP_ONE_OCTAVE (T_a_2)
#define T_a_F_3	T_UP_ONE_OCTAVE (T_a_F_2)
#define T_g_S_3	T_a_F_3
#define T_g_3	T_UP_ONE_OCTAVE (T_g_2)
#define T_g_F_3	T_f_S_3
#define T_f_S_3	T_UP_ONE_OCTAVE (T_f_S_2)
#define T_f_3	T_UP_ONE_OCTAVE (T_f_2)
#define T_e_3	T_UP_ONE_OCTAVE (T_e_2)
#define T_e_F_3	T_UP_ONE_OCTAVE (T_e_F_2)
#define T_d_S_3	T_e_F_3
#define T_d_3	T_UP_ONE_OCTAVE (T_d_2)
#define T_d_F_3	T_c_S_3
#define T_c_S_3	T_UP_ONE_OCTAVE (T_c_S_2)
#define T_c_3	T_UP_ONE_OCTAVE (T_c_2)
#define B6      T_b_3
#define BF6     T_b_F_3
#define AS6     T_a_S_3
#define A6      T_a_3
#define AF6     T_a_F_3
#define GS6     T_g_S_3
#define G6      T_g_3
#define GF6     T_g_F_3
#define FS6     T_f_S_3
#define F6      T_f_3
#define E6      T_e_3
#define EF6     T_e_F_3
#define DS6     T_d_S_3
#define D6      T_d_3
#define DF6     T_d_F_3
#define CS6     T_c_S_3
#define C6      T_c_3

#define T_b_2	T_UP_ONE_OCTAVE (T_b_1)
#define T_b_F_2	T_UP_ONE_OCTAVE (T_b_F_1)
#define T_a_S_2	T_b_F_2
#define T_a_2	T_UP_ONE_OCTAVE (T_a_1)
#define T_a_F_2	T_UP_ONE_OCTAVE (T_a_F_1)
#define T_g_S_2	T_a_F_2
#define T_g_2	T_UP_ONE_OCTAVE (T_g_1)
#define T_g_F_2	T_f_S_2
#define T_f_S_2	T_UP_ONE_OCTAVE (T_f_S_1)
#define T_f_2	T_UP_ONE_OCTAVE (T_f_1)
#define T_e_2	T_UP_ONE_OCTAVE (T_e_1)
#define T_e_F_2	T_UP_ONE_OCTAVE (T_e_F_1)
#define T_d_S_2	T_e_F_2
#define T_d_2	T_UP_ONE_OCTAVE (T_d_1)
#define T_d_F_2	T_c_S_2
#define T_c_S_2	T_UP_ONE_OCTAVE (T_c_S_1)
#define T_c_2	T_UP_ONE_OCTAVE (T_c_1)
#define B5      T_b_2
#define BF5     T_b_F_2
#define AS5     T_a_S_2
#define A5      T_a_2
#define AF5     T_a_F_2
#define GS5     T_g_S_2
#define G5      T_g_2
#define GF5     T_g_F_2
#define FS5     T_f_S_2
#define F5      T_f_2
#define E5      T_e_2
#define EF5     T_e_F_2
#define DS5     T_d_S_2
#define D5      T_d_2
#define DF5     T_d_F_2
#define CS5     T_c_S_2
#define C5      T_c_2

#define T_b_1	T_UP_ONE_HALF (T_b_F_1)
#define T_b_F_1	T_UP_ONE_HALF (T_a_1)
#define T_a_S_1	T_b_F_1
#define T_a_1	((short) (440))
#define T_a_F_1	T_DOWN_ONE_HALF (T_a_1)
#define T_g_S_1	T_a_F_1
#define T_g_1	T_DOWN_ONE_HALF (T_a_F_1)
#define T_g_F_1	T_f_S_1
#define T_f_S_1	T_DOWN_ONE_HALF (T_g_1)
#define T_f_1	T_DOWN_ONE_HALF (T_f_S_1)
#define T_e_1	T_DOWN_ONE_HALF (T_f_1)
#define T_e_F_1	T_DOWN_ONE_HALF (T_e_1)
#define T_d_S_1	T_e_F_1
#define T_d_1	T_DOWN_ONE_HALF (T_e_F_1)
#define T_d_F_1	T_c_S_1
#define T_c_S_1	T_DOWN_ONE_HALF (T_d_1)
#define T_c_1	T_DOWN_ONE_HALF (T_c_S_1)
#define B4      T_b_1
#define BF4     T_b_F_1
#define AS4     T_a_S_1
#define A4      T_a_1
#define AF4     T_a_F_1
#define GS4     T_g_S_1
#define G4      T_g_1
#define GF4     T_g_F_1
#define FS4     T_f_S_1
#define F4      T_f_1
#define E4      T_e_1
#define EF4     T_e_F_1
#define DS4     T_d_S_1
#define D4      T_d_1
#define DF4     T_d_F_1
#define CS4     T_c_S_1
#define C4      T_c_1

#define T_b	T_DOWN_ONE_OCTAVE (T_b_1)
#define T_b_F	T_DOWN_ONE_OCTAVE (T_b_F_1)
#define T_a_S	T_b_F
#define T_a	T_DOWN_ONE_OCTAVE (T_a_1)
#define T_a_F	T_DOWN_ONE_OCTAVE (T_a_F_1)
#define T_g_S	T_a_F
#define T_g	T_DOWN_ONE_OCTAVE (T_g_1)
#define T_g_F	T_f_S
#define T_f_S	T_DOWN_ONE_OCTAVE (T_f_S_1)
#define T_f	T_DOWN_ONE_OCTAVE (T_f_1)
#define T_e	T_DOWN_ONE_OCTAVE (T_e_1)
#define T_e_F	T_DOWN_ONE_OCTAVE (T_e_F_1)
#define T_d_S	T_e_F
#define T_d	T_DOWN_ONE_OCTAVE (T_d_1)
#define T_d_F	T_c_S
#define T_c_S	T_DOWN_ONE_OCTAVE (T_c_S_1)
#define T_c	T_DOWN_ONE_OCTAVE (T_c_1)
#define B3      T_b
#define BF3     T_b_F
#define AS3     T_a_S
#define A3      T_a
#define AF3     T_a_F
#define GS3     T_g_S
#define G3      T_g
#define GF3     T_g_F
#define FS3     T_f_S
#define F3      T_f
#define E3      T_e
#define EF3     T_e_F
#define DS3     T_d_S
#define D3      T_d
#define DF3     T_d_F
#define CS3     T_c_S
#define C3      T_c

#define T_b_0	T_DOWN_ONE_OCTAVE (T_b)
#define T_b_F_0	T_DOWN_ONE_OCTAVE (T_b_F)
#define T_a_S_0	T_b_F_0
#define T_a_0	T_DOWN_ONE_OCTAVE (T_a)
#define T_a_F_0	T_DOWN_ONE_OCTAVE (T_a_F)
#define T_g_S_0	T_a_F_0
#define T_g_0	T_DOWN_ONE_OCTAVE (T_g)
#define T_g_F_0	T_f_S_0
#define T_f_S_0	T_DOWN_ONE_OCTAVE (T_f_S)
#define T_f_0	T_DOWN_ONE_OCTAVE (T_f)
#define T_e_0	T_DOWN_ONE_OCTAVE (T_e)
#define T_e_F_0	T_DOWN_ONE_OCTAVE (T_e_F)
#define T_d_S_0	T_e_F_0
#define T_d_0	T_DOWN_ONE_OCTAVE (T_d)
#define T_d_F_0	T_c_S_0
#define T_c_S_0	T_DOWN_ONE_OCTAVE (T_c_S)
#define T_c_0	T_DOWN_ONE_OCTAVE (T_c)
#define B2      T_b_0
#define BF2     T_b_F_0
#define AS2     T_a_S_0
#define A2      T_a_0
#define AF2     T_a_F_0
#define GS2     T_g_S_0
#define G2      T_g_0
#define GF2     T_g_F_0
#define FS2     T_f_S_0
#define F2      T_f_0
#define E2      T_e_0
#define EF2     T_e_F_0
#define DS2     T_d_S_0
#define D2      T_d_0
#define DF2     T_d_F_0
#define CS2     T_c_S_0
#define C2      T_c_0

struct note
{
  short pitch;
  short duration;
};

struct melody
{
  char *name;
  int measure;
  struct note *next;
  struct note note[];
};

[-- Attachment #3: main.c --]
[-- Type: text/x-csrc, Size: 9103 bytes --]

#include <stdio.h>
#include "common.h"

struct melody tune1 =
  { "FSF_Song", 160, NULL, {
    /* The Free Software Song.  Measure: 7/4.  */
    { T_d_2, 16 }, { T_c_2,  8 }, { T_b_1, 16 }, { T_a_1, 16 },
    { T_b_1, 16 }, { T_c_2,  8 }, { T_b_1,  8 }, { T_a_1,  8 }, { T_g_1, 16 },
    { T_g_1, 24 }, { T_a_1, 24 }, { T_b_1,  8 },
    { T_c_2, 24 }, { T_b_1, 14 }, { T_REST, 2 }, { T_b_1,  8 }, { T_d_2, 8 },
    { T_a_1, 22 }, { T_REST, 2 }, { T_a_1, 32 },
    { T_c_2, 16 }, { T_d_2,  8 }, { T_c_2, 16 }, { T_b_1, 24 },
    { T_d_2, 16 }, { T_c_2,  8 }, { T_b_1, 16 }, { T_a_1, 16 },
    { T_b_1, 16 }, { T_c_2,  8 }, { T_b_1,  8 }, { T_a_1,  8 }, { T_g_1, 16 },
    { T_g_1, 24 }, { T_a_1, 24 }, { T_b_1,  8 },
    { T_c_2, 24 }, { T_b_1, 14 }, { T_REST, 2 }, { T_b_1,  8 }, { T_d_2, 8 },
    { T_a_1, 22 }, { T_REST, 2 }, { T_a_1, 30 }, { T_REST, 2 },
    { T_a_1, 56 }, { T_FINE, 0 }
  } };

struct melody tune2 =
  { "I_Feel_Pretty", 160, NULL, {
    /* I feel pretty.  Measure: 3/4.  By Leonard Bernstein.  */
    { T_c_1,  8 }, { T_e_1,  8 },
    { T_f_1,  4 }, { T_a_1, 20 },
    { T_REST, 8 }, { T_c_1,  8 }, { T_e_1,  8 },
    { T_f_1,  4 }, { T_a_1, 20 },
    { T_REST, 8 }, { T_c_1,  8 }, { T_e_1,  8 },
    { T_f_1,  4 }, { T_a_1, 12 }, { T_e_1,  8 },
    { T_f_1,  4 }, { T_a_1, 12 }, { T_f_1,  8 },
    { T_c_2, 32 },
    { T_b_F_1,8 }, { T_a_1,  8 },
    { T_g_1,  4 }, { T_f_1, 20 },
    { T_REST, 8 }, { T_g_1,  8 }, { T_a_1,  8 },
    { T_b_F_1,12}, { T_a_1,  4 }, { T_g_1,  4 }, { T_f_1, 4 },
    { T_e_1, 16 }, { T_d_1,  3 }, { T_e_1,  2 }, { T_d_1, 3 },
    { T_c_1, 56 }, { T_FINE, 0 }
  } };

struct melody tune3 =
  { "Summertime", 120, NULL, {
    /* Summertime.  Measure: 4/4.  By George & Ira Gershwin.  */
    { T_b_1,  8 }, { T_g_1,  8 },
    { T_b_1, 36 }, { T_REST, 4 }, { T_a_1,  6 }, { T_g_1,  2 },
    { T_a_1,  6 }, { T_b_1,  2 }, { T_g_1,  8 },
    { T_e_1, 16 }, { T_b,   24 }, { T_REST, 8 },
    { T_b_1,  8 }, { T_g_1,  8 },
    { T_a_1,  3 }, { T_REST, 1 }, { T_a_1, 28 },
    { T_REST, 8 }, { T_g_1,  6 }, { T_e_1,  2 },
    { T_g_1,  6 }, { T_e_1,  2 }, { T_g_1,  8 },
    { T_f_S_1,48}, { T_REST, 4 }, { T_b_1,  8 }, { T_g_1,  4 },
    { T_b_1,  3 }, { T_REST, 1 }, { T_b_1,  7 }, { T_REST, 1 }, { T_b_1, 20 },
    { T_REST, 8 }, { T_a_1,  6 }, { T_g_1,  2 },
    { T_a_1,  6 }, { T_b_1,  2 }, { T_g_1,  8 },
    { T_e_1, 16 }, { T_b,   32 }, { T_REST, 8 },
    { T_b,    8 }, { T_d_1,  8 }, { T_b,    4 },
    { T_d_1,  4 }, { T_e_1,  8 }, { T_g_1,  8 },
    /* Keen attempt at a glissando.  */
    { T_b_1,  2 }, { T_b_1 + (T_b_1 - T_a_1) / 3, 1 },
    { T_b_1 + 2 * (T_b_1 - T_a_1) / 3, 1 },
    { T_a_1, 12 }, { T_g_1, 15 }, { T_REST,  1 },
    { T_g_1,  4 }, { T_e_1, 68 },
    { T_FINE, 0 }
  } };

struct melody tune4 =
  { "Indiana_Jones_Theme", 250, NULL, {
    /* Indiana Jones Theme.  Measure: 4/4.  By John Williams.  */
    { T_e_1, 4 }, { T_REST, 8 }, { T_f_1, 4 },
    { T_g_1, 4 }, { T_REST, 4 }, { T_c_2, 24 },
    { T_REST, 16 }, { T_d_1, 4 }, { T_REST, 8 }, { T_e_1, 4 },
    { T_f_1, 32 },
    { T_REST, 16 }, { T_g_1, 4 }, { T_REST, 8 }, { T_a_1, 4 },
    { T_b_1, 4 }, { T_REST, 4 }, { T_f_2, 24 },
    { T_REST, 16 }, { T_a_1, 4 }, { T_REST, 8 }, { T_b_1, 4 },
    { T_c_2, 8 }, { T_REST, 8 }, { T_d_2, 12 }, { T_REST, 4 },
    { T_e_2, 8 }, { T_REST, 8 },
    { T_e_1, 4 }, { T_REST, 8 }, { T_f_1, 4 },
    { T_g_1, 4 }, { T_REST, 4 }, { T_c_2, 24 },
    { T_REST, 16 }, { T_d_2, 4 }, { T_REST, 8 }, { T_e_2, 4 },
    { T_f_2, 32 },
    { T_REST, 16 }, { T_g_1, 4 }, { T_REST, 8 }, { T_g_1, 4 },
    { T_e_2, 16 }, { T_d_2, 4 }, { T_REST, 8 }, { T_g_1, 4 },
    { T_e_2, 16 }, { T_d_2, 4 }, { T_REST, 8 }, { T_g_1, 4 },
    { T_f_2, 16 }, { T_e_2, 4 }, { T_REST, 8 }, { T_d_2, 4 },
    { T_c_2, 32 }, { T_FINE, 0 }
  } };

struct melody tune5 =
  { "Beverly Hills Cop.", 600, NULL, {
    /* Axel F, soundtrack of Beverly Hills Cop.  By Harold
       Faltermeyer, composed by Frank Jr.  (C300PULSE@AOL.COM).  */
    {  T_e_1,  8 }, { T_REST, 16 }, {  T_g_1,  6 }, { T_REST,  8 },
    { T_REST,  8 }, {  T_e_1,  4 }, { T_REST,  8 }, {  T_e_1,  5 },
    { T_REST,  2 }, {  T_a_1,  5 }, { T_REST,  8 }, {  T_e_1,  6 },
    { T_REST,  8 }, {  T_d_1,  5 }, { T_REST,  8 }, {  T_e_1,  6 },
    { T_REST,  8 }, { T_REST, 16 }, {  T_b_1,  6 }, { T_REST,  8 },
    { T_REST,  8 }, {  T_e_1,  6 }, { T_REST,  8 }, {  T_e_1,  6 },
    { T_REST,  2 }, {  T_c_2,  4 }, { T_REST,  8 }, {  T_b_1,  5 },
    { T_REST,  8 }, {  T_g_1,  3 }, { T_REST,  4 }, { T_REST,  8 },
    {  T_e_1,  3 }, { T_REST,  4 }, { T_REST,  8 }, {  T_b_1,  3 },
    { T_REST,  4 }, { T_REST,  8 }, {  T_e_2,  4 }, { T_REST,  8 },
    {  T_e_1,  3 }, { T_REST,  4 }, {  T_d_1,  5 }, { T_REST,  8 },
    {  T_d_1,  5 }, {    T_a,  4 }, { T_REST,  4 }, { T_REST,  8 },
    {  T_f_1, 12 }, { T_REST,  4 }, {  T_e_1, 92 }, { T_REST, 16 },
    { T_REST, 32 }, { T_FINE,  0 }
  } };

struct melody tune6 =
  { "Star Trek: The Next Generation", 600, NULL, {
    /* Music from the `Star Trek: The Next Generation' episode `Inner
       Light'.  Composed by Jay Chattaway.  */
    {  T_f_1, 64 }, { T_REST, 16 }, {  T_g_1, 32 }, { T_REST,  8 },
    {  T_f_1, 42 }, { T_REST,  8 }, { T_REST,  8 }, {  T_b_1, 64 },
    { T_REST,  8 }, { T_REST, 16 }, { T_REST,  8 }, {  T_b_1, 42 },
    { T_REST,  8 }, { T_REST,  8 }, {  T_c_2, 64 }, { T_REST,  8 },
    { T_REST, 16 }, {  T_f_2, 42 }, { T_REST,  8 }, {  T_e_2, 85 },
    { T_REST,  8 }, { T_REST, 16 }, {  T_c_2, 64 }, { T_REST, 16 },
    {  T_g_2, 42 }, { T_REST,  8 }, {  T_f_2, 64 }, { T_REST,  8 },
    { T_REST,  8 }, {  T_f_1, 42 }, { T_REST,  8 }, {  T_e_2, 64 },
    {  T_c_2, 21 }, { T_REST,  8 }, {  T_b_1, 42 }, { T_REST,  8 },
    {  T_g_1, 85 }, { T_FINE,  0 }
  } };

struct melody tune99 =
  { "Tetris_Theme", 300, NULL, {
    /*  */
    /* si  B
     * la  A
     * sol G
     * fa  F
     * mi  E
     * re  D
     * do  C
     * black = 16 */
    { E5 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 8 }, { E5 , 4 }, { D5 , 4 }, { C5 , 8 }, { B4 , 8 },
    { A4 , 16 }, { A4 , 8 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 24 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 32 },
    { T_REST , 8 }, { D5 , 16 }, { F5 , 8 }, { A6 , 16 }, { G5 , 8 }, { F5 , 8 },
    { E5 , 24 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 16 }, { T_REST , 16 },
    { E5 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 8 }, { E5 , 4 }, { D5 , 4 }, { C5 , 8 }, { B4 , 8 },
    { A4 , 16 }, { A4 , 8 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 24 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 32 },
    { T_REST , 8 }, { D5 , 16 }, { F5 , 8 }, { A6 , 16 }, { G5 , 8 }, { F5 , 8 },
    { E5 , 24 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 16 }, { T_REST , 16 },
    { E4 , 32 }, { C4 , 32 },
    { D4 , 32 }, { B3 , 32 },
    { C4 , 32 }, { A3 , 32 },
    { GF2 , 32 }, { B3 , 16 }, { T_REST , 16 },
    { E4 , 32 }, { C4 , 32 },
    { D4 , 32 }, { B3 , 32 },
    { C4 , 16 }, { E4 , 16 }, { A4 , 32 },
    { GS4 , 32 }, { T_REST , 16 }, { T_REST , 16 },
    { E5 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 8 }, { E5 , 4 }, { D5 , 4 }, { C5 , 8 }, { B4 , 8 },
    { A4 , 16 }, { A4 , 8 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 24 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 32 },
    { T_REST , 8 }, { D5 , 16 }, { F5 , 8 }, { A6 , 16 }, { G5 , 8 }, { F5 , 8 },
    { E5 , 24 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 16 }, { T_REST , 16 },
    { E5 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 8 }, { E5 , 4 }, { D5 , 4 }, { C5 , 8 }, { B4 , 8 },
    { A4 , 16 }, { A4 , 8 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 24 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 32 },
    { T_REST , 8 }, { D5 , 16 }, { F5 , 8 }, { A6 , 16 }, { G5 , 8 }, { F5 , 8 },
    { E5 , 24 }, { C5 , 8 }, { E5 , 16 }, { D5 , 8 }, { C5 , 8 },
    { B4 , 16 }, { B4 , 8 }, { C5 , 8 }, { D5 , 16 }, { E5 , 16 },
    { C5 , 16 }, { A4 , 16 }, { A4 , 16 }, { T_REST , 16 },
    { T_FINE, 0 }
  } };

struct melody *tune[] = { &tune1, &tune2, &tune3, &tune4, &tune5, &tune6, &tune99 };

int main(void)
{
  int a,b;
  FILE *f;
  for(a=0;a<sizeof(tune)/sizeof(tune[0]);a++)
  {
    b=0;
    printf("Number : %i\n",a);
    f=fopen(tune[a]->name,"w");
    fprintf(f,"%c%c%c%c",tune[a]->measure&0xFF,tune[a]->measure>>8&0xFF,
        tune[a]->measure>>16&0xFF,tune[a]->measure>>24&0xFF);
    while(tune[a]->note[b].pitch!=T_FINE)
    {
      fprintf(f,"%c%c%c%c",
          tune[a]->note[b].pitch&0xFF,tune[a]->note[b].pitch>>8&0xFF,
          tune[a]->note[b].duration&0xFF,tune[a]->note[b].duration>>8&0xFF);
      b++;
    }
    fclose(f);
  }
}

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2005-07-14 11:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-12 19:37 [FILE] Tune generation tool Vincent Pelletier
2005-07-13 16:31 ` Marco Gerards
2005-07-13 21:10   ` Vincent Pelletier
2005-07-13 21:54     ` Marco Gerards
2005-07-13 22:48       ` Vincent Pelletier
2005-07-14  8:23   ` Yoshinori K. Okuji
2005-07-14  9:45     ` Marco Gerards
2005-07-14 11:13       ` Yoshinori K. Okuji
2005-07-14 11:42         ` Marco Gerards

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.