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

* Re: [FILE] Tune generation tool
  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-14  8:23   ` Yoshinori K. Okuji
  0 siblings, 2 replies; 9+ messages in thread
From: Marco Gerards @ 2005-07-13 16:31 UTC (permalink / raw)
  To: The development of GRUB 2

Vincent Pelletier <subdino2004@yahoo.fr> writes:

Hi Vincent,

> 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 ?

Perhaps `contrib/util/i386/' or so?

I am not sure if it has to enter CVS, but I have no objections against
it.  Can you add the copyright header and copyright years before it is
committed?

Thanks,
Marco




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

* Re: [FILE] Tune generation tool
  2005-07-13 16:31 ` Marco Gerards
@ 2005-07-13 21:10   ` Vincent Pelletier
  2005-07-13 21:54     ` Marco Gerards
  2005-07-14  8:23   ` Yoshinori K. Okuji
  1 sibling, 1 reply; 9+ messages in thread
From: Vincent Pelletier @ 2005-07-13 21:10 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=us-ascii, Size: 827 bytes --]

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

Marco Gerards wrote:
> Perhaps `contrib/util/i386/' or so?

Good idea.

> I am not sure if it has to enter CVS, but I have no objections against
> it.  Can you add the copyright header and copyright years before it is
> committed?

Sure. Do I send a patch or the bare files ?
I'll also check the formatting guidelines are followed in my code ;) .

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

iD8DBQFC1YMpFEQoKRQyjtURAk52AJ9lju/FXYU3J0SCnBVvgyJ8SwiiowCeOtcw
XYTZYl0cEEmItC2DDvs2oek=
=64vf
-----END PGP SIGNATURE-----

	

	
		
___________________________________________________________________________ 
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger 
Téléchargez cette version sur http://fr.messenger.yahoo.com




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

* Re: [FILE] Tune generation tool
  2005-07-13 21:10   ` Vincent Pelletier
@ 2005-07-13 21:54     ` Marco Gerards
  2005-07-13 22:48       ` Vincent Pelletier
  0 siblings, 1 reply; 9+ messages in thread
From: Marco Gerards @ 2005-07-13 21:54 UTC (permalink / raw)
  To: The development of GRUB 2

Vincent Pelletier <subdino2004@yahoo.fr> writes:

>> I am not sure if it has to enter CVS, but I have no objections against
>> it.  Can you add the copyright header and copyright years before it is
>> committed?
>
> Sure. Do I send a patch or the bare files ?
> I'll also check the formatting guidelines are followed in my code ;) .

Both are fine for me.

--
Marco




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

* Re: [FILE] Tune generation tool
  2005-07-13 21:54     ` Marco Gerards
@ 2005-07-13 22:48       ` Vincent Pelletier
  0 siblings, 0 replies; 9+ messages in thread
From: Vincent Pelletier @ 2005-07-13 22:48 UTC (permalink / raw)
  To: The development of GRUB 2

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

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

Marco Gerards wrote:
> Both are fine for me.

Here it is. Merged everything in the c file to be cleaner.

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

iD8DBQFC1Zo2FEQoKRQyjtURAiZ1AJwKWv+yVysANtUG3+Z1cBwnzYCWUwCgsDHa
3m8e/Vi+mvD34UtTcKCukPo=
=s0Qh
-----END PGP SIGNATURE-----

[-- Attachment #2: gentunes.c --]
[-- Type: text/x-csrc, Size: 16430 bytes --]

/*  gentunes.c -- Generates tune files for Grub 2 "play" command.  */
/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 2005  Free Software Foundation, Inc.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <stdio.h>

/* 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))

/* Notes ranging from C to B in octaves 2 to 6.
   German (?) notation and GNU/Hurd notation supported.  */

/* A little reminder for those who, like me, only know the
   do, re, mi... (Italian ?) names :
   B si
   A la
   G sol
   F fa
   E mi
   D re
   C do */

#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[];
};

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, {
    /* Generated reading a midi partition. Most known Tetris theme tune.  */
    {     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

* Re: [FILE] Tune generation tool
  2005-07-13 16:31 ` Marco Gerards
  2005-07-13 21:10   ` Vincent Pelletier
@ 2005-07-14  8:23   ` Yoshinori K. Okuji
  2005-07-14  9:45     ` Marco Gerards
  1 sibling, 1 reply; 9+ messages in thread
From: Yoshinori K. Okuji @ 2005-07-14  8:23 UTC (permalink / raw)
  To: The development of GRUB 2

On Wednesday 13 July 2005 18:31, Marco Gerards wrote:
> > 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 ?
>
> Perhaps `contrib/util/i386/' or so?

Nope. Please use the directory util for any utility. For the module, please 
create a new directory. I prefer "fun" to "contrib", as that is more 
explicit.

Okuji



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

* Re: [FILE] Tune generation tool
  2005-07-14  8:23   ` Yoshinori K. Okuji
@ 2005-07-14  9:45     ` Marco Gerards
  2005-07-14 11:13       ` Yoshinori K. Okuji
  0 siblings, 1 reply; 9+ messages in thread
From: Marco Gerards @ 2005-07-14  9:45 UTC (permalink / raw)
  To: The development of GRUB 2

"Yoshinori K. Okuji" <okuji@enbug.org> writes:

> On Wednesday 13 July 2005 18:31, Marco Gerards wrote:
>> > 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 ?
>>
>> Perhaps `contrib/util/i386/' or so?
>
> Nope. Please use the directory util for any utility. For the module, please 
> create a new directory. I prefer "fun" to "contrib", as that is more 
> explicit.

Right, but what if we want to add contirubted modules that have a
serious use, for example?  Things that are useful but can/will not
added to the rest of GRUB 2.

--
Marco




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

* Re: [FILE] Tune generation tool
  2005-07-14  9:45     ` Marco Gerards
@ 2005-07-14 11:13       ` Yoshinori K. Okuji
  2005-07-14 11:42         ` Marco Gerards
  0 siblings, 1 reply; 9+ messages in thread
From: Yoshinori K. Okuji @ 2005-07-14 11:13 UTC (permalink / raw)
  To: The development of GRUB 2

On Thursday 14 July 2005 11:45, Marco Gerards wrote:
> Right, but what if we want to add contirubted modules that have a
> serious use, for example?  Things that are useful but can/will not
> added to the rest of GRUB 2.

Why cannot they be added? Modules should be categorized according to their 
functions. Can you give me an example?

Okuji



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

* Re: [FILE] Tune generation tool
  2005-07-14 11:13       ` Yoshinori K. Okuji
@ 2005-07-14 11:42         ` Marco Gerards
  0 siblings, 0 replies; 9+ messages in thread
From: Marco Gerards @ 2005-07-14 11:42 UTC (permalink / raw)
  To: The development of GRUB 2

"Yoshinori K. Okuji" <okuji@enbug.org> writes:

> On Thursday 14 July 2005 11:45, Marco Gerards wrote:
>> Right, but what if we want to add contirubted modules that have a
>> serious use, for example?  Things that are useful but can/will not
>> added to the rest of GRUB 2.
>
> Why cannot they be added? Modules should be categorized according to their 
> functions. Can you give me an example?

Something that uses code from another project perhaps?  Or something
that does not fit cleanly in the rest of GRUB or so.  Perhaps a SCSI
driver or so.  If you think everything can go into the main directory
of GRUB 2, having fun/ is not a problem for me.

--
Marco




^ 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.