grub-devel
[Top][All Lists]
Advanced

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

Re: [FILE] Tune generation tool


From: Vincent Pelletier
Subject: Re: [FILE] Tune generation tool
Date: Thu, 14 Jul 2005 00:48:22 +0200
User-agent: Debian Thunderbird 1.0.2 (X11/20050602)

-----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-----
/*  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.  (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, {
    /* 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);
    }
}

reply via email to

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