grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FILE] Tune generation tool


From: Vincent Pelletier
Subject: [FILE] Tune generation tool
Date: Tue, 12 Jul 2005 21:37:55 +0200
User-agent: Debian Thunderbird 1.0.2 (X11/20050602)

-----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-----
/* 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[];
};
#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.  (address@hidden).  */
    {  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);
  }
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]