OSDN Git Service

TiMidity++-2.11.0-pre3
authorMasanao Izumo <mo@goice.co.jp>
Thu, 20 Dec 2001 13:16:55 +0000 (22:16 +0900)
committerMasanao Izumo <mo@goice.co.jp>
Thu, 20 Dec 2001 13:16:55 +0000 (22:16 +0900)
35 files changed:
ChangeLog
TODO
acinclude.m4
aclocal.m4
configs/msc-config.h
configure
configure.in
doc/C/timidity.1
interface/Makefile.in
interface/dumb_c.c
interface/ncurs_c.c
interface/slang_c.c
interface/w32g_ini.c
interface/w32g_pref.c
interface/w32g_res.h
interface/w32g_res.rc
interface/w32g_utl.c
interface/w32g_utl.h
interface/xaw_c.c
interface/xskin_c.c
timidity/common.c
timidity/mix.c
timidity/mod.c
timidity/playmidi.c
timidity/playmidi.h
timidity/readmidi.c
timidity/readmidi.h
timidity/reverb.h
timidity/sffile.h
timidity/sndfont.c
timidity/sun_a.c
timidity/tables.c
timidity/tables.h
timidity/timidity.h
utils/support.h

index 4039d7a..ff35a8f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,65 @@
+2001-12-20  Masanao Izumo <mo@goice.co.jp>
+
+       * timidity/playmidi.c: Bug fix.
+       * interface/ncurs_c.c: Chaged from 3 to 4 digits in audio queue
+         monitor.
+       * timidity/common.c: Fixed security probrem
+
+2001-11-28  Miloslav Trmac <mitr@volny.cz>
+
+       * interface/{dumb_c.c,slang_c.c,xaw_c.c,xskin_c.c}:
+         Fixed some probrems.
+
+2001-11-19  Eric A. Welsh <ewelsh@ccb.wustl.edu>
+
+       * timidity/playmidi.c:
+         Fixed a bug and reduced voice cancellation in Chorus Mode 2.
+         Mod files and drums can still cancel on some full Left/Right pans.
+
+       * timidity/mod.c:
+         Portas are now handled correctly for Ultimate Soundtracker mods.
+
+
+2001-11-10  Daisuke Nagano <breeze.nagano@nifty.ne.jp>
+
+       * doc/C/timidity.1: Updated.
+       
+2001-11-05  Saito <timidity@flashmail.com>
+
+       * timidity/sndfont.c:
+         Updates do_lowpass().
+
+2001-10-25  Takashi Iwai <tiwai@suse.de>
+
+       * timidity/sndfont.c: Bug fix.
+
+2001-10-23  Lalit Chhabra <LChhabra@iee.org>
+
+       * timidity/sun_a.c:
+         Modified the sun_a.c file so that it checks for the AUDIODEV
+         environment variable and sets the sun audio device accordingly.
+
+2001-10-19  Saito <timidity@flashmail.com>
+
+       * timidity/{mix.c,mix.h,playmidi.c,playmidi.h,readmidi.c,readmidi.h,
+         reverb.c,reverb.h,tables.c,tables.h}:
+       - Updates Win32GUI version.
+       - Improved GS SysEx
+       - Added attack/release/decay-time(CC/NRPN tone/NRPN dram)
+       - Added drum level
+       - Added CC#94 pseudo delay (like chorus method)
+       - Adjusted reverb level
+       - Added resonance filter
+       - Modified enverope attack
+       - Adjusted velocity
+       - Supported user drumset (SC-88)
+       - Added some GS SysEx'es.
+
+2001-10-10  Frederic LOYER <loyer@ensta.fr>
+
+       * timidity/sffile.h: Bug fix.
+         Change uint8 pitchCorrection to int8 pitchCorrection.
+       
 2001-10-09  Masanao Izumo <mo@goice.co.jp>
 
        * Windows: Use w32_a.c instead of w32g_a.c
@@ -13,6 +75,8 @@
          - autoconf 2.52
          - libtool 1.4.2
 
+
+
 2001-06-25  Forever shall I be. <zinx@magenet.net>
 
        * Vorbis 1.0 support.
diff --git a/TODO b/TODO
index da5483a..8e888ec 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,3 +5,35 @@ BUG:
 
 - The tcl interface doesn't like filenames with white space.
   (but doesn't mind if it happens in the config file ?).
+
+Private notes:
+
+@mail 35
+timidity-io.c:
+http://www.mega-tokyo.com/cgi-bin/yabb/YaBB.pl?board=SIERRA_AGI_SCI&action=display&num=990734937
+
+SEQ_DEFINEBUF(128); 
+#define seqbuf_dump timidity_seqbuf_dump
+
+¤È¤¤¤¦¹Ô¤òÁÞÆþ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡©
+
+@mail 36
+BSD ¥é¥¤¥»¥ó¥¹¤Ç»È¤¤¤¿¤¤¡£
+
+@mail 37
+timidity -idqqqqqqq /home/bryce/tmp/test.midi
+¤Ç¤â
+mcop warning: user defined signal handler found for SIG_PIPE, overriding
+¤Èɽ¼¨¤µ¤ì¤Æ¤·¤Þ¤¦¡£
+
+-> 'q' ¥ª¥×¥·¥ç¥ó¤¬Â¿¤¤¤È¤­¤Ï stderr,stdout ¤ò /dev/null ¤Ë¥ê¥À¥¤¥ì¥¯¥È
+
+@mail 41
+alsa 0.9 Âбþ
+
+@mail 46
+-io ¤È¤¤¤¦ organ ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òºî¤ê¤¿¤¤¡£
+#define INTERACTIVE_INTERFACE_IDS "kmqagrwA"
+
+¤Ë o ¤òÄɲ䷤ʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Î¡©
+
index d9935a1..9a0449d 100644 (file)
@@ -751,3 +751,206 @@ main ()
 ])
 
 # end of gtk.m4
+
+
+# Configure paths for libogg
+# Jack Moffitt <jack@icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl AM_PATH_OGG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libogg, and define OGG_CFLAGS and OGG_LIBS
+dnl
+AC_DEFUN(AM_PATH_OGG,
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(ogg-prefix,[  --with-ogg-prefix=PFX   Prefix where libogg is installed (optional)], ogg_prefix="$withval", ogg_prefix="")
+AC_ARG_ENABLE(oggtest, [  --disable-oggtest       Do not try to compile and run a test Ogg program],, enable_oggtest=yes)
+
+  if test "x$ogg_prefix" != "x"; then
+    ogg_args="$ogg_args --prefix=$ogg_prefix"
+    OGG_CFLAGS="-I$ogg_prefix/include"
+    OGG_LIBS="-L$ogg_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    ogg_args="$ogg_args --prefix=$prefix"
+    OGG_CFLAGS="-I$prefix/include"
+    OGG_LIBS="-L$prefix/lib"
+  fi
+
+  OGG_LIBS="$OGG_LIBS -logg"
+
+  AC_MSG_CHECKING(for Ogg)
+  no_ogg=""
+
+
+  if test "x$enable_oggtest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Ogg is sufficiently new.
+dnl
+      rm -f conf.oggtest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+int main ()
+{
+  system("touch conf.oggtest");
+  return 0;
+}
+
+],, no_ogg=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ogg" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.oggtest ; then
+       :
+     else
+       echo "*** Could not run Ogg test program, checking why..."
+       CFLAGS="$CFLAGS $OGG_CFLAGS"
+       LIBS="$LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <ogg/ogg.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
+       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
+       echo "*** or that you have moved Ogg since it was installed. In the latter case, you"
+       echo "*** may want to edit the ogg-config script: $OGG_CONFIG" ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OGG_CFLAGS=""
+     OGG_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(OGG_CFLAGS)
+  AC_SUBST(OGG_LIBS)
+  rm -f conf.oggtest
+])
+
+# end of ogg.m4
+
+
+# Configure paths for libvorbis
+# Jack Moffitt <jack@icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl AM_PATH_VORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libvorbis, and define VORBIS_CFLAGS and VORBIS_LIBS
+dnl
+AC_DEFUN(AM_PATH_VORBIS,
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(vorbis-prefix,[  --with-vorbis-prefix=PFX   Prefix where libvorbis is installed (optional)], vorbis_prefix="$withval", vorbis_prefix="")
+AC_ARG_ENABLE(vorbistest, [  --disable-vorbistest       Do not try to compile and run a test Vorbis program],, enable_vorbistest=yes)
+
+  if test "x$vorbis_prefix" != "x" ; then
+    vorbis_args="$vorbis_args --prefix=$vorbis_prefix"
+    VORBIS_CFLAGS="-I$vorbis_prefix/include"
+    VORBIS_LIBDIR="-L$vorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    vorbis_args="$vorbis_args --prefix=$prefix"
+    VORBIS_CFLAGS="-I$prefix/include"
+    VORBIS_LIBDIR="-L$prefix/lib"
+  fi
+
+  VORBIS_LIBS="$VORBIS_LIBDIR -lvorbis -lm"
+  VORBISFILE_LIBS="-lvorbisfile"
+  VORBISENC_LIBS="-lvorbisenc"
+
+  AC_MSG_CHECKING(for Vorbis)
+  no_vorbis=""
+
+
+  if test "x$enable_vorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+    LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Vorbis is sufficiently new.
+dnl
+      rm -f conf.vorbistest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vorbis/codec.h>
+
+int main ()
+{
+  system("touch conf.vorbistest");
+  return 0;
+}
+
+],, no_vorbis=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_vorbis" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.vorbistest ; then
+       :
+     else
+       echo "*** Could not run Vorbis test program, checking why..."
+       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <vorbis/codec.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
+       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
+       echo "*** or that you have moved Vorbis since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     VORBIS_CFLAGS=""
+     VORBIS_LIBS=""
+     VORBISFILE_LIBS=""
+     VORBISENC_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(VORBIS_CFLAGS)
+  AC_SUBST(VORBIS_LIBS)
+  AC_SUBST(VORBISFILE_LIBS)
+  AC_SUBST(VORBISENC_LIBS)
+  rm -f conf.vorbistest
+])
+
+# end of vorbis.m4
\ No newline at end of file
index c7f20ff..31ae557 100644 (file)
@@ -765,6 +765,208 @@ main ()
 
 # end of gtk.m4
 
+
+# Configure paths for libogg
+# Jack Moffitt <jack@icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl AM_PATH_OGG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libogg, and define OGG_CFLAGS and OGG_LIBS
+dnl
+AC_DEFUN(AM_PATH_OGG,
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(ogg-prefix,[  --with-ogg-prefix=PFX   Prefix where libogg is installed (optional)], ogg_prefix="$withval", ogg_prefix="")
+AC_ARG_ENABLE(oggtest, [  --disable-oggtest       Do not try to compile and run a test Ogg program],, enable_oggtest=yes)
+
+  if test "x$ogg_prefix" != "x"; then
+    ogg_args="$ogg_args --prefix=$ogg_prefix"
+    OGG_CFLAGS="-I$ogg_prefix/include"
+    OGG_LIBS="-L$ogg_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    ogg_args="$ogg_args --prefix=$prefix"
+    OGG_CFLAGS="-I$prefix/include"
+    OGG_LIBS="-L$prefix/lib"
+  fi
+
+  OGG_LIBS="$OGG_LIBS -logg"
+
+  AC_MSG_CHECKING(for Ogg)
+  no_ogg=""
+
+
+  if test "x$enable_oggtest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Ogg is sufficiently new.
+dnl
+      rm -f conf.oggtest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+int main ()
+{
+  system("touch conf.oggtest");
+  return 0;
+}
+
+],, no_ogg=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ogg" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.oggtest ; then
+       :
+     else
+       echo "*** Could not run Ogg test program, checking why..."
+       CFLAGS="$CFLAGS $OGG_CFLAGS"
+       LIBS="$LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <ogg/ogg.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
+       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
+       echo "*** or that you have moved Ogg since it was installed. In the latter case, you"
+       echo "*** may want to edit the ogg-config script: $OGG_CONFIG" ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OGG_CFLAGS=""
+     OGG_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(OGG_CFLAGS)
+  AC_SUBST(OGG_LIBS)
+  rm -f conf.oggtest
+])
+
+# end of ogg.m4
+
+
+# Configure paths for libvorbis
+# Jack Moffitt <jack@icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl AM_PATH_VORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libvorbis, and define VORBIS_CFLAGS and VORBIS_LIBS
+dnl
+AC_DEFUN(AM_PATH_VORBIS,
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(vorbis-prefix,[  --with-vorbis-prefix=PFX   Prefix where libvorbis is installed (optional)], vorbis_prefix="$withval", vorbis_prefix="")
+AC_ARG_ENABLE(vorbistest, [  --disable-vorbistest       Do not try to compile and run a test Vorbis program],, enable_vorbistest=yes)
+
+  if test "x$vorbis_prefix" != "x" ; then
+    vorbis_args="$vorbis_args --prefix=$vorbis_prefix"
+    VORBIS_CFLAGS="-I$vorbis_prefix/include"
+    VORBIS_LIBDIR="-L$vorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    vorbis_args="$vorbis_args --prefix=$prefix"
+    VORBIS_CFLAGS="-I$prefix/include"
+    VORBIS_LIBDIR="-L$prefix/lib"
+  fi
+
+  VORBIS_LIBS="$VORBIS_LIBDIR -lvorbis -lm"
+  VORBISFILE_LIBS="-lvorbisfile"
+  VORBISENC_LIBS="-lvorbisenc"
+
+  AC_MSG_CHECKING(for Vorbis)
+  no_vorbis=""
+
+
+  if test "x$enable_vorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+    LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Vorbis is sufficiently new.
+dnl
+      rm -f conf.vorbistest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vorbis/codec.h>
+
+int main ()
+{
+  system("touch conf.vorbistest");
+  return 0;
+}
+
+],, no_vorbis=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_vorbis" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.vorbistest ; then
+       :
+     else
+       echo "*** Could not run Vorbis test program, checking why..."
+       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <vorbis/codec.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
+       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
+       echo "*** or that you have moved Vorbis since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     VORBIS_CFLAGS=""
+     VORBIS_LIBS=""
+     VORBISFILE_LIBS=""
+     VORBISENC_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(VORBIS_CFLAGS)
+  AC_SUBST(VORBIS_LIBS)
+  AC_SUBST(VORBISFILE_LIBS)
+  AC_SUBST(VORBISENC_LIBS)
+  rm -f conf.vorbistest
+])
+
+# end of vorbis.m4
 # serial 3
 
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
@@ -1340,200 +1542,3 @@ AC_DEFUN([AM_PATH_LISPDIR],
  ])
  AC_SUBST(lispdir)])
 
-# Configure paths for libogg
-# Jack Moffitt <jack@icecast.org> 10-21-2000
-# Shamelessly stolen from Owen Taylor and Manish Singh
-
-dnl AM_PATH_OGG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Test for libogg, and define OGG_CFLAGS and OGG_LIBS
-dnl
-AC_DEFUN(AM_PATH_OGG,
-[dnl 
-dnl Get the cflags and libraries
-dnl
-AC_ARG_WITH(ogg-prefix,[  --with-ogg-prefix=PFX   Prefix where libogg is installed (optional)], ogg_prefix="$withval", ogg_prefix="")
-AC_ARG_ENABLE(oggtest, [  --disable-oggtest       Do not try to compile and run a test Ogg program],, enable_oggtest=yes)
-
-  if test "x$ogg_prefix" != "x"; then
-    ogg_args="$ogg_args --prefix=$ogg_prefix"
-    OGG_CFLAGS="-I$ogg_prefix/include"
-    OGG_LIBS="-L$ogg_prefix/lib"
-  elif test "x$prefix" != "xNONE"; then
-    ogg_args="$ogg_args --prefix=$prefix"
-    OGG_CFLAGS="-I$prefix/include"
-    OGG_LIBS="-L$prefix/lib"
-  fi
-
-  OGG_LIBS="$OGG_LIBS -logg"
-
-  AC_MSG_CHECKING(for Ogg)
-  no_ogg=""
-
-
-  if test "x$enable_oggtest" = "xyes" ; then
-    ac_save_CFLAGS="$CFLAGS"
-    ac_save_LIBS="$LIBS"
-    CFLAGS="$CFLAGS $OGG_CFLAGS"
-    LIBS="$LIBS $OGG_LIBS"
-dnl
-dnl Now check if the installed Ogg is sufficiently new.
-dnl
-      rm -f conf.oggtest
-      AC_TRY_RUN([
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ogg/ogg.h>
-
-int main ()
-{
-  system("touch conf.oggtest");
-  return 0;
-}
-
-],, no_ogg=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-  fi
-
-  if test "x$no_ogg" = "x" ; then
-     AC_MSG_RESULT(yes)
-     ifelse([$1], , :, [$1])     
-  else
-     AC_MSG_RESULT(no)
-     if test -f conf.oggtest ; then
-       :
-     else
-       echo "*** Could not run Ogg test program, checking why..."
-       CFLAGS="$CFLAGS $OGG_CFLAGS"
-       LIBS="$LIBS $OGG_LIBS"
-       AC_TRY_LINK([
-#include <stdio.h>
-#include <ogg/ogg.h>
-],     [ return 0; ],
-       [ echo "*** The test program compiled, but did not run. This usually means"
-       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
-       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
-       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-       echo "*** is required on your system"
-       echo "***"
-       echo "*** If you have an old version installed, it is best to remove it, although"
-       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
-       [ echo "*** The test program failed to compile or link. See the file config.log for the"
-       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
-       echo "*** or that you have moved Ogg since it was installed. In the latter case, you"
-       echo "*** may want to edit the ogg-config script: $OGG_CONFIG" ])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-     fi
-     OGG_CFLAGS=""
-     OGG_LIBS=""
-     ifelse([$2], , :, [$2])
-  fi
-  AC_SUBST(OGG_CFLAGS)
-  AC_SUBST(OGG_LIBS)
-  rm -f conf.oggtest
-])
-
-# Configure paths for libvorbis
-# Jack Moffitt <jack@icecast.org> 10-21-2000
-# Shamelessly stolen from Owen Taylor and Manish Singh
-
-dnl AM_PATH_VORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Test for libvorbis, and define VORBIS_CFLAGS and VORBIS_LIBS
-dnl
-AC_DEFUN(AM_PATH_VORBIS,
-[dnl 
-dnl Get the cflags and libraries
-dnl
-AC_ARG_WITH(vorbis-prefix,[  --with-vorbis-prefix=PFX   Prefix where libvorbis is installed (optional)], vorbis_prefix="$withval", vorbis_prefix="")
-AC_ARG_ENABLE(vorbistest, [  --disable-vorbistest       Do not try to compile and run a test Vorbis program],, enable_vorbistest=yes)
-
-  if test "x$vorbis_prefix" != "x" ; then
-    vorbis_args="$vorbis_args --prefix=$vorbis_prefix"
-    VORBIS_CFLAGS="-I$vorbis_prefix/include"
-    VORBIS_LIBDIR="-L$vorbis_prefix/lib"
-  elif test "x$prefix" != "xNONE"; then
-    vorbis_args="$vorbis_args --prefix=$prefix"
-    VORBIS_CFLAGS="-I$prefix/include"
-    VORBIS_LIBDIR="-L$prefix/lib"
-  fi
-
-  VORBIS_LIBS="$VORBIS_LIBDIR -lvorbis -lm"
-  VORBISFILE_LIBS="-lvorbisfile"
-  VORBISENC_LIBS="-lvorbisenc"
-
-  AC_MSG_CHECKING(for Vorbis)
-  no_vorbis=""
-
-
-  if test "x$enable_vorbistest" = "xyes" ; then
-    ac_save_CFLAGS="$CFLAGS"
-    ac_save_LIBS="$LIBS"
-    CFLAGS="$CFLAGS $VORBIS_CFLAGS"
-    LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
-dnl
-dnl Now check if the installed Vorbis is sufficiently new.
-dnl
-      rm -f conf.vorbistest
-      AC_TRY_RUN([
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <vorbis/codec.h>
-
-int main ()
-{
-  system("touch conf.vorbistest");
-  return 0;
-}
-
-],, no_vorbis=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-  fi
-
-  if test "x$no_vorbis" = "x" ; then
-     AC_MSG_RESULT(yes)
-     ifelse([$1], , :, [$1])     
-  else
-     AC_MSG_RESULT(no)
-     if test -f conf.vorbistest ; then
-       :
-     else
-       echo "*** Could not run Vorbis test program, checking why..."
-       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
-       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
-       AC_TRY_LINK([
-#include <stdio.h>
-#include <vorbis/codec.h>
-],     [ return 0; ],
-       [ echo "*** The test program compiled, but did not run. This usually means"
-       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
-       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
-       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-       echo "*** is required on your system"
-       echo "***"
-       echo "*** If you have an old version installed, it is best to remove it, although"
-       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
-       [ echo "*** The test program failed to compile or link. See the file config.log for the"
-       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
-       echo "*** or that you have moved Vorbis since it was installed." ])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-     fi
-     VORBIS_CFLAGS=""
-     VORBIS_LIBS=""
-     VORBISFILE_LIBS=""
-     VORBISENC_LIBS=""
-     ifelse([$2], , :, [$2])
-  fi
-  AC_SUBST(VORBIS_CFLAGS)
-  AC_SUBST(VORBIS_LIBS)
-  AC_SUBST(VORBISFILE_LIBS)
-  AC_SUBST(VORBISENC_LIBS)
-  rm -f conf.vorbistest
-])
-
index 52f1879..cb14797 100644 (file)
 \r
 /* In VDS Macro AAA=BBB is not available. */\r
 #define __W32__\r
-#define TIMID_VERSION  "2.11.0-pre2"\r
+#define TIMID_VERSION  "2.11.0-pre3"\r
 #define DEFAULT_PATH   ".\\"\r
 #define AU_W32\r
 #define WINSOCK\r
index b2b3ce9..bfdd3e3 100755 (executable)
--- a/configure
+++ b/configure
@@ -1399,7 +1399,7 @@ fi
 
 # Define the identity of the package.
 PACKAGE=TiMidity++
-VERSION=2.11.0-pre2
+VERSION=2.11.0-pre3
 
 cat >>confdefs.h <<EOF
 #define PACKAGE "$PACKAGE"
index f521b0f..6bc1a9e 100644 (file)
@@ -55,7 +55,7 @@ dnl
 AC_INIT(timidity/timidity.c)
 SHELL=${CONFIG_SHELL-/bin/sh}
 AC_CANONICAL_SYSTEM
-AM_INIT_AUTOMAKE(TiMidity++, 2.11.0-pre2)
+AM_INIT_AUTOMAKE(TiMidity++, 2.11.0-pre3)
 
 dnl To use CONTAINS() macro (See acinclude.m4)
 CONTAINS_INIT
index 544214b..5252a6c 100644 (file)
@@ -1,4 +1,4 @@
-.TH TiMidity++ 1 "Jan 06 1999" "1.0.0"
+.TH TiMidity++ 1 "Nov 10 2001" "2.11.0"
 .SH NAME
 TiMidity++ \- MIDI to WAV converter and player
 .SH SYNOPSIS
@@ -20,7 +20,7 @@ in KAR file or WRD file.
 
 .P
 .SH FILENAME
-You can use the following expressions in \fBfilename\fP fields
+You can use following expressions in \fBfilename\fP fields
 to specify the location of the file:
 .TP
 .B \-
@@ -61,7 +61,7 @@ Since these mechanism are contained in TiMidity itself,
 you can use it even if on MS Windows environment.
 .PP
 
-TiMidity can handle the following archive format:
+TiMidity can handle following archive formats:
 .RS
 .TP
 \fBtar\fP (*.tar)
@@ -70,7 +70,7 @@ TiMidity can handle the following archive format:
 .TP
 \fBzip\fP (*.zip)
 .TP
-.fBlzh\fP (*.lzh, *.lha)
+\fBlzh\fP (*.lzh, *.lha)
 (lh0, lh1, lh2, lh3, lh4, lh5, lh6, lzs, lz5, lz4 are available)
 .RE
 .RE
@@ -88,7 +88,7 @@ MIDI files posted in the newsgroup.
 In this case TiMidity recognize the MIME Multi\-part message, and
 extract the articles contains MIDI files and play.
 .br
-The following MIME\-type are allowed:
+Following MIME\-types are allowed:
 .RS
 .TP
 .B uu\-encoded file
@@ -124,7 +124,7 @@ patch\-files or else on the remote machines.
 
 .P
 .SH INPUT FILE
-Timidity can handle the following file formats:
+Timidity can handle following file formats:
 .TP
 \fB .MID\fP ( Format 0, 1, 2 )
 Standard MIDI File
@@ -141,7 +141,7 @@ Displays lylics same as Lylic Meta Event message.
 
 .P
 .SH OPTIONS
-The following command line optinos are accepted by TiMidity:
+Following command line optinos are accepted by TiMidity:
 
 .TP
 .B \-A \fIamplification\fP
@@ -205,36 +205,27 @@ expense of slowing all other tasks down.
 
 .TP
 .BI \-E " mode"
-Set TiMidity extend modes. The following modes are available
+Set TiMidity extend modes. Following modes are available
 (capitalized switch means disable this feature):
 .RS
 .TP
 .B w/W
-Enables/disables modulation controlling.
+Enable/disable modulation controlling.
 .TP
 .B p/P
-Enables/disables portamento controlling.
+Enable/disable portamento controlling.
 .TP
 .B v/V
-Enables/disables NRPM vibration.
-.TP
-.B r/R
-Enables/disables reverb effect controlling.
-.TP
-.B c/C
-Enables/disables chorus effect controlling.
-.TP
-.BI c " ratio"
-Sets the chorus effect value of all channels to \fIratio\fP.
+Enable/disable NRPM vibration.
 .TP
 .B s/S
-Enables/disables channel pressure controlling.
+Enable/disable channel pressure controlling.
 .TP
 .B t/T
-Enables/disables tracing all Text Meta Events.
+Enable/disable tracing all Text Meta Events.
 .TP
 .B o/O
-Accepts/rejects pronouncing multiple same notes.
+Accept/reject pronouncing multiple same notes.
 .TP
 .BI m " HH"
 Sets the manufacture ID to \fIHH\fP ( \fIHH\fP is the two hex-digits ).
@@ -242,8 +233,14 @@ Sets the manufacture ID to \fIHH\fP ( \fIHH\fP is the two hex-digits ).
 In addition if \fIHH\fP is \fIGM/gm\fP , \fIGS/gs\fP or  \fIXG/xg\fP
 that are same as to \fI41\fP , \fI43\fP and \fI7e\fP.
 .TP
+.BI b " n"
+Use tone bank \fIn\fP as the default.
+.TP
 .BI B " bank"
 Sets the bank number of all channels to \fIbank\fP.
+.TP
+.BI F " args"
+For effects. See below.
 .RE
 
 .TP
@@ -269,7 +266,7 @@ the system has support for X Window System.
 
 .TP
 .B \-h
-Show this help message.
+Show help message.
 
 .TP
 .BI \-I " voice" [/c]
@@ -285,7 +282,7 @@ of the channel \fIc\fP is specified by the \fIvoice\fP.
 Selects the user interfaces from the compiled\-in
 alternatives. \fIinterface\fP must be begun with one of the 
 supported interface identifiers.  Run TiMidity with
-the \-h option to see a list.  The following identifiers
+the \-h option to see a list.  Following identifiers
 may be available: 
 .RS
 .TP
@@ -331,7 +328,7 @@ Launch timidity as ALSA sequencer client.
 .TP
 .B Interface options
 Option characters may be  added  immediately
-after the interface identifier.  The following
+after the interface identifier. Following
 options are recognized:
 .PP
 .TP
@@ -382,8 +379,8 @@ Enables Noise Shaping Filter. \fIdegree\fP is from
 Selects the output mode from the compiled-in alternatives. 
 mode must begin with one of the supported
 output mode identifiers.  Run TiMidity with the  -h
-option  to  see  a list.  The following identifiers
-should be available in all versions:
+option  to  see the list.  Following identifiers
+are available in all versions:
 .RS
 .TP
 .B \-Od
@@ -422,7 +419,7 @@ sox for on\-the\-fly conversion to other formats.
 .TP
 .B "Format options"
 Option characters may be added immediately after the mode identifier
-to change the output format.  The following options are recognized:
+to change the output format.  Following options are recognized:
 .RS
 .LP
 .TP
@@ -467,26 +464,37 @@ option. The special filename ``\-'' causes output to be placed on
 stdout.
 
 .TP
+.BI \-P
+Use patch file for all programs.
+
+.TP
 .BI \-p " voices"
 Sets polyphony (maximum number of simultaneous voices) to
 \fIvoices\fP.
 
 .TP
+.BI \-p " a"
+Toggle automatic polyphony reduction.
+
+.TP
 .BI \-Q " channel"
 Causes \fIchannel\fP to be quiet.
 If \fIchannel\fP is negative, channel \-\fIchannel\fP is turned back on.
 If \fIchannel\fP is 0, all channels are turned on.
+
+.TP
+.BI \-q " m/n"
+Specify audio buffer in seconds.
+m:Maxmum buffer, n:Filled to start   (default is 5.0/100%)
+(size of 100% equals device buffer size)
  
 .TP
-.BI \-R " msec"
-Enables Pseudo Reverb Mode. \fImsec\fP are envelope release time.
+.BI \-R " n"
+Enables Pseudo Reverb Mode.
+It sets every instrument's release to n ms. If n=0, n is set to 800(default).
 .RE
 
 .TP
-.B \-r
-This options causes another reverb effects.
-
-.TP
 .BI \-S " size"
 Sets the re-sample cache size to \fIsize\fP bytes.
 If \fIsize\fP equals to 0 any sample caches are disabled. 
@@ -500,7 +508,7 @@ frequency may be selected, depending on the implementation.
 
 .TP
 .BI -t " code"
-Sets output coding of Japanese text. \fIcode\fP are the following:
+Sets output coding of Japanese text. \fIcode\fP are following:
 .RS
 .TP
 .B auto
@@ -509,6 +517,12 @@ determined by \fILANG\fP environment variable.
 .B ascii
 Transrates non-ascii code to period.
 .TP
+.B nocnv
+No conversion
+.TP
+.B 1251
+Convert from windows-1251 to koi8-r
+.TP
 .B euc
 Outputs by EUC(Japan) coding.
 .TP
@@ -520,14 +534,18 @@ Outputs by SJIS coding.
 .RE
 
 .TP
+.BI \-T " n"
+Adjust tempo to n%; 120=play MOD files with an NTSC Amiga's timing
+
+.TP
 .B \-U
-Instructs TiMidity to unload all instruments from memory between
-MIDI files.  This can reduce memory requirements when playing many
+Unload all instruments from memory between MIDI files.
+This can reduce memory requirements when playing many
 files in succession.
 
 .TP
 .BI \-w " mode"
-Extend mode for MS\-Windows. The following options are available:
+Extend mode for MS\-Windows. Following options are available:
 .RS
 .TP
 .BI \-w "r"
@@ -569,7 +587,7 @@ value.
 .TP
 .BI d="n"
 Emulates timing(\fB@WAIT\fP,\fB@WMODE\fP) bugs of the original MIMPI player.
-The emulate level is following:
+The emulate level are following:
 .RS
 .TP
 .B -WRd=0
@@ -614,6 +632,52 @@ Causes the table of frequencies to be read from \fIfile\fP. This is
 useful to define a tuning different from the occidental temperate scale.
 
 .P
+.SH EFFECT OPTIONS
+In \fI-EF <arg>\fP option, you can specify following effect options:
+.br
+.RS
+.TP
+.BI -EFdelay= "l"
+Left delay
+.TP
+.BI -EFdelay= "r"
+Right delay
+.TP
+.BI -EFdelay= "b"
+Rotate left & right
+.TP
+.BI -EFdelay= "0"
+Disabled delay effect
+.TP
+.BI -EFchorus= "1[,level]"
+Enable MIDI chorus effect control
+.br
+`level' is optional to specify chorus level [0..127]
+.TP
+.BI -EFchorus= "2[,level]"
+Surround sound, chorus detuned to a lesser degree.
+.br
+`level' is optional to specify chorus level [0..127] (default).
+.TP
+.BI -EFreverb= "0"
+Disable MIDI reverb effect control
+.TP
+.BI -EFreverb= "1[,level]"
+Enable MIDI reverb effect control
+.br
+`level' is optional to specify reverb level [0..127]
+This effect is only available in stereo (default).
+.TP
+.BI -EFreverb= "2"
+Global reverb effect
+.TP
+.BI -EFns= "n"
+Enable the n th degree noiseshaping filter. n:[0..4]
+.br
+This effect is only available for 8-bit linear encoding
+.RE
+
+.P
 .SH SEE ALSO
 lsmidiprog(1), mididump(1), patinfo(1), sf2text(1), wav2pat(1), timidity.cfg(5)
 
@@ -709,7 +773,7 @@ and other many people sends information and bug\-fix codes.
 .P
 
 English version of this man page is written by
-NAGANO Daisuke <breeze_geo@geocities.co.jp>.
+NAGANO Daisuke breeze.nagano@nifty.ne.jp>.
 .br
 If any comments or suggestions or claims :) about this man page you have,
 please tell me it.
index 47e6ddb..469d72f 100644 (file)
@@ -125,15 +125,15 @@ so = @so@
 tcltk_dep = @tcltk_dep@
 timidity_LDFLAGS = @timidity_LDFLAGS@
 
-@ENABLE_EMACS_TRUE@ELFILES = @ELFILES@
 ELFILES = @ELFILES@
+@ENABLE_EMACS_TRUE@ELFILES = @ELFILES@
 
 
 ###
 ### For dynamic interfaces
 ###
-@NEEDDLOPEN_TRUE@dynamic_targets = @dynamic_targets@
 dynamic_targets = @dynamic_targets@
+@NEEDDLOPEN_TRUE@dynamic_targets = @dynamic_targets@
 
 SUFFIXES = .ptcl .tcl .@so@
 
index 1a2510b..5a1c970 100644 (file)
@@ -195,6 +195,7 @@ static void ctl_lyric(int lyricid)
            if(lyric[0] == ME_CHORUS_TEXT || lyric[0] == ME_INSERT_TEXT)
                fprintf(outfp, "\r");
            fputs(lyric + 1, outfp);
+           fflush(outfp);
        }
     }
 }
index fd11d4b..a611376 100644 (file)
@@ -2962,17 +2962,17 @@ static void display_aq_ratio(void)
        return;
     rate = (int)(((double)(aq_filled() + aq_soft_filled()) /
                  devsiz) * 100 + 0.5);
-    if(rate > 999)
-       rate = 1000;
+    if(rate > 9999)
+       rate = 10000;
 
     if(last_rate != rate)
     {
        last_rate = rate;
        wmove(dftwin, VOICE_LINE + 1, 34);
-       if(rate > 999)
-           wprintw(dftwin, " Audio queue:***%% ");
+       if(rate > 9999)
+           wprintw(dftwin, " Audio queue:****%% ");
        else
-           wprintw(dftwin, " Audio queue:%3d%% ", rate);
+           wprintw(dftwin, " Audio queue:%4d%% ", rate);
        scr_modified_flag = 1;
     }
 }
index 60633e5..ad7e941 100644 (file)
@@ -962,7 +962,7 @@ static void display_lyric(char *lyric, int sep)
        }
     }
 
-    SLsmg_printfrc(lyric_row,0,comment_indicator_buffer);
+    SLsmg_printfrc(lyric_row,0,"%s",comment_indicator_buffer);
     ctl_refresh();
     reuse_mblock(&tmpbuffer);
     indicator_last_update = get_current_calender_time();
index da158d3..5aa98a2 100644 (file)
-/*\r
-    TiMidity++ -- MIDI to WAVE converter and player\r
-    Copyright (C) 1999-2001 Masanao Izumo <mo@goice.co.jp>\r
-    Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>\r
-\r
-    This program is free software; you can redistribute it and/or modify\r
-    it under the terms of the GNU General Public License as published by\r
-    the Free Software Foundation; either version 2 of the License, or\r
-    (at your option) any later version.\r
-\r
-    This program is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-    GNU General Public License for more details.\r
-\r
-    You should have received a copy of the GNU General Public License\r
-    along with this program; if not, write to the Free Software\r
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-\r
-    w32g_ini.c: written by Daisuke Aoki <dai@y7.net>\r
-                           Masanao Izumo <mo@goice.co.jp>\r
-*/\r
-\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-#ifdef HAVE_CONFIG_H\r
-#include "config.h"\r
-#endif /* HAVE_CONFIG_H */\r
-#include "timidity.h"\r
-#include "common.h"\r
-#include "output.h"\r
-#include "instrum.h"\r
-#include "playmidi.h"\r
-#include "w32g.h"\r
-#include "w32g_utl.h"\r
-\r
-#if MAX_CHANNELS > 32 /* FIXME */\r
-#error "MAX_CHANNELS > 32 is not supported Windows GUI version"\r
-#endif\r
-\r
-int w32g_has_ini_file;\r
-\r
-static int32 str2size(char *str)\r
-{\r
-    int len = strlen(str);\r
-    if(str[len - 1] == 'k' || str[len - 1] == 'K')\r
-       return (int32)(1024.0 * atof(str));\r
-    if(str[len - 1] == 'm' || str[len - 1] == 'M')\r
-       return (int32)(1024 * 1024 * atof(str));\r
-    return atoi(str);\r
-}\r
-\r
-void LoadIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st)\r
-{\r
-    char buff[1024];\r
-\r
-    /* [PLAYER] */\r
-    IniGetKeyInt(INI_SEC_PLAYER,"InitMinimizeFlag",&(sp->InitMinimizeFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DebugWndStartFlag",&(sp->DebugWndStartFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"ConsoleWndStartFlag",&(sp->ConsoleWndStartFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"ListWndStartFlag",&(sp->ListWndStartFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"TracerWndStartFlag",&(sp->TracerWndStartFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DocWndStartFlag",&(sp->DocWndStartFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"WrdWndStartFlag",&(sp->WrdWndStartFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DebugWndFlag",&(sp->DebugWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"ConsoleWndFlag",&(sp->ConsoleWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"ListWndFlag",&(sp->ListWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"TracerWndFlag",&(sp->TracerWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DocWndFlag",&(sp->DocWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"WrdWndFlag",&(sp->WrdWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"SoundSpecWndFlag",&(sp->SoundSpecWndFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"SubWindowMax",&(sp->SubWindowMax));\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"ConfigFile",sp->ConfigFile,MAXPATH + 32);\r
-    if(!sp->ConfigFile[0])\r
-       strcpy(sp->ConfigFile, W32G_TIMIDITY_CFG);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"PlaylistFile",sp->PlaylistFile,MAXPATH + 32);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"PlaylistHistoryFile",sp->PlaylistHistoryFile,MAXPATH + 32);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"MidiFileOpenDir",sp->MidiFileOpenDir,MAXPATH + 32);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"ConfigFileOpenDir",sp->ConfigFileOpenDir,MAXPATH + 32);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"PlaylistFileOpenDir",sp->PlaylistFileOpenDir,MAXPATH + 32);\r
-    IniGetKeyInt(INI_SEC_PLAYER,"PlayerThreadPriority",&(sp->PlayerThreadPriority));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"GUIThreadPriority",&(sp->GUIThreadPriority));\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"SystemFont",sp->SystemFont,256);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"PlayerFont",sp->PlayerFont,256);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"WrdFont",sp->WrdFont,256);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"DocFont",sp->DocFont,256);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"ListFont",sp->ListFont,256);\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"TracerFont",sp->TracerFont,256);\r
-    IniGetKeyInt(INI_SEC_PLAYER,"SystemFontSize",&(sp->SystemFontSize));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"PlayerFontSize",&(sp->PlayerFontSize));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"WrdFontSize",&(sp->WrdFontSize));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DocFontSize",&(sp->DocFontSize));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"ListFontSize",&(sp->ListFontSize));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"TracerFontSize",&(sp->TracerFontSize));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"WrdGraphicFlag",&(sp->WrdGraphicFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"TraceGraphicFlag",&(sp->TraceGraphicFlag));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DocMaxSize",&(sp->DocMaxSize));\r
-    IniGetKeyStringN(INI_SEC_PLAYER,"DocFileExt",sp->DocFileExt,256);\r
-    IniGetKeyInt(INI_SEC_PLAYER,"PlayerLanguage",&(sp->PlayerLanguage));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"DocWndIndependent",&(sp->DocWndIndependent));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"SeachDirRecursive",&(sp->SeachDirRecursive));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"IniFileAutoSave",&(sp->IniFileAutoSave));\r
-    IniGetKeyInt(INI_SEC_PLAYER,"SecondMode",&(sp->SecondMode));\r
-\r
-    /* [TIMIDITY] */\r
-    IniGetKeyInt32(INI_SEC_TIMIDITY,"amplification",&(st->amplification));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"antialiasing_allowed",&(st->antialiasing_allowed));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"buffer_fragments",&(st->buffer_fragments));\r
-    IniGetKeyInt32(INI_SEC_TIMIDITY,"control_ratio",&(st->control_ratio));\r
-    IniGetKeyInt32(INI_SEC_TIMIDITY,"default_drumchannels",(int32 *)&(st->default_drumchannels));\r
-    IniGetKeyInt32(INI_SEC_TIMIDITY,"default_drumchannel_mask",(int32 *)&(st->default_drumchannel_mask));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_modulation_wheel",&(st->opt_modulation_wheel));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_portamento",&(st->opt_portamento));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_nrpn_vibrato",&(st->opt_nrpn_vibrato));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_channel_pressure",&(st->opt_channel_pressure));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_trace_text_meta_event",&(st->opt_trace_text_meta_event));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_overlap_voice_allow",&(st->opt_overlap_voice_allow));\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_default_mid",buff,sizeof(buff)-1);\r
-    st->opt_default_mid = str2mID(buff);\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"default_tonebank",&(st->default_tonebank));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"special_tonebank",&(st->special_tonebank));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"effect_lr_mode",&(st->effect_lr_mode));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"effect_lr_delay_msec",&(st->effect_lr_delay_msec));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_reverb_control",&(st->opt_reverb_control));\r
+/*
+    TiMidity++ -- MIDI to WAVE converter and player
+    Copyright (C) 1999-2001 Masanao Izumo <mo@goice.co.jp>
+    Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
+
+    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.
+
+    w32g_ini.c: written by Daisuke Aoki <dai@y7.net>
+                           Masanao Izumo <mo@goice.co.jp>
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+#include "timidity.h"
+#include "common.h"
+#include "output.h"
+#include "instrum.h"
+#include "playmidi.h"
+#include "w32g.h"
+#include "w32g_utl.h"
+
+#if MAX_CHANNELS > 32 /* FIXME */
+#error "MAX_CHANNELS > 32 is not supported Windows GUI version"
+#endif
+
+int w32g_has_ini_file;
+
+static int32 str2size(char *str)
+{
+    int len = strlen(str);
+    if(str[len - 1] == 'k' || str[len - 1] == 'K')
+       return (int32)(1024.0 * atof(str));
+    if(str[len - 1] == 'm' || str[len - 1] == 'M')
+       return (int32)(1024 * 1024 * atof(str));
+    return atoi(str);
+}
+
+void LoadIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st)
+{
+    char buff[1024];
+
+    /* [PLAYER] */
+    IniGetKeyInt(INI_SEC_PLAYER,"InitMinimizeFlag",&(sp->InitMinimizeFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"DebugWndStartFlag",&(sp->DebugWndStartFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"ConsoleWndStartFlag",&(sp->ConsoleWndStartFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"ListWndStartFlag",&(sp->ListWndStartFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"TracerWndStartFlag",&(sp->TracerWndStartFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"DocWndStartFlag",&(sp->DocWndStartFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"WrdWndStartFlag",&(sp->WrdWndStartFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"DebugWndFlag",&(sp->DebugWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"ConsoleWndFlag",&(sp->ConsoleWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"ListWndFlag",&(sp->ListWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"TracerWndFlag",&(sp->TracerWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"DocWndFlag",&(sp->DocWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"WrdWndFlag",&(sp->WrdWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"SoundSpecWndFlag",&(sp->SoundSpecWndFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"SubWindowMax",&(sp->SubWindowMax));
+    IniGetKeyStringN(INI_SEC_PLAYER,"ConfigFile",sp->ConfigFile,MAXPATH + 32);
+    if(!sp->ConfigFile[0])
+       strcpy(sp->ConfigFile, W32G_TIMIDITY_CFG);
+    IniGetKeyStringN(INI_SEC_PLAYER,"PlaylistFile",sp->PlaylistFile,MAXPATH + 32);
+    IniGetKeyStringN(INI_SEC_PLAYER,"PlaylistHistoryFile",sp->PlaylistHistoryFile,MAXPATH + 32);
+    IniGetKeyStringN(INI_SEC_PLAYER,"MidiFileOpenDir",sp->MidiFileOpenDir,MAXPATH + 32);
+    IniGetKeyStringN(INI_SEC_PLAYER,"ConfigFileOpenDir",sp->ConfigFileOpenDir,MAXPATH + 32);
+    IniGetKeyStringN(INI_SEC_PLAYER,"PlaylistFileOpenDir",sp->PlaylistFileOpenDir,MAXPATH + 32);
+    IniGetKeyInt(INI_SEC_PLAYER,"PlayerThreadPriority",&(sp->PlayerThreadPriority));
+    IniGetKeyInt(INI_SEC_PLAYER,"GUIThreadPriority",&(sp->GUIThreadPriority));
+    IniGetKeyStringN(INI_SEC_PLAYER,"SystemFont",sp->SystemFont,256);
+    IniGetKeyStringN(INI_SEC_PLAYER,"PlayerFont",sp->PlayerFont,256);
+    IniGetKeyStringN(INI_SEC_PLAYER,"WrdFont",sp->WrdFont,256);
+    IniGetKeyStringN(INI_SEC_PLAYER,"DocFont",sp->DocFont,256);
+    IniGetKeyStringN(INI_SEC_PLAYER,"ListFont",sp->ListFont,256);
+    IniGetKeyStringN(INI_SEC_PLAYER,"TracerFont",sp->TracerFont,256);
+    IniGetKeyInt(INI_SEC_PLAYER,"SystemFontSize",&(sp->SystemFontSize));
+    IniGetKeyInt(INI_SEC_PLAYER,"PlayerFontSize",&(sp->PlayerFontSize));
+    IniGetKeyInt(INI_SEC_PLAYER,"WrdFontSize",&(sp->WrdFontSize));
+    IniGetKeyInt(INI_SEC_PLAYER,"DocFontSize",&(sp->DocFontSize));
+    IniGetKeyInt(INI_SEC_PLAYER,"ListFontSize",&(sp->ListFontSize));
+    IniGetKeyInt(INI_SEC_PLAYER,"TracerFontSize",&(sp->TracerFontSize));
+    IniGetKeyInt(INI_SEC_PLAYER,"WrdGraphicFlag",&(sp->WrdGraphicFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"TraceGraphicFlag",&(sp->TraceGraphicFlag));
+    IniGetKeyInt(INI_SEC_PLAYER,"DocMaxSize",&(sp->DocMaxSize));
+    IniGetKeyStringN(INI_SEC_PLAYER,"DocFileExt",sp->DocFileExt,256);
+    IniGetKeyInt(INI_SEC_PLAYER,"PlayerLanguage",&(sp->PlayerLanguage));
+    IniGetKeyInt(INI_SEC_PLAYER,"DocWndIndependent",&(sp->DocWndIndependent));
+    IniGetKeyInt(INI_SEC_PLAYER,"DocWndAutoPopup",&(sp->DocWndAutoPopup));
+    IniGetKeyInt(INI_SEC_PLAYER,"SeachDirRecursive",&(sp->SeachDirRecursive));
+    IniGetKeyInt(INI_SEC_PLAYER,"IniFileAutoSave",&(sp->IniFileAutoSave));
+    IniGetKeyInt(INI_SEC_PLAYER,"SecondMode",&(sp->SecondMode));
+
+    /* [TIMIDITY] */
+    IniGetKeyInt32(INI_SEC_TIMIDITY,"amplification",&(st->amplification));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"antialiasing_allowed",&(st->antialiasing_allowed));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"buffer_fragments",&(st->buffer_fragments));
+    IniGetKeyInt32(INI_SEC_TIMIDITY,"control_ratio",&(st->control_ratio));
+    IniGetKeyInt32(INI_SEC_TIMIDITY,"default_drumchannels",(int32 *)&(st->default_drumchannels));
+    IniGetKeyInt32(INI_SEC_TIMIDITY,"default_drumchannel_mask",(int32 *)&(st->default_drumchannel_mask));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_modulation_wheel",&(st->opt_modulation_wheel));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_portamento",&(st->opt_portamento));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_nrpn_vibrato",&(st->opt_nrpn_vibrato));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_channel_pressure",&(st->opt_channel_pressure));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_trace_text_meta_event",&(st->opt_trace_text_meta_event));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_overlap_voice_allow",&(st->opt_overlap_voice_allow));
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_default_mid",buff,sizeof(buff)-1);
+//    st->opt_default_mid = str2mID(buff);
+    st->opt_default_mid = atoi(buff);
+    IniGetKeyInt(INI_SEC_TIMIDITY,"default_tonebank",&(st->default_tonebank));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"special_tonebank",&(st->special_tonebank));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"effect_lr_mode",&(st->effect_lr_mode));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"effect_lr_delay_msec",&(st->effect_lr_delay_msec));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_reverb_control",&(st->opt_reverb_control));
     IniGetKeyInt(INI_SEC_TIMIDITY,"opt_chorus_control",&(st->opt_chorus_control));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"noise_sharp_type",&(st->noise_sharp_type));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_evil_mode",&(st->opt_evil_mode));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"adjust_panning_immediately",&(st->adjust_panning_immediately));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"fast_decay",&(st->fast_decay));\r
-#ifdef SUPPORT_SOUNDSPEC\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"view_soundspec_flag",&(st->view_soundspec_flag));\r
-    IniGetKeyFloat(INI_SEC_TIMIDITY,"spectrogram_update_sec",&v_float);\r
-    st->spectrogram_update_sec = v_float;\r
-#endif\r
-    IniGetKeyIntArray(INI_SEC_TIMIDITY,"default_program",st->default_program,MAX_CHANNELS);\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_ctl",st->opt_ctl,sizeof(st->opt_ctl)-1);\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_realtime_playing",&(st->opt_realtime_playing));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"reduce_voice_threshold",&(st->reduce_voice_threshold));\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_playmode",st->opt_playmode,sizeof(st->opt_playmode)-1);\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"OutputName",st->OutputName,sizeof(st->OutputName)-1);\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"voices",&(st->voices));\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"auto_reduce_polyphony",&(st->auto_reduce_polyphony));\r
-    IniGetKeyInt32(INI_SEC_TIMIDITY,"quietchannels",(int32 *)&(st->quietchannels));\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_qsize",st->opt_qsize,sizeof(st->opt_qsize)-1);\r
-    IniGetKeyInt32(INI_SEC_TIMIDITY,"modify_release",&(st->modify_release));\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"allocate_cache_size",buff,sizeof(buff)-1);\r
-    st->allocate_cache_size = str2size(buff);\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"output_rate",&(st->output_rate));\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"output_text_code",st->output_text_code,sizeof(st->output_text_code)-1);\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"free_instruments_afterwards",&(st->free_instruments_afterwards));\r
-    IniGetKeyStringN(INI_SEC_TIMIDITY,"out_wrd",st->opt_wrd,sizeof(st->opt_wrd)-1);\r
-#if defined(__W32__) && defined(SMFCONV)\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_rcpcv_dll",&(st->opt_rcpcv_dll));\r
-#endif\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"data_block_bits",&(st->data_block_bits));\r
-    if(st->data_block_bits > AUDIO_BUFFER_BITS)\r
-      st->data_block_bits = AUDIO_BUFFER_BITS;\r
-    IniGetKeyInt(INI_SEC_TIMIDITY,"data_block_num",&(st->data_block_num));\r
-}\r
-\r
-void\r
-SaveIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st)\r
-{\r
-    /* [PLAYER] */\r
-    IniPutKeyString(INI_SEC_PLAYER,"IniVersion",IniVersion);\r
-    IniPutKeyInt(INI_SEC_PLAYER,"InitMinimizeFlag",&(sp->InitMinimizeFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DebugWndStartFlag",&(sp->DebugWndStartFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"ConsoleWndStartFlag",&(sp->ConsoleWndStartFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"ListWndStartFlag",&(sp->ListWndStartFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"TracerWndStartFlag",&(sp->TracerWndStartFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DocWndStartFlag",&(sp->DocWndStartFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"WrdWndStartFlag",&(sp->WrdWndStartFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DebugWndFlag",&(sp->DebugWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"ConsoleWndFlag",&(sp->ConsoleWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"ListWndFlag",&(sp->ListWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"TracerWndFlag",&(sp->TracerWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DocWndFlag",&(sp->DocWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"WrdWndFlag",&(sp->WrdWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"SoundSpecWndFlag",&(sp->SoundSpecWndFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"SubWindowMax",&(sp->SubWindowMax));\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"ConfigFile",sp->ConfigFile,MAXPATH + 32);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"PlaylistFile",sp->PlaylistFile,MAXPATH + 32);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"PlaylistHistoryFile",sp->PlaylistHistoryFile,MAXPATH + 32);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"MidiFileOpenDir",sp->MidiFileOpenDir,MAXPATH + 32);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"ConfigFileOpenDir",sp->ConfigFileOpenDir,MAXPATH + 32);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"PlaylistFileOpenDir",sp->PlaylistFileOpenDir,MAXPATH + 32);\r
-    IniPutKeyInt(INI_SEC_PLAYER,"PlayerThreadPriority",&(sp->PlayerThreadPriority));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"GUIThreadPriority",&(sp->GUIThreadPriority));\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"SystemFont",sp->SystemFont,256);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"PlayerFont",sp->PlayerFont,256);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"WrdFont",sp->WrdFont,256);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"DocFont",sp->DocFont,256);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"ListFont",sp->ListFont,256);\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"TracerFont",sp->TracerFont,256);\r
-    IniPutKeyInt(INI_SEC_PLAYER,"SystemFontSize",&(sp->SystemFontSize));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"PlayerFontSize",&(sp->PlayerFontSize));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"WrdFontSize",&(sp->WrdFontSize));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DocFontSize",&(sp->DocFontSize));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"ListFontSize",&(sp->ListFontSize));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"TracerFontSize",&(sp->TracerFontSize));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"WrdGraphicFlag",&(sp->WrdGraphicFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"TraceGraphicFlag",&(sp->TraceGraphicFlag));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DocMaxSize",&(sp->DocMaxSize));\r
-    IniPutKeyStringN(INI_SEC_PLAYER,"DocFileExt",sp->DocFileExt,256);\r
-    IniPutKeyInt(INI_SEC_PLAYER,"PlayerLanguage",&(sp->PlayerLanguage));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"DocWndIndependent",&(sp->DocWndIndependent));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"SeachDirRecursive",&(sp->SeachDirRecursive));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"IniFileAutoSave",&(sp->IniFileAutoSave));\r
-    IniPutKeyInt(INI_SEC_PLAYER,"SecondMode",&(sp->SecondMode));\r
-\r
-\r
-    /* [TIMIDITY] */\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"amplification",&(st->amplification));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"antialiasing_allowed",&(st->antialiasing_allowed));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"buffer_fragments",&(st->buffer_fragments));\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"control_ratio",&(st->control_ratio));\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"default_drumchannels",(int32 *)&(st->default_drumchannels));\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"default_drumchannel_mask",(int32 *)&(st->default_drumchannel_mask));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_modulation_wheel",&(st->opt_modulation_wheel));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_portamento",&(st->opt_portamento));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_nrpn_vibrato",&(st->opt_nrpn_vibrato));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_channel_pressure",&(st->opt_channel_pressure));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_trace_text_meta_event",&(st->opt_trace_text_meta_event));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_overlap_voice_allow",&(st->opt_overlap_voice_allow));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_default_mid",&(st->opt_default_mid));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"default_tonebank",&(st->default_tonebank));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"special_tonebank",&(st->special_tonebank));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"effect_lr_mode",&(st->effect_lr_mode));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"effect_lr_delay_msec",&(st->effect_lr_delay_msec));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_reverb_control",&(st->opt_reverb_control));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_surround_chorus",&(st->opt_surround_chorus));
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_tva_attack",&(st->opt_tva_attack));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_tva_decay",&(st->opt_tva_decay));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_tva_release",&(st->opt_tva_release));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_delay_control",&(st->opt_delay_control));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_resonance",&(st->opt_resonance));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_velocity_table",&(st->opt_velocity_table));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"opt_env_attack",&(st->opt_env_attack));\r
+       IniGetKeyInt(INI_SEC_TIMIDITY,"noise_sharp_type",&(st->noise_sharp_type));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_evil_mode",&(st->opt_evil_mode));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"adjust_panning_immediately",&(st->adjust_panning_immediately));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"fast_decay",&(st->fast_decay));
+#ifdef SUPPORT_SOUNDSPEC
+    IniGetKeyInt(INI_SEC_TIMIDITY,"view_soundspec_flag",&(st->view_soundspec_flag));
+    IniGetKeyFloat(INI_SEC_TIMIDITY,"spectrogram_update_sec",&v_float);
+    st->spectrogram_update_sec = v_float;
+#endif
+    IniGetKeyIntArray(INI_SEC_TIMIDITY,"default_program",st->default_program,MAX_CHANNELS);
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_ctl",st->opt_ctl,sizeof(st->opt_ctl)-1);
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_realtime_playing",&(st->opt_realtime_playing));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"reduce_voice_threshold",&(st->reduce_voice_threshold));
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_playmode",st->opt_playmode,sizeof(st->opt_playmode)-1);
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"OutputName",st->OutputName,sizeof(st->OutputName)-1);
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"OutputDirName",st->OutputDirName,sizeof(st->OutputDirName)-1);
+    IniGetKeyInt(INI_SEC_TIMIDITY,"auto_output_mode",&(st->auto_output_mode));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"voices",&(st->voices));
+    IniGetKeyInt(INI_SEC_TIMIDITY,"auto_reduce_polyphony",&(st->auto_reduce_polyphony));
+    IniGetKeyInt32(INI_SEC_TIMIDITY,"quietchannels",(int32 *)&(st->quietchannels));
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"opt_qsize",st->opt_qsize,sizeof(st->opt_qsize)-1);
+    IniGetKeyInt32(INI_SEC_TIMIDITY,"modify_release",&(st->modify_release));
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"allocate_cache_size",buff,sizeof(buff)-1);
+    st->allocate_cache_size = str2size(buff);
+    IniGetKeyInt(INI_SEC_TIMIDITY,"output_rate",&(st->output_rate));
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"output_text_code",st->output_text_code,sizeof(st->output_text_code)-1);
+    IniGetKeyInt(INI_SEC_TIMIDITY,"free_instruments_afterwards",&(st->free_instruments_afterwards));
+    IniGetKeyStringN(INI_SEC_TIMIDITY,"out_wrd",st->opt_wrd,sizeof(st->opt_wrd)-1);
+#if defined(__W32__) && defined(SMFCONV)
+    IniGetKeyInt(INI_SEC_TIMIDITY,"opt_rcpcv_dll",&(st->opt_rcpcv_dll));
+#endif
+    IniGetKeyInt(INI_SEC_TIMIDITY,"data_block_bits",&(st->data_block_bits));
+    if(st->data_block_bits > AUDIO_BUFFER_BITS)
+      st->data_block_bits = AUDIO_BUFFER_BITS;
+    IniGetKeyInt(INI_SEC_TIMIDITY,"data_block_num",&(st->data_block_num));
+}
+
+void
+SaveIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st)
+{
+    /* [PLAYER] */
+    IniPutKeyString(INI_SEC_PLAYER,"IniVersion",IniVersion);
+    IniPutKeyInt(INI_SEC_PLAYER,"InitMinimizeFlag",&(sp->InitMinimizeFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"DebugWndStartFlag",&(sp->DebugWndStartFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"ConsoleWndStartFlag",&(sp->ConsoleWndStartFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"ListWndStartFlag",&(sp->ListWndStartFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"TracerWndStartFlag",&(sp->TracerWndStartFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"DocWndStartFlag",&(sp->DocWndStartFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"WrdWndStartFlag",&(sp->WrdWndStartFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"DebugWndFlag",&(sp->DebugWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"ConsoleWndFlag",&(sp->ConsoleWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"ListWndFlag",&(sp->ListWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"TracerWndFlag",&(sp->TracerWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"DocWndFlag",&(sp->DocWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"WrdWndFlag",&(sp->WrdWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"SoundSpecWndFlag",&(sp->SoundSpecWndFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"SubWindowMax",&(sp->SubWindowMax));
+    IniPutKeyStringN(INI_SEC_PLAYER,"ConfigFile",sp->ConfigFile,MAXPATH + 32);
+    IniPutKeyStringN(INI_SEC_PLAYER,"PlaylistFile",sp->PlaylistFile,MAXPATH + 32);
+    IniPutKeyStringN(INI_SEC_PLAYER,"PlaylistHistoryFile",sp->PlaylistHistoryFile,MAXPATH + 32);
+    IniPutKeyStringN(INI_SEC_PLAYER,"MidiFileOpenDir",sp->MidiFileOpenDir,MAXPATH + 32);
+    IniPutKeyStringN(INI_SEC_PLAYER,"ConfigFileOpenDir",sp->ConfigFileOpenDir,MAXPATH + 32);
+    IniPutKeyStringN(INI_SEC_PLAYER,"PlaylistFileOpenDir",sp->PlaylistFileOpenDir,MAXPATH + 32);
+    IniPutKeyInt(INI_SEC_PLAYER,"PlayerThreadPriority",&(sp->PlayerThreadPriority));
+    IniPutKeyInt(INI_SEC_PLAYER,"GUIThreadPriority",&(sp->GUIThreadPriority));
+    IniPutKeyStringN(INI_SEC_PLAYER,"SystemFont",sp->SystemFont,256);
+    IniPutKeyStringN(INI_SEC_PLAYER,"PlayerFont",sp->PlayerFont,256);
+    IniPutKeyStringN(INI_SEC_PLAYER,"WrdFont",sp->WrdFont,256);
+    IniPutKeyStringN(INI_SEC_PLAYER,"DocFont",sp->DocFont,256);
+    IniPutKeyStringN(INI_SEC_PLAYER,"ListFont",sp->ListFont,256);
+    IniPutKeyStringN(INI_SEC_PLAYER,"TracerFont",sp->TracerFont,256);
+    IniPutKeyInt(INI_SEC_PLAYER,"SystemFontSize",&(sp->SystemFontSize));
+    IniPutKeyInt(INI_SEC_PLAYER,"PlayerFontSize",&(sp->PlayerFontSize));
+    IniPutKeyInt(INI_SEC_PLAYER,"WrdFontSize",&(sp->WrdFontSize));
+    IniPutKeyInt(INI_SEC_PLAYER,"DocFontSize",&(sp->DocFontSize));
+    IniPutKeyInt(INI_SEC_PLAYER,"ListFontSize",&(sp->ListFontSize));
+    IniPutKeyInt(INI_SEC_PLAYER,"TracerFontSize",&(sp->TracerFontSize));
+    IniPutKeyInt(INI_SEC_PLAYER,"WrdGraphicFlag",&(sp->WrdGraphicFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"TraceGraphicFlag",&(sp->TraceGraphicFlag));
+    IniPutKeyInt(INI_SEC_PLAYER,"DocMaxSize",&(sp->DocMaxSize));
+    IniPutKeyStringN(INI_SEC_PLAYER,"DocFileExt",sp->DocFileExt,256);
+    IniPutKeyInt(INI_SEC_PLAYER,"PlayerLanguage",&(sp->PlayerLanguage));
+    IniPutKeyInt(INI_SEC_PLAYER,"DocWndIndependent",&(sp->DocWndIndependent));
+    IniPutKeyInt(INI_SEC_PLAYER,"DocWndAutoPopup",&(sp->DocWndAutoPopup));
+    IniPutKeyInt(INI_SEC_PLAYER,"SeachDirRecursive",&(sp->SeachDirRecursive));
+    IniPutKeyInt(INI_SEC_PLAYER,"IniFileAutoSave",&(sp->IniFileAutoSave));
+    IniPutKeyInt(INI_SEC_PLAYER,"SecondMode",&(sp->SecondMode));
+
+
+    /* [TIMIDITY] */
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"amplification",&(st->amplification));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"antialiasing_allowed",&(st->antialiasing_allowed));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"buffer_fragments",&(st->buffer_fragments));
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"control_ratio",&(st->control_ratio));
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"default_drumchannels",(int32 *)&(st->default_drumchannels));
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"default_drumchannel_mask",(int32 *)&(st->default_drumchannel_mask));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_modulation_wheel",&(st->opt_modulation_wheel));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_portamento",&(st->opt_portamento));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_nrpn_vibrato",&(st->opt_nrpn_vibrato));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_channel_pressure",&(st->opt_channel_pressure));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_trace_text_meta_event",&(st->opt_trace_text_meta_event));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_overlap_voice_allow",&(st->opt_overlap_voice_allow));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_default_mid",&(st->opt_default_mid));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"default_tonebank",&(st->default_tonebank));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"special_tonebank",&(st->special_tonebank));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"effect_lr_mode",&(st->effect_lr_mode));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"effect_lr_delay_msec",&(st->effect_lr_delay_msec));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_reverb_control",&(st->opt_reverb_control));
     IniPutKeyInt(INI_SEC_TIMIDITY,"opt_chorus_control",&(st->opt_chorus_control));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"noise_sharp_type",&(st->noise_sharp_type));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_evil_mode",&(st->opt_evil_mode));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"adjust_panning_immediately",&(st->adjust_panning_immediately));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"fast_decay",&(st->fast_decay));\r
-#ifdef SUPPORT_SOUNDSPEC\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"view_soundspec_flag",&(st->view_soundspec_flag));\r
-    v_float = st->spectrogram_update_sec;\r
-    IniPutKeyFloat(INI_SEC_TIMIDITY,"spectrogram_update_sec",&v_float);\r
-#endif\r
-    IniPutKeyIntArray(INI_SEC_TIMIDITY,"default_program",st->default_program,MAX_CHANNELS);\r
-    IniPutKeyStringN(INI_SEC_TIMIDITY,"opt_ctl",st->opt_ctl,sizeof(st->opt_ctl));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_realtime_playing",&(st->opt_realtime_playing));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"reduce_voice_threshold",&(st->reduce_voice_threshold));\r
-    IniPutKeyStringN(INI_SEC_TIMIDITY,"opt_playmode",st->opt_playmode,sizeof(st->opt_playmode));\r
-    IniPutKeyStringN(INI_SEC_TIMIDITY,"OutputName",st->OutputName,sizeof(st->OutputName));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"voices",&(st->voices));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"auto_reduce_polyphony",&(st->auto_reduce_polyphony));\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"quietchannels",(int32 *)&(st->quietchannels));\r
-    IniPutKeyStringN(INI_SEC_TIMIDITY,"opt_qsize",st->opt_qsize,sizeof(st->opt_qsize));\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"modify_release",&(st->modify_release));\r
-    IniPutKeyInt32(INI_SEC_TIMIDITY,"allocate_cache_size",&(st->allocate_cache_size));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"output_rate",&(st->output_rate));\r
-    if(st->output_rate == 0)\r
-       st->output_rate = play_mode->rate;\r
-    IniPutKeyStringN(INI_SEC_TIMIDITY,"output_text_code",st->output_text_code,sizeof(st->output_text_code));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"free_instruments_afterwards",&(st->free_instruments_afterwards));\r
-    IniPutKeyStringN(INI_SEC_TIMIDITY,"out_wrd",st->opt_wrd,sizeof(st->opt_wrd));\r
-#if defined(__W32__) && defined(SMFCONV)\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_rcpcv_dll",&(st->opt_rcpcv_dll));\r
-#endif\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"data_block_bits",&(st->data_block_bits));\r
-    IniPutKeyInt(INI_SEC_TIMIDITY,"data_block_num",&(st->data_block_num));\r
-    w32g_has_ini_file = 1;\r
-}\r
-\r
-// When Start TiMidity in WinMain()\r
-extern int SecondMode;\r
-static char S_IniFile[MAXPATH + 32];\r
-void FirstLoadIniFile(void)\r
-{\r
-       char buffer[1024];\r
-       char *prevIniFile = IniFile;\r
-       char *p;\r
-       IniFile = S_IniFile;\r
-    if(GetModuleFileName(GetModuleHandle(0), buffer, MAXPATH))\r
-    {\r
-       if((p = pathsep_strrchr(buffer)) != NULL)\r
-       {\r
-           p++;\r
-           *p = '\0';\r
-       }\r
-       else\r
-       {\r
-           buffer[0] = '.';\r
-           buffer[1] = PATH_SEP;\r
-           buffer[2] = '\0';\r
-       }\r
-    }\r
-    else\r
-    {\r
-       buffer[0] = '.';\r
-       buffer[1] = PATH_SEP;\r
-       buffer[2] = '\0';\r
-    }\r
-    strncpy(IniFile, buffer, MAXPATH);\r
-    IniFile[MAXPATH] = '\0';\r
-    strcat(IniFile,"timpp32g.ini");\r
-    IniGetKeyInt(INI_SEC_PLAYER,"SecondMode",&(SecondMode));\r
-       IniFile = prevIniFile;\r
-}\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_surround_chorus",&(st->opt_surround_chorus));\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_tva_attack",&(st->opt_tva_attack));\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_tva_decay",&(st->opt_tva_decay));\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_tva_release",&(st->opt_tva_release));\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_delay_control",&(st->opt_delay_control));\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_resonance",&(st->opt_resonance));
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_velocity_table",&(st->opt_velocity_table));\r
+       IniPutKeyInt(INI_SEC_TIMIDITY,"opt_env_attack",&(st->opt_env_attack));\r
+    IniPutKeyInt(INI_SEC_TIMIDITY,"noise_sharp_type",&(st->noise_sharp_type));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_evil_mode",&(st->opt_evil_mode));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"adjust_panning_immediately",&(st->adjust_panning_immediately));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"fast_decay",&(st->fast_decay));
+#ifdef SUPPORT_SOUNDSPEC
+    IniPutKeyInt(INI_SEC_TIMIDITY,"view_soundspec_flag",&(st->view_soundspec_flag));
+    v_float = st->spectrogram_update_sec;
+    IniPutKeyFloat(INI_SEC_TIMIDITY,"spectrogram_update_sec",&v_float);
+#endif
+    IniPutKeyIntArray(INI_SEC_TIMIDITY,"default_program",st->default_program,MAX_CHANNELS);
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"opt_ctl",st->opt_ctl,sizeof(st->opt_ctl));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_realtime_playing",&(st->opt_realtime_playing));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"reduce_voice_threshold",&(st->reduce_voice_threshold));
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"opt_playmode",st->opt_playmode,sizeof(st->opt_playmode));
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"OutputName",st->OutputName,sizeof(st->OutputName));
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"OutputDirName",st->OutputDirName,sizeof(st->OutputDirName));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"auto_output_mode",&(st->auto_output_mode));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"voices",&(st->voices));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"auto_reduce_polyphony",&(st->auto_reduce_polyphony));
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"quietchannels",(int32 *)&(st->quietchannels));
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"opt_qsize",st->opt_qsize,sizeof(st->opt_qsize));
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"modify_release",&(st->modify_release));
+    IniPutKeyInt32(INI_SEC_TIMIDITY,"allocate_cache_size",&(st->allocate_cache_size));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"output_rate",&(st->output_rate));
+    if(st->output_rate == 0)
+       st->output_rate = play_mode->rate;
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"output_text_code",st->output_text_code,sizeof(st->output_text_code));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"free_instruments_afterwards",&(st->free_instruments_afterwards));
+    IniPutKeyStringN(INI_SEC_TIMIDITY,"out_wrd",st->opt_wrd,sizeof(st->opt_wrd));
+#if defined(__W32__) && defined(SMFCONV)
+    IniPutKeyInt(INI_SEC_TIMIDITY,"opt_rcpcv_dll",&(st->opt_rcpcv_dll));
+#endif
+    IniPutKeyInt(INI_SEC_TIMIDITY,"data_block_bits",&(st->data_block_bits));
+    IniPutKeyInt(INI_SEC_TIMIDITY,"data_block_num",&(st->data_block_num));
+    w32g_has_ini_file = 1;
+}
+
+// When Start TiMidity in WinMain()
+extern int SecondMode;
+static char S_IniFile[MAXPATH + 32];
+void FirstLoadIniFile(void)
+{
+       char buffer[1024];
+       char *prevIniFile = IniFile;
+       char *p;
+       IniFile = S_IniFile;
+    if(GetModuleFileName(GetModuleHandle(0), buffer, MAXPATH))
+    {
+       if((p = pathsep_strrchr(buffer)) != NULL)
+       {
+           p++;
+           *p = '\0';
+       }
+       else
+       {
+           buffer[0] = '.';
+           buffer[1] = PATH_SEP;
+           buffer[2] = '\0';
+       }
+    }
+    else
+    {
+       buffer[0] = '.';
+       buffer[1] = PATH_SEP;
+       buffer[2] = '\0';
+    }
+    strncpy(IniFile, buffer, MAXPATH);
+    IniFile[MAXPATH] = '\0';
+    strcat(IniFile,"timpp32g.ini");
+    IniGetKeyInt(INI_SEC_PLAYER,"SecondMode",&(SecondMode));
+       IniFile = prevIniFile;
+}
index f94082d..7c1ad8b 100644 (file)
@@ -42,6 +42,9 @@
 #include <strings.h>\r
 #endif\r
 //#include <dir.h>\r
+#ifdef AU_GOGO\r
+#include <musenc.h>            /* for gogo */\r
+#endif\r
 \r
 #include "timidity.h"\r
 #include "common.h"\r
 #include "w32g_res.h"\r
 #include "w32g_utl.h"\r
 #include "w32g_pref.h"\r
+#include "gogo_a.h"\r
 \r
 /* TiMidity Win32GUI preference / PropertySheet */\r
 \r
+extern void w32g_restart(void);\r
+extern void set_gogo_opts_use_commandline_options(char *commandline);\r
+\r
+extern void restore_voices(int save_voices);\r
+\r
 volatile int PrefWndDoing = 0;\r
 \r
 static volatile int PrefWndSetOK = 0;\r
@@ -82,6 +91,9 @@ static BOOL APIENTRY PrefTiMidity4DialogProc(HWND hwnd, UINT uMess, WPARAM wPara
 static int DlgOpenConfigFile(char *Filename, HWND hwnd);\r
 static int DlgOpenOutputFile(char *Filename, HWND hwnd);\r
 \r
+static int vorbisCofigDialog(void);\r
+static int gogoCofigDialog(void);\r
+\r
 //#if defined(__CYGWIN32__) || defined(__MINGW32__)\r
 #if 0 /* New version of mingw */\r
 //#define pszTemplate  u1.pszTemplate\r
@@ -124,14 +136,31 @@ void PrefWndCreate(HWND hwnd)
        psp[0].DUMMYUNIONNAME.pszTemplate = MAKEINTRESOURCE(IDD_PREF_PLAYER);\r
        psp[0].DUMMYUNIONNAME2.pszIcon = NULL;\r
 #else\r
-       psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PREF_PLAYER);\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PREF_PLAYER);\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PREF_PLAYER_EN);\r
+                       break;\r
+       }\r
        psp[0].pszIcon = NULL;\r
 #endif\r
 #endif\r
        psp[0].pfnDlgProc = PrefPlayerDialogProc;\r
-       psp[0].pszTitle = (LPSTR)TEXT("Player");\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[0].pszTitle = (LPSTR)TEXT("\83v\83\8c\83C\83\84\81[");\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[0].pszTitle = (LPSTR)TEXT("Player");\r
+                       break;\r
+       }\r
        psp[0].lParam = 0;\r
        psp[0].pfnCallback = NULL;\r
+\r
 // TiMidity page1.\r
        psp[1].dwSize = sizeof(PROPSHEETPAGE);\r
        psp[1].dwFlags = PSP_USETITLE;\r
@@ -144,12 +173,28 @@ void PrefWndCreate(HWND hwnd)
        psp[1].DUMMYUNIONNAME.pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY1);\r
        psp[1].DUMMYUNIONNAME2.pszIcon = NULL;\r
 #else\r
-       psp[1].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY1);\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[1].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY1);\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[1].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY1_EN);\r
+                       break;\r
+       }\r
        psp[1].pszIcon = NULL;\r
 #endif\r
 #endif\r
        psp[1].pfnDlgProc = PrefTiMidity1DialogProc;\r
-       psp[1].pszTitle = (LPSTR)TEXT("Effect");\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[1].pszTitle = (LPSTR)TEXT("\83G\83t\83F\83N\83g");\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[1].pszTitle = (LPSTR)TEXT("Effect");\r
+                       break;\r
+       }\r
        psp[1].lParam = 0;\r
        psp[1].pfnCallback = NULL;\r
 // TiMidity page2.\r
@@ -164,12 +209,28 @@ void PrefWndCreate(HWND hwnd)
        psp[2].DUMMYUNIONNAME.pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY2);\r
        psp[2].DUMMYUNIONNAME2.pszIcon = NULL;\r
 #else\r
-       psp[2].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY2);\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[2].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY2);\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[2].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY2_EN);\r
+                       break;\r
+       }\r
        psp[2].pszIcon = NULL;\r
 #endif\r
 #endif\r
        psp[2].pfnDlgProc = PrefTiMidity2DialogProc;\r
-       psp[2].pszTitle = (LPSTR)TEXT("Misc");\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[2].pszTitle = (LPSTR)TEXT("\82»\82Ì\91¼");\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[2].pszTitle = (LPSTR)TEXT("Misc");\r
+                       break;\r
+       }\r
        psp[2].lParam = 0;\r
        psp[2].pfnCallback = NULL;\r
 // TiMidity page3.\r
@@ -184,12 +245,28 @@ void PrefWndCreate(HWND hwnd)
        psp[3].DUMMYUNIONNAME.pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY3);\r
        psp[3].DUMMYUNIONNAME2.pszIcon = NULL;\r
 #else\r
-       psp[3].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY3);\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[3].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY3);\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[3].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY3_EN);\r
+                       break;\r
+       }\r
        psp[3].pszIcon = NULL;\r
 #endif\r
 #endif\r
        psp[3].pfnDlgProc = PrefTiMidity3DialogProc;\r
-       psp[3].pszTitle = (LPSTR)TEXT("Output");\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[3].pszTitle = (LPSTR)TEXT("\8fo\97Í");\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[3].pszTitle = (LPSTR)TEXT("Output");\r
+                       break;\r
+       }\r
        psp[3].lParam = 0;\r
        psp[3].pfnCallback = NULL;\r
 // TiMidity page4.\r
@@ -204,12 +281,28 @@ void PrefWndCreate(HWND hwnd)
        psp[4].DUMMYUNIONNAME.pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY4);\r
        psp[4].DUMMYUNIONNAME2.pszIcon = NULL;\r
 #else\r
-       psp[4].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY4);\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[4].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY4);\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[4].pszTemplate = MAKEINTRESOURCE(IDD_PREF_TIMIDITY4_EN);\r
+                       break;\r
+       }\r
        psp[4].pszIcon = NULL;\r
 #endif\r
 #endif\r
        psp[4].pfnDlgProc = PrefTiMidity4DialogProc;\r
-       psp[4].pszTitle = (LPSTR)TEXT("Channel");\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psp[4].pszTitle = (LPSTR)TEXT("\83`\83\83\83\93\83l\83\8b");\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psp[4].pszTitle = (LPSTR)TEXT("Channel");\r
+                       break;\r
+       }\r
        psp[4].lParam = 0;\r
        psp[4].pfnCallback = NULL;\r
 // Propsheetheader\r
@@ -218,7 +311,15 @@ void PrefWndCreate(HWND hwnd)
        psh.dwFlags = PSH_USEHICON | PSH_PROPSHEETPAGE | PSH_USECALLBACK;\r
        psh.hwndParent = hwnd;\r
        psh.hInstance = hInst;\r
-       psh.pszCaption = (LPSTR)TEXT("TiMidity Win32GUI Preference");\r
+       switch(PlayerLanguage) {        // \8c¾\8cê\90Ø\91Ö\r
+               case LANGUAGE_JAPANESE:\r
+                       psh.pszCaption = (LPSTR)TEXT("TiMidity++ Win32GUI - \8fÚ\8d×\90Ý\92è");\r
+                       break;\r
+               default:\r
+               case LANGUAGE_ENGLISH:\r
+                       psh.pszCaption = (LPSTR)TEXT("TiMidity++ Win32GUI - Preference");\r
+                       break;\r
+       }\r
        psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);\r
 #if defined (__cplusplus)\r
        psh.nStartPage = 0;\r
@@ -390,17 +491,23 @@ PrefPlayerDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                                                                DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOUNIQ,flag));\r
                        SettingCtlFlag(st_temp, 'R',\r
                                                                DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOREFINE,flag));\r
+                       SettingCtlFlag(st_temp, 'a',\r
+                                                               DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOSTART,flag));\r
                        SettingCtlFlag(st_temp, 'C',\r
                                                                DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NOT_CONTINUE,flag));\r
                        SettingCtlFlag(st_temp, 'd',\r
                                                                !DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NOT_DRAG_START,flag));\r
                        SettingCtlFlag(st_temp, 'l',\r
                                                                !DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NOT_LOOPING,flag));\r
+                       SettingCtlFlag(st_temp, 'r',\r
+                                                               DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_RANDOM,flag));\r
                        }\r
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_SEACHDIRRECURSIVE,\r
                                sp_temp->SeachDirRecursive);\r
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_DOCWNDINDEPENDENT,\r
                                sp_temp->DocWndIndependent);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_DOCWNDAUTOPOPUP,\r
+                               sp_temp->DocWndAutoPopup);\r
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_INIFILE_AUTOSAVE,\r
                                sp_temp->IniFileAutoSave);\r
                        SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);\r
@@ -432,17 +539,23 @@ PrefPlayerDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                                                                        strchr(st_temp->opt_ctl + 1, 'u'));\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AUTOREFINE,\r
                                                                        strchr(st_temp->opt_ctl + 1, 'R'));\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AUTOSTART,\r
+                                                                       strchr(st_temp->opt_ctl + 1, 'a'));\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NOT_CONTINUE,\r
                                                                        strchr(st_temp->opt_ctl + 1, 'C'));\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NOT_DRAG_START,\r
                                                                        !strchr(st_temp->opt_ctl + 1, 'd'));\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NOT_LOOPING,\r
                                                                        !strchr(st_temp->opt_ctl + 1, 'l'));\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_RANDOM,\r
+                                                                       strchr(st_temp->opt_ctl + 1, 'r'));\r
 \r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_SEACHDIRRECURSIVE,\r
                                                                        sp_temp->SeachDirRecursive);\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_DOCWNDINDEPENDENT,\r
                                                                        sp_temp->DocWndIndependent);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_DOCWNDAUTOPOPUP,\r
+                                                                       sp_temp->DocWndAutoPopup);\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_INIFILE_AUTOSAVE,\r
                                                                        sp_temp->IniFileAutoSave);\r
                        break;\r
@@ -544,7 +657,7 @@ PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        // CHORUS\r
                        if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_CHORUS,BM_GETCHECK,0,0)){\r
                                if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_CHORUS_LEVEL,BM_GETCHECK,0,0)){\r
-                                       st_temp->opt_chorus_control = -GetDlgItemInt(hwnd,IDC_EDIT_CHORUS,NULL,TRUE);\r
+                                       st_temp->opt_chorus_control = -(int)GetDlgItemInt(hwnd,IDC_EDIT_CHORUS,NULL,TRUE);\r
                                } else {\r
                                        st_temp->opt_chorus_control = 1;\r
                                }\r
@@ -556,7 +669,7 @@ PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                                if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_GLOBAL_REVERB,BM_GETCHECK,0,0)){\r
                                        st_temp->opt_reverb_control = 2;\r
                                } else if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_REVERB_LEVEL,BM_GETCHECK,0,0)){\r
-                                       st_temp->opt_reverb_control = -GetDlgItemInt(hwnd,IDC_EDIT_REVERB,NULL,TRUE);\r
+                                       st_temp->opt_reverb_control = -(int)GetDlgItemInt(hwnd,IDC_EDIT_REVERB,NULL,TRUE);\r
                                } else {\r
                                        st_temp->opt_reverb_control = 1;\r
                                }\r
@@ -578,6 +691,8 @@ PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                 }\r
                        // NOISESHARPING\r
                 st_temp->noise_sharp_type = GetDlgItemInt(hwnd,IDC_EDIT_NOISESHARPING,NULL,FALSE);\r
+                st_temp->opt_env_attack = GetDlgItemInt(hwnd,IDC_EDIT_ENV_ATTACK,NULL,FALSE);\r
+                st_temp->opt_velocity_table = GetDlgItemInt(hwnd,IDC_EDIT_VELOCITYTABLE,NULL,FALSE);\r
                        // Misc\r
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_MODWHEEL,st_temp->opt_modulation_wheel);\r
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_PORTAMENTO,st_temp->opt_portamento);\r
@@ -586,6 +701,12 @@ PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_OVOICE,st_temp->opt_overlap_voice_allow);\r
                        DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TRACETEXT,st_temp->opt_trace_text_meta_event);\r
                 st_temp->modify_release = GetDlgItemInt(hwnd,IDC_EDIT_MODIFY_RELEASE,NULL,FALSE);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TVAA,st_temp->opt_tva_attack);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TVAD,st_temp->opt_tva_decay);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TVAR,st_temp->opt_tva_release);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_PDELAY,st_temp->opt_delay_control);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_RESONANCE,st_temp->opt_resonance);\r
+                       DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_SRCHORUS,st_temp->opt_surround_chorus);\r
                        SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);\r
                        return TRUE;\r
                case PSN_RESET:\r
@@ -658,6 +779,8 @@ PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        SendMessage(hwnd,WM_COMMAND,IDC_CHECKBOX_DELAY,0);\r
                        // NOISESHARPING\r
                 SetDlgItemInt(hwnd,IDC_EDIT_NOISESHARPING,st_temp->noise_sharp_type,TRUE);\r
+                SetDlgItemInt(hwnd,IDC_EDIT_ENV_ATTACK,st_temp->opt_env_attack,TRUE);\r
+                SetDlgItemInt(hwnd,IDC_EDIT_VELOCITYTABLE,st_temp->opt_velocity_table,TRUE);\r
                        // Misc\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_MODWHEEL,st_temp->opt_modulation_wheel);\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_PORTAMENTO,st_temp->opt_portamento);\r
@@ -665,11 +788,18 @@ PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CHPRESS,st_temp->opt_channel_pressure);\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_OVOICE,st_temp->opt_overlap_voice_allow);\r
                        DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TRACETEXT,st_temp->opt_trace_text_meta_event);\r
-                SetDlgItemInt(hwnd,IDC_EDIT_MODIFY_RELEASE,st_temp->modify_release,TRUE);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TVAA,st_temp->opt_tva_attack);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TVAD,st_temp->opt_tva_decay);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TVAR,st_temp->opt_tva_release);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_PDELAY,st_temp->opt_delay_control);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_RESONANCE,st_temp->opt_resonance);\r
+                       DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_SRCHORUS,st_temp->opt_surround_chorus);\r
+                       SetDlgItemInt(hwnd,IDC_EDIT_MODIFY_RELEASE,st_temp->modify_release,TRUE);\r
                        break;\r
                default:\r
                        return FALSE;\r
                }\r
+               break;\r
    case WM_SIZE:\r
                return FALSE;\r
        case WM_CLOSE:\r
@@ -812,6 +942,7 @@ PrefTiMidity2DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                default:\r
                        return FALSE;\r
                }\r
+               break;\r
    case WM_SIZE:\r
                return FALSE;\r
        case WM_CLOSE:\r
@@ -822,13 +953,43 @@ PrefTiMidity2DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
        return FALSE;\r
 }\r
 \r
+\r
+\r
+// IDC_COMBO_OUTPUT_MODE\r
+static char *cb_info_IDC_COMBO_OUTPUT_MODE[]= {\r
+       "\88È\89º\82Ì\83t\83@\83C\83\8b\82É\8fo\97Í",(char *)0,\r
+       "\83t\83@\83C\83\8b\96¼\82ð\8e©\93®\82Å\8c\88\92è\82µ\81A\83\\81[\83X\82Æ\93¯\82\83t\83H\83\8b\83_\82É\8fo\97Í",(char *)1,\r
+       "\83t\83@\83C\83\8b\96¼\82ð\8e©\93®\82Å\8c\88\92è\82µ\81A\88È\89º\82Ì\83t\83H\83\8b\83_\82É\8fo\97Í",(char *)2,\r
+       "\83t\83@\83C\83\8b\96¼\82ð\8e©\93®\82Å\8c\88\92è\82µ\81A\88È\89º\82Ì\83t\83H\83\8b\83_\82É\8fo\97Í(\83t\83H\83\8b\83_\96¼\95t\82«)",(char *)3,\r
+       NULL\r
+};\r
+\r
 static BOOL APIENTRY\r
 PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (uMess){\r
    case WM_INITDIALOG:\r
-               SendDlgItemMessage(hwnd,IDC_EDIT_OUTPUT_FILE,\r
-               WM_SETFONT,(WPARAM)hFontPrefWnd,MAKELPARAM(TRUE,0));\r
+               {\r
+                       int i;\r
+                       SendDlgItemMessage(hwnd,IDC_EDIT_OUTPUT_FILE,WM_SETFONT,(WPARAM)hFontPrefWnd,MAKELPARAM(TRUE,0));\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_RESETCONTENT,(WPARAM)0,(LPARAM)0);\r
+                       for(i=0;play_mode_list[i]!=0;i++){\r
+                               SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)play_mode_list[i]->id_name);\r
+                       }\r
+                       for(i=0;cb_info_IDC_COMBO_OUTPUT_MODE[i];i+=2){\r
+                               SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_OUTPUT_MODE[i]);\r
+                       }\r
+                       {\r
+                               int cb_num;\r
+                               for(cb_num=0;(int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num];cb_num+=2){\r
+                                       SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_SETCURSEL,(WPARAM)0,(LPARAM)0);\r
+                                       if(st_temp->auto_output_mode==(int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num+1]){\r
+                                               SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_SETCURSEL,(WPARAM)cb_num/2,(LPARAM)0);\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
                break;\r
        case WM_COMMAND:\r
        switch (LOWORD(wParam)) {\r
@@ -849,6 +1010,9 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        {\r
                        char filename[MAXPATH+1];\r
                        DWORD res;\r
+                       if(st_temp->auto_output_mode>0){\r
+                               break;\r
+                       }\r
                        GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,filename,(WPARAM)MAX_PATH);\r
                 res = GetFileAttributes(filename);\r
                 if(res!=0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY)){\r
@@ -1020,6 +1184,41 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                                SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,0,0);\r
                 }\r
                        break;\r
+               case IDC_BUTTON_OUTPUT_OPTIONS:\r
+                       {\r
+                               int num;\r
+                               num = SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);\r
+                               if(num>=0){\r
+                                       st_temp->opt_playmode[0]=play_mode_list[num]->id_character;\r
+                               } else {\r
+                                       st_temp->opt_playmode[0]='d';\r
+                               }\r
+                               if(st_temp->opt_playmode[0]=='v'){\r
+                                       vorbisConfigDialog();\r
+                               } else if(st_temp->opt_playmode[0]=='g'){\r
+                                       gogoConfigDialog();\r
+                               }\r
+                       }\r
+                       break;\r
+               case IDC_COMBO_OUTPUT_MODE:\r
+                       {\r
+                               int cb_num1, cb_num2;\r
+                               cb_num1 = SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);\r
+                               for(cb_num2=0;(int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num2];cb_num2+=2){\r
+                                       if(cb_num1*2==cb_num2){\r
+                                               st_temp->auto_output_mode = (int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num2+1];\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               if(st_temp->auto_output_mode>0){\r
+                                       SendDlgItemMessage(hwnd,IDC_BUTTON_OUTPUT_FILE,WM_SETTEXT,0,(LPARAM)"\8fo\97Í\90æ");\r
+                                       SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName);\r
+                               } else {\r
+                                       SendDlgItemMessage(hwnd,IDC_BUTTON_OUTPUT_FILE,WM_SETTEXT,0,(LPARAM)"\8fo\97Í\83t\83@\83C\83\8b");\r
+                                       SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputName);\r
+                               }\r
+                       }\r
+                       break;\r
                default:\r
                break;\r
          }\r
@@ -1030,22 +1229,13 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                switch (((NMHDR FAR *) lParam)->code){\r
                case PSN_KILLACTIVE: {\r
                        int i = 0;\r
-                       if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_RIFF_WAVE,BM_GETCHECK,0,0)){\r
-                        st_temp->opt_playmode[i] = 'w';\r
-                } else\r
-                       if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_LIST_MIDI_EVENT,BM_GETCHECK,0,0)){\r
-                        st_temp->opt_playmode[i] = 'l';\r
-                } else\r
-                       if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_RAW_WAVEFORM,BM_GETCHECK,0,0)){\r
-                 st_temp->opt_playmode[i] = 'r';\r
-                } else\r
-                       if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_SUN_AUDIO,BM_GETCHECK,0,0)){\r
-                  st_temp->opt_playmode[i] = 'u';\r
-                } else\r
-                       if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_AIFF,BM_GETCHECK,0,0)){\r
-                       st_temp->opt_playmode[i] = 'a';\r
-                } else\r
-                       st_temp->opt_playmode[i] = 'd';\r
+                       int num;\r
+                       num = SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);\r
+                       if(num>=0){\r
+                               st_temp->opt_playmode[i]=play_mode_list[num]->id_character;\r
+                       } else {\r
+                               st_temp->opt_playmode[i]='d';\r
+                       }\r
                        i++;\r
                        if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_GETCHECK,0,0))\r
                                st_temp->opt_playmode[i++] = 'U';\r
@@ -1069,7 +1259,11 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                                st_temp->opt_playmode[i++] = 'M';\r
                        st_temp->opt_playmode[i] = '\0';\r
                        st_temp->output_rate = GetDlgItemInt(hwnd,IDC_EDIT_SAMPLE_RATE,NULL,FALSE);\r
-                       GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputName,(WPARAM)sizeof(st_temp->OutputName));\r
+                       if(st_temp->auto_output_mode==0)\r
+                               GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputName,(WPARAM)sizeof(st_temp->OutputName));\r
+                       else\r
+                               GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName,(WPARAM)sizeof(st_temp->OutputDirName));\r
+\r
                        SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);\r
                        }\r
                        return TRUE;\r
@@ -1082,37 +1276,22 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        break;\r
                case PSN_SETACTIVE: {\r
                        char *opt;\r
-                       switch(st_temp->opt_playmode[0]){\r
-                case 'w':\r
-                               CheckRadioButton(hwnd,IDC_RADIOBUTTON_WIN32AUDIO,IDC_RADIOBUTTON_AIFF,\r
-                               IDC_RADIOBUTTON_RIFF_WAVE);\r
-                               break;\r
-                case 'r':\r
-                               CheckRadioButton(hwnd,IDC_RADIOBUTTON_WIN32AUDIO,IDC_RADIOBUTTON_AIFF,\r
-                               IDC_RADIOBUTTON_RAW_WAVEFORM);\r
-                               break;\r
-                case 'u':\r
-                               CheckRadioButton(hwnd,IDC_RADIOBUTTON_WIN32AUDIO,IDC_RADIOBUTTON_AIFF,\r
-                               IDC_RADIOBUTTON_SUN_AUDIO);\r
-                               break;\r
-                case 'a':\r
-                               CheckRadioButton(hwnd,IDC_RADIOBUTTON_WIN32AUDIO,IDC_RADIOBUTTON_AIFF,\r
-                               IDC_RADIOBUTTON_AIFF);\r
-                               break;\r
-                case 'l':\r
-                               CheckRadioButton(hwnd,IDC_RADIOBUTTON_WIN32AUDIO,IDC_RADIOBUTTON_AIFF,\r
-                               IDC_RADIOBUTTON_LIST_MIDI_EVENT);\r
-                               break;\r
-                case 'd':\r
-                       default:\r
-                               CheckRadioButton(hwnd,IDC_RADIOBUTTON_WIN32AUDIO,IDC_RADIOBUTTON_AIFF,\r
-                               IDC_RADIOBUTTON_WIN32AUDIO);\r
+                       int num = 0;\r
+                       int i;\r
+                       for(i=0;play_mode_list[i]!=0;i++){\r
+                               if(st_temp->opt_playmode[0]==play_mode_list[i]->id_character){\r
+                                       num = i;\r
                                break;\r
                        }\r
+                       }\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_SETCURSEL,(WPARAM)num,(LPARAM)0);\r
+                       if(st_temp->auto_output_mode==0){\r
                        if(st_temp->OutputName[0]=='\0')\r
                                SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,TEXT("output.wav"));\r
                        else\r
                                SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,TEXT(st_temp->OutputName));\r
+                       } else\r
+                               SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName);\r
 \r
                        opt = st_temp->opt_playmode + 1;\r
                        if(strchr(opt, 'U')){\r
@@ -1163,6 +1342,7 @@ PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                default:\r
                        return FALSE;\r
                }\r
+               break;\r
    case WM_SIZE:\r
                return FALSE;\r
        case WM_CLOSE:\r
@@ -1227,6 +1407,27 @@ PrefTiMidity4DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                        SendMessage(hwnd,WM_NOTIFY,0,(LPARAM)&nmhdr);\r
                        }\r
                break;\r
+               case IDC_BUTTON_REVERSE:\r
+                       {\r
+                       NMHDR nmhdr;\r
+                       nmhdr.code = PSN_KILLACTIVE;\r
+                       SendMessage(hwnd,WM_NOTIFY,0,(LPARAM)&nmhdr);\r
+                       switch(pref_channel_mode){\r
+                       case PREF_CHANNEL_MODE_DRUM_CHANNEL_MASK:\r
+                               st_temp->default_drumchannel_mask = ~st_temp->default_drumchannel_mask;\r
+                               break;\r
+                       case PREF_CHANNEL_MODE_QUIET_CHANNEL:\r
+                               st_temp->quietchannels = ~st_temp->quietchannels;\r
+                               break;\r
+                       default:\r
+                       case PREF_CHANNEL_MODE_DRUM_CHANNEL:\r
+                               st_temp->default_drumchannels = ~st_temp->default_drumchannels;\r
+                               break;\r
+                       }\r
+                       nmhdr.code = PSN_SETACTIVE;\r
+                       SendMessage(hwnd,WM_NOTIFY,0,(LPARAM)&nmhdr);\r
+                       }\r
+                       break;\r
                default:\r
                break;\r
          }\r
@@ -1357,6 +1558,7 @@ PrefTiMidity4DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
                default:\r
                        return FALSE;\r
                }\r
+               break;\r
    case WM_SIZE:\r
                return FALSE;\r
        case WM_CLOSE:\r
@@ -1476,3 +1678,1204 @@ static int DlgOpenOutputFile(char *Filename, HWND hwnd)
        return -1;\r
        }\r
 }\r
+\r
+volatile int w32g_interactive_id3_tag_set = 0;\r
+int w32g_gogo_id3_tag_dialog(void)\r
+{\r
+       return 0;\r
+}\r
+\r
+\r
+#ifdef AU_GOGO\r
+///////////////////////////////////////////////////////////////////////\r
+//\r
+// gogo ConfigDialog\r
+//\r
+///////////////////////////////////////////////////////////////////////\r
+\r
+// id \82Ì\83R\83\93\83{\83{\83b\83N\83X\82Ì\8fî\95ñ\82Ì\92è\8b`\r
+#define CB_INFO_TYPE1_BEGIN(id) static int cb_info_ ## id [] = {\r
+#define CB_INFO_TYPE1_END };\r
+#define CB_INFO_TYPE2_BEGIN(id) static char * cb_info_ ## id [] = {\r
+#define CB_INFO_TYPE2_END };\r
+\r
+// cb_info_type1_\82h\82c  cb_info_type2_\82h\82\82Æ\82¢\82¤\82Ó\82¤\82É\82È\82é\81B\r
+\r
+// IDC_COMBO_OUTPUT_FORMAT\r
+CB_INFO_TYPE2_BEGIN(IDC_COMBO_OUTPUT_FORMAT)\r
+       "MP3+TAG",(char *)MC_OUTPUT_NORMAL,\r
+       "RIFF/WAVE",(char *)MC_OUTPUT_RIFF_WAVE,\r
+       "RIFF/RMP",(char *)MC_OUTPUT_RIFF_RMP,\r
+       NULL\r
+CB_INFO_TYPE2_END\r
+\r
+// IDC_COMBO_MPEG1_AUDIO_BITRATE\r
+CB_INFO_TYPE1_BEGIN(IDC_COMBO_MPEG1_AUDIO_BITRATE)\r
+       32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1\r
+CB_INFO_TYPE1_END\r
+\r
+// IDC_COMBO_MPEG2_AUDIO_BITRATE\r
+CB_INFO_TYPE1_BEGIN(IDC_COMBO_MPEG2_AUDIO_BITRATE)\r
+       8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1\r
+CB_INFO_TYPE1_END\r
+\r
+// IDC_COMBO_ENCODE_MODE\r
+CB_INFO_TYPE2_BEGIN(IDC_COMBO_ENCODE_MODE)\r
+       "monoral",(char *)MC_MODE_MONO,\r
+       "stereo",(char *)MC_MODE_STEREO,\r
+       "joint stereo",(char *)MC_MODE_JOINT,\r
+       "mid/side stereo",(char *)MC_MODE_MSSTEREO,\r
+       "dual channel",(char *)MC_MODE_DUALCHANNEL,\r
+       NULL\r
+CB_INFO_TYPE2_END\r
+\r
+// IDC_COMBO_EMPHASIS_TYPE\r
+CB_INFO_TYPE2_BEGIN(IDC_COMBO_EMPHASIS_TYPE)\r
+       "NONE",(char *)MC_EMP_NONE,\r
+       "50/15ms (normal CD-DA emphasis)",(char *)MC_EMP_5015MS,\r
+       "CCITT",(char *)MC_EMP_CCITT,\r
+       NULL\r
+CB_INFO_TYPE2_END\r
+\r
+// IDC_COMBO_VBR_BITRATE_LOW\r
+CB_INFO_TYPE1_BEGIN(IDC_COMBO_VBR_BITRATE_LOW)\r
+       32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1\r
+CB_INFO_TYPE1_END\r
+\r
+// IDC_COMBO_VBR_BITRATE_HIGH\r
+CB_INFO_TYPE1_BEGIN(IDC_COMBO_VBR_BITRATE_HIGH)\r
+       32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1\r
+CB_INFO_TYPE1_END\r
+\r
+// IDC_COMBO_VBR\r
+CB_INFO_TYPE2_BEGIN(IDC_COMBO_VBR)\r
+       "Quality 0 (320 - 32 kbps)",(char *)0,\r
+       "Quality 1 (256 - 32 kbps)",(char *)1,\r
+       "Quality 2 (256 - 32 kbps)",(char *)2,\r
+       "Quality 3 (256 - 32 kbps)",(char *)3,\r
+       "Quality 4 (256 - 32 kbps)",(char *)4,\r
+       "Quality 5 (224 - 32 kbps)",(char *)5,\r
+       "Quality 6 (192 - 32 kbps)",(char *)6,\r
+       "Quality 7 (160 - 32 kbps)",(char *)7,\r
+       "Quality 8 (128 - 32 kbps)",(char *)8,\r
+       "Quality 9 (128 - 32 kbps)",(char *)9,\r
+       NULL\r
+CB_INFO_TYPE2_END\r
+\r
+// id \82Ì\83R\83\93\83{\83{\83b\83N\83X\82ð\91I\91ð\82Ì\90Ý\92è\82·\82é\81B\r
+#define CB_SETCURSEL_TYPE1(id) \\r
+{ \\r
+       int cb_num; \\r
+       for(cb_num=0;(int)cb_info_ ## id [cb_num]>=0;cb_num++){ \\r
+               SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+               if(gogo_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num]){ \\r
+                       SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num,(LPARAM)0); \\r
+                       break; \\r
+               } \\r
+       } \\r
+}\r
+#define CB_SETCURSEL_TYPE2(id) \\r
+{ \\r
+       int cb_num; \\r
+       for(cb_num=0;(int)cb_info_ ## id [cb_num];cb_num+=2){ \\r
+               SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+           if(gogo_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num+1]){ \\r
+                       SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num/2,(LPARAM)0); \\r
+                       break; \\r
+               } \\r
+       } \\r
+}\r
+// id \82Ì\83R\83\93\83{\83{\83b\83N\83X\82Ì\91I\91ð\82ð\95Ï\90\94\82É\91ã\93ü\82·\82é\81B\r
+#define CB_GETCURSEL_TYPE1(id) \\r
+{ \\r
+       int cb_num1, cb_num2; \\r
+       cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+       for(cb_num2=0;(int)cb_info_ ## id [cb_num2]>=0;cb_num2++) \\r
+               if(cb_num1==cb_num2){ \\r
+                       gogo_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2]; \\r
+                       break; \\r
+               } \\r
+}\r
+#define CB_GETCURSEL_TYPE2(id) \\r
+{ \\r
+       int cb_num1, cb_num2; \\r
+       cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+       for(cb_num2=0;(int)cb_info_ ## id [cb_num2];cb_num2+=2) \\r
+               if(cb_num1*2==cb_num2){ \\r
+                       gogo_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2+1]; \\r
+                       break; \\r
+               } \\r
+}\r
+// \83`\83F\83b\83N\82³\82ê\82Ä\82¢\82é\82©\81B\r
+#define IS_CHECK(id) SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)\r
+// \83`\83F\83b\83N\82·\82é\81B\r
+#define CHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0)\r
+// \83`\83F\83b\83N\82ð\82Í\82¸\82·\81B\r
+#define UNCHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0)\r
+// id \82Ì\83`\83F\83b\83N\83{\83b\83N\83X\82ð\90Ý\92è\82·\82é\81B\r
+#define CHECKBOX_SET(id) \\r
+       if(gogo_ConfigDialogInfo.opt ## id>0) \\r
+               SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0); \\r
+       else \\r
+               SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0); \\r
+// id \82Ì\83`\83F\83b\83N\83{\83b\83N\83X\82ð\95Ï\90\94\82É\91ã\93ü\82·\82é\81B\r
+#define CHECKBOX_GET(id) \\r
+       if(SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)) \\r
+               gogo_ConfigDialogInfo.opt ## id = 1; \\r
+       else \\r
+               gogo_ConfigDialogInfo.opt ## id = 0; \\r
+// id \82Ì\83G\83f\83B\83b\83g\82ð\90Ý\92è\82·\82é\81B\r
+#define EDIT_SET(id) SendDlgItemMessage(hwnd,id,WM_SETTEXT,0,(LPARAM)gogo_ConfigDialogInfo.opt ## id);\r
+// id \82Ì\83G\83f\83B\83b\83g\82ð\95Ï\90\94\82É\91ã\93ü\82·\82é\81B\r
+#define EDIT_GET(id,size) SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)gogo_ConfigDialogInfo.opt ## id);\r
+#define EDIT_GET_RANGE(id,size,min,max) \\r
+{ \\r
+       char tmpbuf[64]; \\r
+       int value; \\r
+       SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)gogo_ConfigDialogInfo.opt ## id); \\r
+       value = atoi((char *)gogo_ConfigDialogInfo.opt ## id); \\r
+       if(value<min) value = min; \\r
+       if(value>max) value = max; \\r
+       sprintf(tmpbuf,"%d",value); \\r
+       strncpy((char *)gogo_ConfigDialogInfo.opt ## id,tmpbuf,size); \\r
+       (gogo_ConfigDialogInfo.opt ## id)[size] = '\0'; \\r
+}\r
+// \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø\89»\r
+#define ENABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),TRUE);\r
+// \83R\83\93\83g\83\8d\81[\83\8b\82Ì\96³\8cø\89»\r
+#define DISABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),FALSE);\r
+\r
+static void gogoConfigDialogProcControlEnableDisable(HWND hwnd);\r
+static void gogoConfigDialogProcControlApply(HWND hwnd);\r
+static void gogoConfigDialogProcControlReset(HWND hwnd);\r
+static int gogo_ConfigDialogInfoLock();\r
+static int gogo_ConfigDialogInfoUnLock();\r
+static HANDLE hgogoConfigDailog = NULL;\r
+static BOOL APIENTRY gogoConfigDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)\r
+{\r
+       char buff[1024];\r
+       switch (uMess){\r
+       case WM_INITDIALOG:\r
+       {\r
+               int i;\r
+               // \83R\83\93\83{\83{\83b\83N\83X\82Ì\8f\89\8aú\89»\r
+               for(i=0;cb_info_IDC_COMBO_OUTPUT_FORMAT[i];i+=2){\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_FORMAT,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_OUTPUT_FORMAT[i]);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_MPEG1_AUDIO_BITRATE[i]>=0;i++){\r
+                       sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_MPEG1_AUDIO_BITRATE[i]);\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_MPEG1_AUDIO_BITRATE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_MPEG2_AUDIO_BITRATE[i]>=0;i++){\r
+                       sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_MPEG2_AUDIO_BITRATE[i]);\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_MPEG2_AUDIO_BITRATE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_ENCODE_MODE[i];i+=2){\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_ENCODE_MODE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_ENCODE_MODE[i]);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_EMPHASIS_TYPE[i];i+=2){\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_EMPHASIS_TYPE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_EMPHASIS_TYPE[i]);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_VBR_BITRATE_LOW[i]>=0;i++){\r
+                       sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_VBR_BITRATE_LOW[i]);\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_VBR_BITRATE_LOW,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_VBR_BITRATE_HIGH[i]>=0;i++){\r
+                       sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_VBR_BITRATE_HIGH[i]);\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_VBR_BITRATE_HIGH,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);\r
+               }\r
+               for(i=0;cb_info_IDC_COMBO_VBR[i];i+=2){\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_VBR,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_VBR[i]);\r
+               }\r
+               // \90Ý\92è\r
+               gogoConfigDialogProcControlReset(hwnd);\r
+       }\r
+               break;\r
+       case WM_COMMAND:\r
+               switch (LOWORD(wParam)) {\r
+               case IDCLOSE:\r
+                       SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);\r
+                       break;\r
+               case IDOK:\r
+                       gogoConfigDialogProcControlApply(hwnd);\r
+                       SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);\r
+                       break;\r
+               case IDCANCEL:\r
+                       SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);\r
+                       break;\r
+               case IDC_BUTTON_APPLY:\r
+                       gogoConfigDialogProcControlApply(hwnd);\r
+                       break;\r
+               case IDC_CHECK_DEFAULT:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_CHECK_COMMANDLINE_OPTS:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_EDIT_COMMANDLINE_OPTION:\r
+                       break;\r
+               case IDC_CHECK_OUTPUT_FORMAT:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_OUTPUT_FORMAT:\r
+                       break;\r
+               case IDC_CHECK_MPEG1AUDIOBITRATE:\r
+                       if(IS_CHECK(IDC_CHECK_MPEG1AUDIOBITRATE)){\r
+                               CHECK(IDC_CHECK_MPEG2AUDIOBITRATE);\r
+                               UNCHECK(IDC_CHECK_VBR);\r
+                               UNCHECK(IDC_CHECK_VBR_BITRATE);\r
+                       } else {\r
+                               UNCHECK(IDC_CHECK_MPEG2AUDIOBITRATE);\r
+                       }\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_MPEG1_AUDIO_BITRATE:\r
+                       break;\r
+               case IDC_CHECK_MPEG2AUDIOBITRATE:\r
+                       if(IS_CHECK(IDC_CHECK_MPEG2AUDIOBITRATE)){\r
+                               CHECK(IDC_CHECK_MPEG1AUDIOBITRATE);\r
+                               UNCHECK(IDC_CHECK_VBR);\r
+                               UNCHECK(IDC_CHECK_VBR_BITRATE);\r
+                       } else {\r
+                               UNCHECK(IDC_CHECK_MPEG1AUDIOBITRATE);\r
+                       }\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_MPEG2_AUDIO_BITRATE:\r
+                       break;\r
+               case IDC_CHECK_ENHANCED_LOW_PASS_FILTER:\r
+                       if(IS_CHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)){\r
+                               UNCHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER);\r
+                       }\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_EDIT_LPF_PARA1:\r
+                       break;\r
+               case IDC_EDIT_LPF_PARA2:\r
+                       break;\r
+               case IDC_CHECK_ENCODE_MODE:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_ENCODE_MODE:\r
+                       break;\r
+               case IDC_CHECK_EMPHASIS_TYPE:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_EMPHASIS_TYPE:\r
+                       break;\r
+               case IDC_CHECK_OUTFREQ:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_EDIT_OUTFREQ:\r
+                       break;\r
+               case IDC_CHECK_MSTHRESHOLD:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_EDIT_MSTHRESHOLD_THRESHOLD:\r
+                       break;\r
+               case IDC_EDIT_MSTHRESHOLD_MSPOWER:\r
+                       break;\r
+               case IDC_CHECK_USE_CPU_OPTS:\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_CHECK_CPUMMX:\r
+                       break;\r
+               case IDC_CHECK_CPUSSE:\r
+                       break;\r
+               case IDC_CHECK_CPU3DNOW:\r
+                       break;\r
+               case IDC_CHECK_CPUE3DNOW:\r
+                       break;\r
+               case IDC_CHECK_VBR:\r
+                       if(IS_CHECK(IDC_CHECK_VBR)){\r
+                               UNCHECK(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+                               UNCHECK(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+                       }\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_VBR:\r
+                       break;\r
+               case IDC_CHECK_VBR_BITRATE:\r
+                       if(IS_CHECK(IDC_CHECK_VBR_BITRATE)){\r
+                               CHECK(IDC_CHECK_VBR);\r
+                               UNCHECK(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+                               UNCHECK(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+                       }\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_VBR_BITRATE_LOW:\r
+                       break;\r
+               case IDC_COMBO_VBR_BITRATE_HIGH:\r
+                       break;\r
+               case IDC_CHECK_USEPSY:\r
+                       break;\r
+               case IDC_CHECK_VERIFY:\r
+                       break;\r
+               case IDC_CHECK_16KHZ_LOW_PASS_FILTER:\r
+                       if(IS_CHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER)){\r
+                               UNCHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);\r
+                       }\r
+                       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               default:\r
+                       break;\r
+               }\r
+               break;\r
+       case WM_NOTIFY:\r
+               break;\r
+       case WM_SIZE:\r
+               return FALSE;\r
+       case WM_CLOSE:\r
+               gogo_ConfigDialogInfoSaveINI();\r
+//MessageBox(NULL,"CLOSE","CLOSE",MB_OK);\r
+               DestroyWindow(hwnd);\r
+               break;\r
+       case WM_DESTROY:\r
+               hgogoConfigDailog = NULL;\r
+//MessageBox(NULL,"DESTROY","DESTROY",MB_OK);\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+       return FALSE;\r
+}\r
+\r
+// \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø / \96³\8cø\89»\r
+static void gogoConfigDialogProcControlEnableDisable(HWND hwnd)\r
+{\r
+       ENABLE_CONTROL(IDC_CHECK_DEFAULT);\r
+       if(IS_CHECK(IDC_CHECK_DEFAULT)){\r
+               DISABLE_CONTROL(IDC_CHECK_COMMANDLINE_OPTS);\r
+               DISABLE_CONTROL(IDC_EDIT_COMMANDLINE_OPTION);\r
+               DISABLE_CONTROL(IDC_CHECK_OUTPUT_FORMAT);\r
+               DISABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);\r
+               DISABLE_CONTROL(IDC_CHECK_MPEG1AUDIOBITRATE);\r
+               DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+               DISABLE_CONTROL(IDC_CHECK_MPEG2AUDIOBITRATE);\r
+               DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+               DISABLE_CONTROL(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);\r
+               DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);\r
+               DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);\r
+               DISABLE_CONTROL(IDC_CHECK_ENCODE_MODE);\r
+               DISABLE_CONTROL(IDC_COMBO_ENCODE_MODE);\r
+               DISABLE_CONTROL(IDC_CHECK_EMPHASIS_TYPE);\r
+               DISABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);\r
+               DISABLE_CONTROL(IDC_CHECK_OUTFREQ);\r
+               DISABLE_CONTROL(IDC_EDIT_OUTFREQ);\r
+               DISABLE_CONTROL(IDC_CHECK_MSTHRESHOLD);\r
+               DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);\r
+               DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);\r
+               DISABLE_CONTROL(IDC_CHECK_USE_CPU_OPTS);\r
+               DISABLE_CONTROL(IDC_CHECK_CPUMMX);\r
+               DISABLE_CONTROL(IDC_CHECK_CPUSSE);\r
+               DISABLE_CONTROL(IDC_CHECK_CPU3DNOW);\r
+               DISABLE_CONTROL(IDC_CHECK_CPUE3DNOW);\r
+               DISABLE_CONTROL(IDC_CHECK_VBR);\r
+               DISABLE_CONTROL(IDC_COMBO_VBR);\r
+               DISABLE_CONTROL(IDC_CHECK_VBR_BITRATE);\r
+               DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);\r
+               DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);\r
+               DISABLE_CONTROL(IDC_CHECK_USEPSY);\r
+               DISABLE_CONTROL(IDC_CHECK_VERIFY);\r
+               DISABLE_CONTROL(IDC_CHECK_16KHZ_LOW_PASS_FILTER);\r
+       } else {\r
+               ENABLE_CONTROL(IDC_CHECK_COMMANDLINE_OPTS);\r
+               if(IS_CHECK(IDC_CHECK_COMMANDLINE_OPTS)){\r
+                       ENABLE_CONTROL(IDC_EDIT_COMMANDLINE_OPTION);\r
+                       DISABLE_CONTROL(IDC_CHECK_OUTPUT_FORMAT);\r
+                       DISABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);\r
+                       DISABLE_CONTROL(IDC_CHECK_MPEG1AUDIOBITRATE);\r
+                       DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+                       DISABLE_CONTROL(IDC_CHECK_MPEG2AUDIOBITRATE);\r
+                       DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+                       DISABLE_CONTROL(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);\r
+                       DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);\r
+                       DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);\r
+                       DISABLE_CONTROL(IDC_CHECK_ENCODE_MODE);\r
+                       DISABLE_CONTROL(IDC_COMBO_ENCODE_MODE);\r
+                       DISABLE_CONTROL(IDC_CHECK_EMPHASIS_TYPE);\r
+                       DISABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);\r
+                       DISABLE_CONTROL(IDC_CHECK_OUTFREQ);\r
+                       DISABLE_CONTROL(IDC_EDIT_OUTFREQ);\r
+                       DISABLE_CONTROL(IDC_CHECK_MSTHRESHOLD);\r
+                       DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);\r
+                       DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);\r
+                       DISABLE_CONTROL(IDC_CHECK_USE_CPU_OPTS);\r
+                       DISABLE_CONTROL(IDC_CHECK_CPUMMX);\r
+                       DISABLE_CONTROL(IDC_CHECK_CPUSSE);\r
+                       DISABLE_CONTROL(IDC_CHECK_CPU3DNOW);\r
+                       DISABLE_CONTROL(IDC_CHECK_CPUE3DNOW);\r
+                       DISABLE_CONTROL(IDC_CHECK_VBR);\r
+                       DISABLE_CONTROL(IDC_COMBO_VBR);\r
+                       DISABLE_CONTROL(IDC_CHECK_VBR_BITRATE);\r
+                       DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);\r
+                       DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);\r
+                       DISABLE_CONTROL(IDC_CHECK_USEPSY);\r
+                       DISABLE_CONTROL(IDC_CHECK_VERIFY);\r
+                       DISABLE_CONTROL(IDC_CHECK_16KHZ_LOW_PASS_FILTER);\r
+               } else {\r
+                       DISABLE_CONTROL(IDC_EDIT_COMMANDLINE_OPTION);\r
+                       ENABLE_CONTROL(IDC_CHECK_OUTPUT_FORMAT);\r
+                       if(IS_CHECK(IDC_CHECK_OUTPUT_FORMAT)){\r
+                               ENABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);\r
+                       } else {\r
+                               DISABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_16KHZ_LOW_PASS_FILTER);\r
+                       ENABLE_CONTROL(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);\r
+                       if(IS_CHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER)){\r
+                               UNCHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);\r
+                               DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);\r
+                               DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);\r
+                       } else {\r
+                               if(IS_CHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)){\r
+                                       UNCHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER);\r
+                                       ENABLE_CONTROL(IDC_EDIT_LPF_PARA1);\r
+                                       ENABLE_CONTROL(IDC_EDIT_LPF_PARA2);\r
+                               } else {\r
+                                       DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);\r
+                                       DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);\r
+                               }\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_ENCODE_MODE);\r
+                       if(IS_CHECK(IDC_CHECK_ENCODE_MODE)){\r
+                               ENABLE_CONTROL(IDC_COMBO_ENCODE_MODE);\r
+                       } else {\r
+                               DISABLE_CONTROL(IDC_COMBO_ENCODE_MODE);\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_EMPHASIS_TYPE);\r
+                       if(IS_CHECK(IDC_CHECK_EMPHASIS_TYPE)){\r
+                               ENABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);\r
+                       } else {\r
+                               DISABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_OUTFREQ);\r
+                       if(IS_CHECK(IDC_CHECK_OUTFREQ)){\r
+                               ENABLE_CONTROL(IDC_EDIT_OUTFREQ);\r
+                       } else {\r
+                               DISABLE_CONTROL(IDC_EDIT_OUTFREQ);\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_MSTHRESHOLD);\r
+                       if(IS_CHECK(IDC_CHECK_MSTHRESHOLD)){\r
+                               ENABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);\r
+                               ENABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);\r
+                       } else {\r
+                               DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);\r
+                               DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_USE_CPU_OPTS);\r
+                       if(IS_CHECK(IDC_CHECK_USE_CPU_OPTS)){\r
+                               ENABLE_CONTROL(IDC_CHECK_CPUMMX);\r
+                               ENABLE_CONTROL(IDC_CHECK_CPUSSE);\r
+                               ENABLE_CONTROL(IDC_CHECK_CPU3DNOW);\r
+                               ENABLE_CONTROL(IDC_CHECK_CPUE3DNOW);\r
+                       } else {\r
+                               DISABLE_CONTROL(IDC_CHECK_CPUMMX);\r
+                               DISABLE_CONTROL(IDC_CHECK_CPUSSE);\r
+                               DISABLE_CONTROL(IDC_CHECK_CPU3DNOW);\r
+                               DISABLE_CONTROL(IDC_CHECK_CPUE3DNOW);\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_VBR);\r
+                       ENABLE_CONTROL(IDC_CHECK_MPEG1AUDIOBITRATE);\r
+                       ENABLE_CONTROL(IDC_CHECK_MPEG2AUDIOBITRATE);\r
+                       if(IS_CHECK(IDC_CHECK_VBR)){\r
+                               ENABLE_CONTROL(IDC_COMBO_VBR);\r
+                               ENABLE_CONTROL(IDC_CHECK_VBR_BITRATE);\r
+                               if(IS_CHECK(IDC_CHECK_VBR_BITRATE)){\r
+                                       ENABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);\r
+                                       ENABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);\r
+                               } else {\r
+                                       DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);\r
+                                       DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);\r
+                               }\r
+                               UNCHECK(IDC_CHECK_MPEG1AUDIOBITRATE);\r
+                               UNCHECK(IDC_CHECK_MPEG2AUDIOBITRATE);\r
+                               DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+                               DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+                       } else {\r
+                               UNCHECK(IDC_CHECK_VBR_BITRATE);\r
+                               DISABLE_CONTROL(IDC_COMBO_VBR);\r
+                               DISABLE_CONTROL(IDC_CHECK_VBR_BITRATE);\r
+                               DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);\r
+                               DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);\r
+                               if(IS_CHECK(IDC_CHECK_MPEG1AUDIOBITRATE)){\r
+                                       ENABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+                               } else {\r
+                                       DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);\r
+                               }\r
+                               if(IS_CHECK(IDC_CHECK_MPEG2AUDIOBITRATE)){\r
+                                       ENABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+                               } else {\r
+                                       DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);\r
+                               }\r
+                       }\r
+                       ENABLE_CONTROL(IDC_CHECK_USEPSY);\r
+                       ENABLE_CONTROL(IDC_CHECK_VERIFY);\r
+               }\r
+       }\r
+}\r
+\r
+static void gogoConfigDialogProcControlReset(HWND hwnd)\r
+{\r
+       // \83R\83\93\83{\83{\83b\83N\83X\82Ì\91I\91ð\90Ý\92è\r
+       CB_SETCURSEL_TYPE2(IDC_COMBO_OUTPUT_FORMAT)\r
+       CB_SETCURSEL_TYPE1(IDC_COMBO_MPEG1_AUDIO_BITRATE)\r
+       CB_SETCURSEL_TYPE1(IDC_COMBO_MPEG2_AUDIO_BITRATE)\r
+       CB_SETCURSEL_TYPE2(IDC_COMBO_ENCODE_MODE)\r
+       CB_SETCURSEL_TYPE2(IDC_COMBO_EMPHASIS_TYPE)\r
+       CB_SETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_LOW)\r
+       CB_SETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_HIGH)\r
+       CB_SETCURSEL_TYPE2(IDC_COMBO_VBR)\r
+       // \83`\83F\83b\83N\83{\83b\83N\83X\82Ì\90Ý\92è\r
+       CHECKBOX_SET(IDC_CHECK_DEFAULT)\r
+       CHECKBOX_SET(IDC_CHECK_COMMANDLINE_OPTS)\r
+       CHECKBOX_SET(IDC_CHECK_OUTPUT_FORMAT)\r
+       CHECKBOX_SET(IDC_CHECK_MPEG1AUDIOBITRATE)\r
+       CHECKBOX_SET(IDC_CHECK_MPEG2AUDIOBITRATE)\r
+       CHECKBOX_SET(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)\r
+       CHECKBOX_SET(IDC_CHECK_ENCODE_MODE)\r
+       CHECKBOX_SET(IDC_CHECK_EMPHASIS_TYPE)\r
+       CHECKBOX_SET(IDC_CHECK_OUTFREQ)\r
+       CHECKBOX_SET(IDC_CHECK_MSTHRESHOLD)\r
+       CHECKBOX_SET(IDC_CHECK_USE_CPU_OPTS)\r
+       CHECKBOX_SET(IDC_CHECK_CPUMMX)\r
+       CHECKBOX_SET(IDC_CHECK_CPUSSE)\r
+       CHECKBOX_SET(IDC_CHECK_CPU3DNOW)\r
+       CHECKBOX_SET(IDC_CHECK_CPUE3DNOW)\r
+       CHECKBOX_SET(IDC_CHECK_VBR)\r
+       CHECKBOX_SET(IDC_CHECK_VBR_BITRATE)\r
+       CHECKBOX_SET(IDC_CHECK_USEPSY)\r
+       CHECKBOX_SET(IDC_CHECK_VERIFY)\r
+       CHECKBOX_SET(IDC_CHECK_16KHZ_LOW_PASS_FILTER)\r
+       // \83G\83f\83B\83b\83g\82Ì\90Ý\92è\r
+       EDIT_SET(IDC_EDIT_OUTFREQ)\r
+       EDIT_SET(IDC_EDIT_MSTHRESHOLD_THRESHOLD)\r
+       EDIT_SET(IDC_EDIT_MSTHRESHOLD_MSPOWER)\r
+       EDIT_SET(IDC_EDIT_COMMANDLINE_OPTION)\r
+       EDIT_SET(IDC_EDIT_LPF_PARA1)\r
+       EDIT_SET(IDC_EDIT_LPF_PARA2)\r
+       // \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø / \96³\8cø\89»\r
+       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+}\r
+\r
+static void gogoConfigDialogProcControlApply(HWND hwnd)\r
+{\r
+       // \83R\83\93\83{\83{\83b\83N\83X\82Ì\91I\91ð\90Ý\92è\r
+       CB_GETCURSEL_TYPE2(IDC_COMBO_OUTPUT_FORMAT)\r
+       CB_GETCURSEL_TYPE1(IDC_COMBO_MPEG1_AUDIO_BITRATE)\r
+       CB_GETCURSEL_TYPE1(IDC_COMBO_MPEG2_AUDIO_BITRATE)\r
+       CB_GETCURSEL_TYPE2(IDC_COMBO_ENCODE_MODE)\r
+       CB_GETCURSEL_TYPE2(IDC_COMBO_EMPHASIS_TYPE)\r
+       CB_GETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_LOW)\r
+       CB_GETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_HIGH)\r
+       CB_GETCURSEL_TYPE2(IDC_COMBO_VBR)\r
+       // \83`\83F\83b\83N\83{\83b\83N\83X\82Ì\90Ý\92è\r
+       CHECKBOX_GET(IDC_CHECK_DEFAULT)\r
+       CHECKBOX_GET(IDC_CHECK_COMMANDLINE_OPTS)\r
+       CHECKBOX_GET(IDC_CHECK_OUTPUT_FORMAT)\r
+       CHECKBOX_GET(IDC_CHECK_MPEG1AUDIOBITRATE)\r
+       CHECKBOX_GET(IDC_CHECK_MPEG2AUDIOBITRATE)\r
+       CHECKBOX_GET(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)\r
+       CHECKBOX_GET(IDC_CHECK_ENCODE_MODE)\r
+       CHECKBOX_GET(IDC_CHECK_EMPHASIS_TYPE)\r
+       CHECKBOX_GET(IDC_CHECK_OUTFREQ)\r
+       CHECKBOX_GET(IDC_CHECK_MSTHRESHOLD)\r
+       CHECKBOX_GET(IDC_CHECK_USE_CPU_OPTS)\r
+       CHECKBOX_GET(IDC_CHECK_CPUMMX)\r
+       CHECKBOX_GET(IDC_CHECK_CPUSSE)\r
+       CHECKBOX_GET(IDC_CHECK_CPU3DNOW)\r
+       CHECKBOX_GET(IDC_CHECK_CPUE3DNOW)\r
+       CHECKBOX_GET(IDC_CHECK_VBR)\r
+       CHECKBOX_GET(IDC_CHECK_VBR_BITRATE)\r
+       CHECKBOX_GET(IDC_CHECK_USEPSY)\r
+       CHECKBOX_GET(IDC_CHECK_VERIFY)\r
+       CHECKBOX_GET(IDC_CHECK_16KHZ_LOW_PASS_FILTER)\r
+       // \83G\83f\83B\83b\83g\82Ì\90Ý\92è\r
+       EDIT_GET_RANGE(IDC_EDIT_OUTFREQ,6,4000,65000)\r
+       EDIT_GET_RANGE(IDC_EDIT_MSTHRESHOLD_THRESHOLD,4,0,100)\r
+       EDIT_GET_RANGE(IDC_EDIT_MSTHRESHOLD_MSPOWER,4,0,100)\r
+       EDIT_GET(IDC_EDIT_COMMANDLINE_OPTION,1024)\r
+       EDIT_GET_RANGE(IDC_EDIT_LPF_PARA1,4,0,100)\r
+       EDIT_GET_RANGE(IDC_EDIT_LPF_PARA2,4,0,100)\r
+       // \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø / \96³\8cø\89»\r
+       gogoConfigDialogProcControlEnableDisable(hwnd);\r
+       // \83\8a\83Z\83b\83g\r
+       gogoConfigDialogProcControlReset(hwnd);\r
+}\r
+\r
+#undef CB_INFO_TYPE1_BEGIN\r
+#undef CB_INFO_TYPE1_END\r
+#undef CB_INFO_TYPE2_BEGIN\r
+#undef CB_INFO_TYPE2_END\r
+#undef CB_SETCURSEL_TYPE1\r
+#undef CB_SETCURSEL_TYPE2\r
+#undef CB_GETCURSEL_TYPE1\r
+#undef CB_GETCURSEL_TYPE2\r
+#undef CHECKBOX_SET\r
+#undef CHECKBOX_GET\r
+#undef EDIT_SET\r
+#undef EDIT_GET\r
+#undef EDIT_GET_RANGE\r
+\r
+#endif\r
+\r
+int gogoConfigDialog(void)\r
+{\r
+#ifdef AU_GOGO\r
+       if(!IsWindow(hgogoConfigDailog))\r
+               hgogoConfigDailog = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_GOGO),(HWND)hPrefWnd,gogoConfigDialogProc);\r
+       ShowWindow(hgogoConfigDailog,SW_SHOW);\r
+#endif\r
+       return 0;\r
+}\r
+\r
+#ifdef AU_GOGO\r
+\r
+static int gogo_ConfigDialogInfoLock()\r
+{\r
+       return 0;\r
+}\r
+static int gogo_ConfigDialogInfoUnLock()\r
+{\r
+       return 0;\r
+}\r
+\r
+volatile gogo_ConfigDialogInfo_t gogo_ConfigDialogInfo;\r
+\r
+int gogo_ConfigDialogInfoInit(void)\r
+{\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_DEFAULT = 1;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_COMMANDLINE_OPTS = 0;\r
+       gogo_ConfigDialogInfo.optIDC_EDIT_COMMANDLINE_OPTION[0] = '\0';\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_OUTPUT_FORMAT = 1;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_OUTPUT_FORMAT = MC_OUTPUT_NORMAL;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_MPEG1AUDIOBITRATE = 1;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_MPEG1_AUDIO_BITRATE = 160;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_MPEG2AUDIOBITRATE = 1;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_MPEG2_AUDIO_BITRATE = 80;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_ENHANCED_LOW_PASS_FILTER = 0;\r
+       strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA1,"55");\r
+       strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA2,"70");\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_ENCODE_MODE = 1;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_ENCODE_MODE = MC_MODE_STEREO;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_EMPHASIS_TYPE = 1;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_EMPHASIS_TYPE = MC_EMP_NONE;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_OUTFREQ = 0;\r
+       strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_OUTFREQ,"44100");\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_MSTHRESHOLD = 0;\r
+       strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_THRESHOLD,"75");\r
+       strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_MSPOWER,"66");\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_USE_CPU_OPTS = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_CPUMMX = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_CPU3DNOW = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_CPUE3DNOW = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_VBR = 0;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_VBR = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_VBR_BITRATE = 0;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_LOW = 32;\r
+       gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_HIGH = 320;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_USEPSY = 1;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_VERIFY = 0;\r
+       gogo_ConfigDialogInfo.optIDC_CHECK_16KHZ_LOW_PASS_FILTER = 1;\r
+       return 0;\r
+}\r
+\r
+int gogo_ConfigDialogInfoApply(void)\r
+{\r
+       gogo_ConfigDialogInfoLock();\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_DEFAULT>0){\r
+               gogo_opts_reset();\r
+               gogo_ConfigDialogInfoUnLock();\r
+               return 0;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_COMMANDLINE_OPTS>0){\r
+               gogo_opts_reset();\r
+               set_gogo_opts_use_commandline_options((char *)gogo_ConfigDialogInfo.optIDC_EDIT_COMMANDLINE_OPTION);\r
+               gogo_ConfigDialogInfoUnLock();\r
+               return 0;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_OUTPUT_FORMAT>0){\r
+               gogo_opts.optOUTPUT_FORMAT = gogo_ConfigDialogInfo.optIDC_COMBO_OUTPUT_FORMAT;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_MPEG1AUDIOBITRATE>0){\r
+               gogo_opts.optBITRATE1 = gogo_ConfigDialogInfo.optIDC_COMBO_MPEG1_AUDIO_BITRATE;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_MPEG2AUDIOBITRATE>0){\r
+               gogo_opts.optBITRATE2 = gogo_ConfigDialogInfo.optIDC_COMBO_MPEG2_AUDIO_BITRATE;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_ENHANCED_LOW_PASS_FILTER>0){\r
+               gogo_opts.optENHANCEDFILTER_A = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA1);\r
+               gogo_opts.optENHANCEDFILTER_B = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA2);\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_ENCODE_MODE>0){\r
+               gogo_opts.optENCODEMODE = gogo_ConfigDialogInfo.optIDC_COMBO_ENCODE_MODE;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_EMPHASIS_TYPE>0){\r
+               gogo_opts.optEMPHASIS = gogo_ConfigDialogInfo.optIDC_COMBO_EMPHASIS_TYPE;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_OUTFREQ>0){\r
+               gogo_opts.optOUTFREQ = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_OUTFREQ);\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_MSTHRESHOLD>0){\r
+               gogo_opts.optMSTHRESHOLD_threshold = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_THRESHOLD);\r
+               gogo_opts.optMSTHRESHOLD_mspower = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_MSPOWER);\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_USE_CPU_OPTS>0){\r
+               gogo_opts.optUSEMMX = gogo_ConfigDialogInfo.optIDC_CHECK_CPUMMX;\r
+               gogo_opts.optUSEKNI = gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE;\r
+               gogo_opts.optUSE3DNOW = gogo_ConfigDialogInfo.optIDC_CHECK_CPU3DNOW;\r
+               gogo_opts.optUSEE3DNOW = gogo_ConfigDialogInfo.optIDC_CHECK_CPUE3DNOW;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_VBR>0){\r
+               gogo_opts.optVBR = gogo_ConfigDialogInfo.optIDC_COMBO_VBR;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_VBR_BITRATE>0){\r
+               gogo_opts.optVBRBITRATE_low = gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_LOW;\r
+               gogo_opts.optVBRBITRATE_high = gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_HIGH;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_USEPSY>0){\r
+               gogo_opts.optUSEPSY = TRUE;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_VERIFY>0){\r
+               gogo_opts.optVERIFY = TRUE;\r
+       }\r
+       if(gogo_ConfigDialogInfo.optIDC_CHECK_16KHZ_LOW_PASS_FILTER>0){\r
+               gogo_opts.optUSELPF16 = TRUE;\r
+       }\r
+//     gogo_opts.optINPFREQ;                   // SYSTEM USE(\83V\83X\83e\83\80\82Å\8eg\97p\82·\82é\82©\82ç\8ew\92è\82Å\82«\82È\82¢)\r
+//     gogo_opts.optSTARTOFFSET;       // SYSTEM USE\r
+//     gogo_opts.optADDTAGnum;         // SYSTEM USE\r
+//     gogo_opts.optADDTAG_len[64];    // SYSTEM USE\r
+//     gogo_opts.optADDTAG_buf[64];    // SYSTEM USE\r
+//     gogo_opts.optCPU;                                       // PREPAIRING(\8f\80\94õ\92\86)\r
+//     gogo_opts.optBYTE_SWAP;                 // SYSTEM USE\r
+//     gogo_opts.opt8BIT_PCM;                  // SYSTEM USE\r
+//     gogo_opts.optMONO_PCM;          // SYSTEM USE\r
+//     gogo_opts.optTOWNS_SND;                 // SYSTEM USE\r
+//     gogo_opts.optTHREAD_PRIORITY;   // PREPARING\r
+//     gogo_opts.optREADTHREAD_PRIORITY;       // PREPARING\r
+//     gogo_opts.optOUTPUTDIR[1024];                   // SYSTEM USE\r
+//     gogo_opts.output_name[1024];                            // SYSTEM USE\r
+       gogo_ConfigDialogInfoUnLock();\r
+       return 0;\r
+}\r
+\r
+#define SEC_GOGO       "gogo"\r
+int gogo_ConfigDialogInfoSaveINI(void)\r
+{\r
+       char *section = SEC_GOGO;\r
+       char *inifile = timidity_output_inifile;\r
+       char buffer[1024];\r
+#define NUMSAVE(name) \\r
+               sprintf(buffer,"%d",gogo_ConfigDialogInfo. ## name ); \\r
+               WritePrivateProfileString(section, #name ,buffer,inifile);\r
+#define STRSAVE(name) \\r
+               WritePrivateProfileString(section,(char *) #name ,(char *)gogo_ConfigDialogInfo. ## name ,inifile);\r
+       NUMSAVE(optIDC_CHECK_DEFAULT)\r
+       NUMSAVE(optIDC_CHECK_COMMANDLINE_OPTS)\r
+       STRSAVE(optIDC_EDIT_COMMANDLINE_OPTION)\r
+       NUMSAVE(optIDC_CHECK_OUTPUT_FORMAT)\r
+       NUMSAVE(optIDC_COMBO_OUTPUT_FORMAT)\r
+       NUMSAVE(optIDC_CHECK_MPEG1AUDIOBITRATE)\r
+       NUMSAVE(optIDC_COMBO_MPEG1_AUDIO_BITRATE)\r
+       NUMSAVE(optIDC_CHECK_MPEG2AUDIOBITRATE)\r
+       NUMSAVE(optIDC_COMBO_MPEG2_AUDIO_BITRATE)\r
+       NUMSAVE(optIDC_CHECK_ENHANCED_LOW_PASS_FILTER)\r
+       STRSAVE(optIDC_EDIT_LPF_PARA1)\r
+       STRSAVE(optIDC_EDIT_LPF_PARA2)\r
+       NUMSAVE(optIDC_CHECK_ENCODE_MODE)\r
+       NUMSAVE(optIDC_COMBO_ENCODE_MODE)\r
+       NUMSAVE(optIDC_CHECK_EMPHASIS_TYPE)\r
+       NUMSAVE(optIDC_COMBO_EMPHASIS_TYPE)\r
+       NUMSAVE(optIDC_CHECK_OUTFREQ)\r
+       STRSAVE(optIDC_EDIT_OUTFREQ)\r
+       NUMSAVE(optIDC_CHECK_MSTHRESHOLD)\r
+       STRSAVE(optIDC_EDIT_MSTHRESHOLD_THRESHOLD)\r
+       STRSAVE(optIDC_EDIT_MSTHRESHOLD_MSPOWER)\r
+       NUMSAVE(optIDC_CHECK_USE_CPU_OPTS)\r
+       NUMSAVE(optIDC_CHECK_CPUMMX)\r
+       NUMSAVE(optIDC_CHECK_CPUSSE)\r
+       NUMSAVE(optIDC_CHECK_CPU3DNOW)\r
+       NUMSAVE(optIDC_CHECK_CPUE3DNOW)\r
+       NUMSAVE(optIDC_CHECK_VBR)\r
+       NUMSAVE(optIDC_COMBO_VBR)\r
+       NUMSAVE(optIDC_CHECK_VBR_BITRATE)\r
+       NUMSAVE(optIDC_COMBO_VBR_BITRATE_LOW)\r
+       NUMSAVE(optIDC_COMBO_VBR_BITRATE_HIGH)\r
+       NUMSAVE(optIDC_CHECK_USEPSY)\r
+       NUMSAVE(optIDC_CHECK_VERIFY)\r
+       NUMSAVE(optIDC_CHECK_16KHZ_LOW_PASS_FILTER)\r
+       WritePrivateProfileString(NULL,NULL,NULL,inifile);              // Write Flush\r
+#undef NUMSAVE\r
+#undef STRSAVE\r
+       return 0;\r
+}\r
+int gogo_ConfigDialogInfoLoadINI(void)\r
+{\r
+       char *section = SEC_GOGO;\r
+       char *inifile = timidity_output_inifile;\r
+       int num;\r
+       char buffer[1024];\r
+#define NUMLOAD(name) \\r
+               num = GetPrivateProfileInt(section, #name ,-1,inifile); \\r
+               if(num!=-1) gogo_ConfigDialogInfo. ## name = num;\r
+#define STRLOAD(name,len) \\r
+               GetPrivateProfileString(section,(char *) #name ,"",buffer,len,inifile); \\r
+               buffer[len-1] = '\0'; \\r
+               if(buffer[0]!=0) \\r
+                       strcpy((char *)gogo_ConfigDialogInfo. ## name ,buffer);\r
+       gogo_ConfigDialogInfoLock();\r
+       NUMLOAD(optIDC_CHECK_DEFAULT)\r
+       NUMLOAD(optIDC_CHECK_COMMANDLINE_OPTS)\r
+       STRLOAD(optIDC_EDIT_COMMANDLINE_OPTION,1024)\r
+       NUMLOAD(optIDC_CHECK_OUTPUT_FORMAT)\r
+       NUMLOAD(optIDC_COMBO_OUTPUT_FORMAT)\r
+       NUMLOAD(optIDC_CHECK_MPEG1AUDIOBITRATE)\r
+       NUMLOAD(optIDC_COMBO_MPEG1_AUDIO_BITRATE)\r
+       NUMLOAD(optIDC_CHECK_MPEG2AUDIOBITRATE)\r
+       NUMLOAD(optIDC_COMBO_MPEG2_AUDIO_BITRATE)\r
+       NUMLOAD(optIDC_CHECK_ENHANCED_LOW_PASS_FILTER)\r
+       STRLOAD(optIDC_EDIT_LPF_PARA1,4)\r
+       STRLOAD(optIDC_EDIT_LPF_PARA2,4)\r
+       NUMLOAD(optIDC_CHECK_ENCODE_MODE)\r
+       NUMLOAD(optIDC_COMBO_ENCODE_MODE)\r
+       NUMLOAD(optIDC_CHECK_EMPHASIS_TYPE)\r
+       NUMLOAD(optIDC_COMBO_EMPHASIS_TYPE)\r
+       NUMLOAD(optIDC_CHECK_OUTFREQ)\r
+       STRLOAD(optIDC_EDIT_OUTFREQ,6)\r
+       NUMLOAD(optIDC_CHECK_MSTHRESHOLD)\r
+       STRLOAD(optIDC_EDIT_MSTHRESHOLD_THRESHOLD,4)\r
+       STRLOAD(optIDC_EDIT_MSTHRESHOLD_MSPOWER,4)\r
+       NUMLOAD(optIDC_CHECK_USE_CPU_OPTS)\r
+       NUMLOAD(optIDC_CHECK_CPUMMX)\r
+       NUMLOAD(optIDC_CHECK_CPUSSE)\r
+       NUMLOAD(optIDC_CHECK_CPU3DNOW)\r
+       NUMLOAD(optIDC_CHECK_CPUE3DNOW)\r
+       NUMLOAD(optIDC_CHECK_VBR)\r
+       NUMLOAD(optIDC_COMBO_VBR)\r
+       NUMLOAD(optIDC_CHECK_VBR_BITRATE)\r
+       NUMLOAD(optIDC_COMBO_VBR_BITRATE_LOW)\r
+       NUMLOAD(optIDC_COMBO_VBR_BITRATE_HIGH)\r
+       NUMLOAD(optIDC_CHECK_USEPSY)\r
+       NUMLOAD(optIDC_CHECK_VERIFY)\r
+       NUMLOAD(optIDC_CHECK_16KHZ_LOW_PASS_FILTER)\r
+#undef NUMLOAD\r
+#undef STRLOAD\r
+       gogo_ConfigDialogInfoUnLock();\r
+       return 0;\r
+}\r
+\r
+#endif // AU_GOGO\r
+\r
+\r
+#ifdef AU_VORBIS\r
+///////////////////////////////////////////////////////////////////////\r
+//\r
+// vorbis ConfigDialog\r
+//\r
+///////////////////////////////////////////////////////////////////////\r
+\r
+volatile vorbis_ConfigDialogInfo_t vorbis_ConfigDialogInfo;\r
+\r
+// id \82Ì\83R\83\93\83{\83{\83b\83N\83X\82Ì\8fî\95ñ\82Ì\92è\8b`\r
+#define CB_INFO_TYPE1_BEGIN(id) static int cb_info_ ## id [] = {\r
+#define CB_INFO_TYPE1_END };\r
+#define CB_INFO_TYPE2_BEGIN(id) static char * cb_info_ ## id [] = {\r
+#define CB_INFO_TYPE2_END };\r
+\r
+// cb_info_type1_\82h\82c  cb_info_type2_\82h\82\82Æ\82¢\82¤\82Ó\82¤\82É\82È\82é\81B\r
+\r
+// IDC_COMBO_MODE\r
+CB_INFO_TYPE2_BEGIN(IDC_COMBO_MODE)\r
+       "\83f\83t\83H\83\8b\83g(\96ñ128kbps VBR)",(char *)0,\r
+       "\96ñ112kbps VBR",(char *)1,\r
+       "\96ñ128kbps VBR",(char *)2,\r
+       "\96ñ160kbps VBR",(char *)3,\r
+       "\96ñ192kbps VBR",(char *)4,\r
+       "\96ñ256kbps VBR",(char *)5,\r
+       "\96ñ350kbps VBR",(char *)6,\r
+       NULL\r
+CB_INFO_TYPE2_END\r
+\r
+// id \82Ì\83R\83\93\83{\83{\83b\83N\83X\82ð\91I\91ð\82Ì\90Ý\92è\82·\82é\81B\r
+#define CB_SETCURSEL_TYPE1(id) \\r
+{ \\r
+       int cb_num; \\r
+       for(cb_num=0;(int)cb_info_ ## id [cb_num]>=0;cb_num++){ \\r
+               SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+               if(vorbis_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num]){ \\r
+                       SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num,(LPARAM)0); \\r
+                       break; \\r
+               } \\r
+       } \\r
+}\r
+#define CB_SETCURSEL_TYPE2(id) \\r
+{ \\r
+       int cb_num; \\r
+       for(cb_num=0;(int)cb_info_ ## id [cb_num];cb_num+=2){ \\r
+               SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+           if(vorbis_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num+1]){ \\r
+                       SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num/2,(LPARAM)0); \\r
+                       break; \\r
+               } \\r
+       } \\r
+}\r
+// id \82Ì\83R\83\93\83{\83{\83b\83N\83X\82Ì\91I\91ð\82ð\95Ï\90\94\82É\91ã\93ü\82·\82é\81B\r
+#define CB_GETCURSEL_TYPE1(id) \\r
+{ \\r
+       int cb_num1, cb_num2; \\r
+       cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+       for(cb_num2=0;(int)cb_info_ ## id [cb_num2]>=0;cb_num2++) \\r
+               if(cb_num1==cb_num2){ \\r
+                       vorbis_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2]; \\r
+                       break; \\r
+               } \\r
+}\r
+#define CB_GETCURSEL_TYPE2(id) \\r
+{ \\r
+       int cb_num1, cb_num2; \\r
+       cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \\r
+       for(cb_num2=0;(int)cb_info_ ## id [cb_num2];cb_num2+=2) \\r
+               if(cb_num1*2==cb_num2){ \\r
+                       vorbis_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2+1]; \\r
+                       break; \\r
+               } \\r
+}\r
+// \83`\83F\83b\83N\82³\82ê\82Ä\82¢\82é\82©\81B\r
+#define IS_CHECK(id) SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)\r
+// \83`\83F\83b\83N\82·\82é\81B\r
+#define CHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0)\r
+// \83`\83F\83b\83N\82ð\82Í\82¸\82·\81B\r
+#define UNCHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0)\r
+// id \82Ì\83`\83F\83b\83N\83{\83b\83N\83X\82ð\90Ý\92è\82·\82é\81B\r
+#define CHECKBOX_SET(id) \\r
+       if(vorbis_ConfigDialogInfo.opt ## id>0) \\r
+               SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0); \\r
+       else \\r
+               SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0); \\r
+// id \82Ì\83`\83F\83b\83N\83{\83b\83N\83X\82ð\95Ï\90\94\82É\91ã\93ü\82·\82é\81B\r
+#define CHECKBOX_GET(id) \\r
+       if(SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)) \\r
+               vorbis_ConfigDialogInfo.opt ## id = 1; \\r
+       else \\r
+               vorbis_ConfigDialogInfo.opt ## id = 0; \\r
+// id \82Ì\83G\83f\83B\83b\83g\82ð\90Ý\92è\82·\82é\81B\r
+#define EDIT_SET(id) SendDlgItemMessage(hwnd,id,WM_SETTEXT,0,(LPARAM)vorbis_ConfigDialogInfo.opt ## id);\r
+// id \82Ì\83G\83f\83B\83b\83g\82ð\95Ï\90\94\82É\91ã\93ü\82·\82é\81B\r
+#define EDIT_GET(id,size) SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)vorbis_ConfigDialogInfo.opt ## id);\r
+#define EDIT_GET_RANGE(id,size,min,max) \\r
+{ \\r
+       char tmpbuf[64]; \\r
+       int value; \\r
+       SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)vorbis_ConfigDialogInfo.opt ## id); \\r
+       value = atoi((char *)vorbis_ConfigDialogInfo.opt ## id); \\r
+       if(value<min) value = min; \\r
+       if(value>max) value = max; \\r
+       sprintf(tmpbuf,"%d",value); \\r
+       strncpy((char *)vorbis_ConfigDialogInfo.opt ## id,tmpbuf,size); \\r
+       (vorbis_ConfigDialogInfo.opt ## id)[size] = '\0'; \\r
+}\r
+// \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø\89»\r
+#define ENABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),TRUE);\r
+// \83R\83\93\83g\83\8d\81[\83\8b\82Ì\96³\8cø\89»\r
+#define DISABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),FALSE);\r
+\r
+\r
+static void vorbisConfigDialogProcControlEnableDisable(HWND hwnd);\r
+static void vorbisConfigDialogProcControlApply(HWND hwnd);\r
+static void vorbisConfigDialogProcControlReset(HWND hwnd);\r
+static int vorbis_ConfigDialogInfoLock();\r
+static int vorbis_ConfigDialogInfoUnLock();\r
+static HANDLE hvorbisConfigDailog = NULL;\r
+static BOOL APIENTRY vorbisConfigDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)\r
+{\r
+       switch (uMess){\r
+       case WM_INITDIALOG:\r
+       {\r
+               int i;\r
+               // \83R\83\93\83{\83{\83b\83N\83X\82Ì\8f\89\8aú\89»\r
+               for(i=0;cb_info_IDC_COMBO_MODE[i];i+=2){\r
+                       SendDlgItemMessage(hwnd,IDC_COMBO_MODE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_MODE[i]);\r
+               }\r
+               // \90Ý\92è\r
+               vorbisConfigDialogProcControlReset(hwnd);\r
+       }\r
+               break;\r
+       case WM_COMMAND:\r
+               switch (LOWORD(wParam)) {\r
+               case IDCLOSE:\r
+                       SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);\r
+                       break;\r
+               case IDOK:\r
+                       vorbisConfigDialogProcControlApply(hwnd);\r
+                       SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);\r
+                       break;\r
+               case IDCANCEL:\r
+                       SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);\r
+                       break;\r
+               case IDC_BUTTON_APPLY:\r
+                       vorbisConfigDialogProcControlApply(hwnd);\r
+                       break;\r
+               case IDC_CHECK_DEFAULT:\r
+                       vorbisConfigDialogProcControlEnableDisable(hwnd);\r
+                       break;\r
+               case IDC_COMBO_MODE:\r
+                       break;\r
+               default:\r
+                       break;\r
+               }\r
+               break;\r
+       case WM_NOTIFY:\r
+               break;\r
+       case WM_SIZE:\r
+               return FALSE;\r
+       case WM_CLOSE:\r
+               vorbis_ConfigDialogInfoSaveINI();\r
+               DestroyWindow(hwnd);\r
+               break;\r
+       case WM_DESTROY:\r
+               hvorbisConfigDailog = NULL;\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+       return FALSE;\r
+}\r
+\r
+// \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø / \96³\8cø\89»\r
+static void vorbisConfigDialogProcControlEnableDisable(HWND hwnd)\r
+{\r
+       ENABLE_CONTROL(IDC_CHECK_DEFAULT);\r
+       if(IS_CHECK(IDC_CHECK_DEFAULT)){\r
+               DISABLE_CONTROL(IDC_COMBO_MODE);\r
+       } else {\r
+               ENABLE_CONTROL(IDC_COMBO_MODE);\r
+       }\r
+}\r
+\r
+static void vorbisConfigDialogProcControlReset(HWND hwnd)\r
+{\r
+       // \83R\83\93\83{\83{\83b\83N\83X\82Ì\91I\91ð\90Ý\92è\r
+       CB_SETCURSEL_TYPE2(IDC_COMBO_MODE)\r
+       // \83`\83F\83b\83N\83{\83b\83N\83X\82Ì\90Ý\92è\r
+       CHECKBOX_SET(IDC_CHECK_DEFAULT)\r
+       // \83G\83f\83B\83b\83g\82Ì\90Ý\92è\r
+       // \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø / \96³\8cø\89»\r
+       vorbisConfigDialogProcControlEnableDisable(hwnd);\r
+}\r
+\r
+static void vorbisConfigDialogProcControlApply(HWND hwnd)\r
+{\r
+       // \83R\83\93\83{\83{\83b\83N\83X\82Ì\91I\91ð\90Ý\92è\r
+       CB_GETCURSEL_TYPE2(IDC_COMBO_MODE)\r
+       // \83`\83F\83b\83N\83{\83b\83N\83X\82Ì\90Ý\92è\r
+       CHECKBOX_GET(IDC_CHECK_DEFAULT)\r
+       // \83G\83f\83B\83b\83g\82Ì\90Ý\92è\r
+       // \83R\83\93\83g\83\8d\81[\83\8b\82Ì\97L\8cø / \96³\8cø\89»\r
+       vorbisConfigDialogProcControlEnableDisable(hwnd);\r
+       // \83\8a\83Z\83b\83g\r
+       vorbisConfigDialogProcControlReset(hwnd);\r
+}\r
+\r
+#undef CB_INFO_TYPE1_BEGIN\r
+#undef CB_INFO_TYPE1_END\r
+#undef CB_INFO_TYPE2_BEGIN\r
+#undef CB_INFO_TYPE2_END\r
+#undef CB_SETCURSEL_TYPE1\r
+#undef CB_SETCURSEL_TYPE2\r
+#undef CB_GETCURSEL_TYPE1\r
+#undef CB_GETCURSEL_TYPE2\r
+#undef CHECKBOX_SET\r
+#undef CHECKBOX_GET\r
+#undef EDIT_SET\r
+#undef EDIT_GET\r
+#undef EDIT_GET_RANGE\r
+\r
+#endif\r
+\r
+int vorbisConfigDialog(void)\r
+{\r
+#ifdef AU_VORBIS\r
+       if(!IsWindow(hvorbisConfigDailog))\r
+               hvorbisConfigDailog = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_VORBIS),(HWND)hPrefWnd,vorbisConfigDialogProc);\r
+       ShowWindow(hvorbisConfigDailog,SW_SHOW);\r
+#endif\r
+       return 0;\r
+}\r
+\r
+#ifdef AU_VORBIS\r
+\r
+static int vorbis_ConfigDialogInfoLock()\r
+{\r
+       return 0;\r
+}\r
+static int vorbis_ConfigDialogInfoUnLock()\r
+{\r
+       return 0;\r
+}\r
+\r
+int vorbis_ConfigDialogInfoInit(void)\r
+{\r
+       vorbis_ConfigDialogInfo.optIDC_CHECK_DEFAULT = 1;\r
+       vorbis_ConfigDialogInfo.optIDC_COMBO_MODE = 0;\r
+       return 0;\r
+}\r
+\r
+extern volatile int ogg_vorbis_mode;\r
+int vorbis_ConfigDialogInfoApply(void)\r
+{\r
+       vorbis_ConfigDialogInfoLock();\r
+       if(vorbis_ConfigDialogInfo.optIDC_CHECK_DEFAULT>0){\r
+//             vorbis_opts_reset();\r
+               vorbis_ConfigDialogInfoUnLock();\r
+               return 0;\r
+       }\r
+       ogg_vorbis_mode = vorbis_ConfigDialogInfo.optIDC_COMBO_MODE;\r
+       vorbis_ConfigDialogInfoUnLock();\r
+       return 0;\r
+}\r
+\r
+#define SEC_VORBIS     "vorbis"\r
+int vorbis_ConfigDialogInfoSaveINI(void)\r
+{\r
+       char *section = SEC_VORBIS;\r
+       char *inifile = timidity_output_inifile;\r
+       char buffer[1024];\r
+//     int len;\r
+#define NUMSAVE(name) \\r
+               sprintf(buffer,"%d",vorbis_ConfigDialogInfo. ## name ); \\r
+               WritePrivateProfileString(section, #name ,buffer,inifile);\r
+//#define STRSAVE(name,len) \\r
+//             WritePrivateProfileString(section,(char *) #name ,(char *)vorbis_ConfigDialogInfo. ## name ,inifile);\r
+       NUMSAVE(optIDC_CHECK_DEFAULT)\r
+       NUMSAVE(optIDC_COMBO_MODE)\r
+       WritePrivateProfileString(NULL,NULL,NULL,inifile);              // Write Flush\r
+#undef NUMSAVE\r
+//#undef STRSAVE\r
+       return 0;\r
+}\r
+int vorbis_ConfigDialogInfoLoadINI(void)\r
+{\r
+       char *section = SEC_VORBIS;\r
+       char *inifile = timidity_output_inifile;\r
+       int num;\r
+//     char buffer[1024];\r
+#define NUMLOAD(name) \\r
+               num = GetPrivateProfileInt(section, #name ,-1,inifile); \\r
+               if(num!=-1) vorbis_ConfigDialogInfo. ## name = num;\r
+//#define STRLOAD(name,len) \\r
+//             GetPrivateProfileString(section,(char *) #name ,"",buffer,len,inifile); \\r
+//             buffer[len-1] = '\0'; \\r
+//             if(buffer[0]!=0) \\r
+//                     strcpy((char *)vorbis_ConfigDialogInfo. ## name ,buffer);\r
+       vorbis_ConfigDialogInfoLock();\r
+       NUMLOAD(optIDC_CHECK_DEFAULT)\r
+       NUMLOAD(optIDC_COMBO_MODE)\r
+#undef NUMLOAD\r
+//#undef STRLOAD\r
+       vorbis_ConfigDialogInfoUnLock();\r
+       return 0;\r
+}\r
+\r
+#endif // AU_VORBIS\r
index aa9b941..7d27dde 100644 (file)
@@ -3,15 +3,27 @@
 // Used by w32g_res.rc\r
 //\r
 #define IDD_DIALOG_SEARCHBOX            102\r
+#define IDD_DIALOG_VORBIS               103\r
+#define IDD_DIALOG_GOGO                 104\r
+#define IDD_PREF_PLAYER_EN              106\r
+#define IDD_PREF_TIMIDITY1_EN           107\r
+#define IDD_PREF_TIMIDITY2_EN           108\r
+#define IDD_PREF_TIMIDITY3_EN           109\r
+#define IDD_PREF_TIMIDITY4_EN           110\r
+#define IDD_DIALOG_MAIN_EN              111\r
+#define IDM_MENU_MAIN_EN                112\r
 #define IDC_CHECK_SEACHDIRRECURSIVE     1001\r
 #define IDC_CHECK_DOCWNDINDEPENDENT     1002\r
 #define IDC_CHECK_INIFILE_AUTOSAVE      1003\r
 #define IDD_DIALOG_WAVEFORM             1004\r
+#define IDC_CHECK_DOCWNDAUTOPOPUP       1004\r
 #define IDC_CHECKBOX_CHORUS_LEVEL       1005\r
 #define IDC_CHECKBOX_GLOBAL_REVERB      1006\r
 #define IDC_CHECKBOX_REVERB_LEVEL       1007\r
 #define IDC_CHECKBOX_CH01               1008\r
+#define IDC_CHECKBOX_SRCHORUS           1008\r
 #define IDC_CHECKBOX_CH02               1009\r
+#define IDC_CHECKBOX_RESONANCE          1009\r
 #define IDC_CHECKBOX_CH03               1010\r
 #define IDC_CHECKBOX_CH04               1011\r
 #define IDC_CHECKBOX_CH05               1012\r
 #define IDC_EDIT_CONTROL_RATIO          1092\r
 #define IDC_EDIT_MODIFY_RELEASE         1093\r
 #define IDC_EDIT_AMPLIFICATION          1094\r
+#define IDC_EDIT_ENV_ATTACK             1094\r
 #define IDC_EDIT_CACHE_SIZE             1095\r
+#define IDC_EDIT_AUTOMAXIMIZE           1095\r
+#define IDC_EDIT_VELOCITYTABLE          1095\r
 #define IDC_EDIT_SPECIAL_TONEBANK       1097\r
 #define IDC_CHECKBOX_NOT_LOOPING        1097\r
 #define IDC_EDIT_DEFAULT_TONEBANK       1098\r
+#define IDC_CHECKBOX_AUTOSTART          1098\r
 #define IDC_EDIT_REDUCE_VOICE           1099\r
+#define IDC_CHECKBOX_RANDOM             1099\r
 #define IDC_EDIT_CTL_VEBOSITY           1100\r
 #define IDC_EDIT_DELAY                  1101\r
 #define IDC_RADIOBUTTON_DELAY_LEFT      1102\r
 #define IDC_RADIOBUTTON_GS              1195\r
 #define IDC_RADIOBUTTON_XG              1196\r
 #define IDC_EDIT1                       2000\r
+#define IDC_EDIT2                       2001\r
 #define IDC_EDIT_NUM                    2002\r
+#define IDC_EDIT3                       2002\r
+#define IDC_BUTTON_REVERSE              2003\r
+#define IDC_COMBO_OUTPUT                2004\r
+#define IDC_BUTTON_OUTPUT_OPTIONS       2005\r
+#define IDC_CHECK_DEFAULT               2007\r
+#define IDC_COMBO_MODE                  2008\r
+#define IDC_CHECK_USE_TAG               2009\r
+#define IDC_COMBO_OUTPUT_FORMAT         2013\r
+#define IDC_CHECK_COMMANDLINE_OPTS      2015\r
+#define IDC_EDIT_COMMANDLINE_OPTION     2016\r
+#define IDC_COMBO_MPEG1_AUDIO_BITRATE   2017\r
+#define IDC_COMBO_MPEG2_AUDIO_BITRATE   2018\r
+#define IDC_COMBO_VBR_BITRATE_LOW       2019\r
+#define IDC_COMBO_VBR_BITRATE_HIGH      2020\r
+#define IDC_CHECK_16KHZ_LOW_PASS_FILTER 2021\r
+#define IDC_CHECK_ENHANCED_LOW_PASS_FILTER 2022\r
+#define IDC_EDIT_LPF_PARA1              2023\r
+#define IDC_EDIT_LPF_PARA2              2024\r
+#define IDC_COMBO_ENCODE_MODE           2025\r
+#define IDC_CHECK_USEPSY                2026\r
+#define IDC_CHECK_CPUMMX                2027\r
+#define IDC_CHECK_CPUSSE                2028\r
+#define IDC_CHECK_CPU3DNOW              2029\r
+#define IDC_CHECK_CPUE3DNOW             2030\r
+#define IDC_COMBO_EMPHASIS_TYPE         2031\r
+#define IDC_COMBO_VBR                   2033\r
+#define IDC_CHECK_VBR                   2034\r
+#define IDC_CHECK_OUTFREQ               2035\r
+#define IDC_EDIT_OUTFREQ                2036\r
+#define IDC_CHECK_MSTHRESHOLD           2037\r
+#define IDC_EDIT_MSTHRESHOLD_THRESHOLD  2038\r
+#define IDC_EDIT_MSTHRESHOLD_MSPOWER    2039\r
+#define IDC_CHECK_VERIFY                2040\r
+#define IDC_BUTTON_APPLY                2041\r
+#define IDC_COMBO_OUTPUT_MODE           2042\r
+#define IDC_CHECK_USE_CPU_OPTS          2043\r
+#define IDC_CHECK_MPEG1AUDIOBITRATE     2045\r
+#define IDC_CHECK_MPEG2AUDIOBITRATE     2046\r
+#define IDC_CHECK_VBR_BITRATE           2047\r
+#define IDC_CHECK_OUTPUT_FORMAT         2048\r
+#define IDC_CHECK_ENCODE_MODE           2049\r
+#define IDC_CHECK_EMPHASIS_TYPE         2050\r
+#define IDC_CHECKBOX_TVAA               2057\r
+#define IDC_CHECKBOX_TVAD               2058\r
+#define IDC_CHECKBOX_TVAR               2059\r
+#define IDC_CHECKBOX_PDELAY             2060\r
 #define IDC_STATIC                      -1\r
 \r
 // Next default values for new objects\r
 // \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NEXT_RESOURCE_VALUE        103\r
-#define _APS_NEXT_COMMAND_VALUE         40001\r
-#define _APS_NEXT_CONTROL_VALUE         2003\r
+#define _APS_NEXT_RESOURCE_VALUE        113\r
+#define _APS_NEXT_COMMAND_VALUE         40002\r
+#define _APS_NEXT_CONTROL_VALUE         2061\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 5d3f640..65f2492 100644 (file)
@@ -34,10 +34,10 @@ IDD_DIALOG_MAIN DIALOGEX 0, 0, 308, 64
 STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | \r
     WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU\r
 EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | \r
-    WS_EX_LEFTSCROLLBAR | WS_EX_APPWINDOW\r
+    WS_EX_APPWINDOW\r
 CAPTION "TiMidity++ Win32GUI"\r
 MENU IDM_MENU_MAIN\r
-FONT 8, "MS Sans Serif", 0, 0\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
 BEGIN\r
     CONTROL         "ToolBarMain",IDC_TOOLBARWINDOW_MAIN,"ToolbarWindow32",\r
                     WS_TABSTOP | 0x14c,2,46,112,17\r
@@ -50,181 +50,7 @@ BEGIN
     CONTROL         "",IDC_RECT_CANVAS,"Static",SS_GRAYFRAME,220,0,68,44\r
 END\r
 \r
-#endif    // Æ­°Ä×Ù resources\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// \93ú\96{\8cê resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT\r
-#pragma code_page(932)\r
-#endif //_WIN32\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Dialog\r
-//\r
-\r
-IDD_DIALOG_DEBUG DIALOGEX 0, 0, 240, 240\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Debug Window (TiMidity Win32GUI)"\r
-FONT 9, "Times New Roman", 400, 0\r
-BEGIN\r
-    PUSHBUTTON      "C L E A R",IDCLEAR,72,164,68,16,BS_CENTER\r
-    CONTROL         "VALID",IDC_CHECKBOX_DEBUG_WND_VALID,"Button",\r
-                    BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,20,164,36,16\r
-    CONTROL         "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,16,164,44,16\r
-    PUSHBUTTON      "E X I T",IDC_BUTTON_EXIT,144,164,48,16,BS_CENTER | \r
-                    WS_DISABLED\r
-    PUSHBUTTON      "ExitProcess",IDC_BUTTON_EXITPROCESS,196,164,40,16,\r
-                    BS_CENTER\r
-    CONTROL         "Frame2",-1,"Static",SS_ETCHEDFRAME,0,184,240,1\r
-    PUSHBUTTON      "Heaps Check",IDC_BUTTON_HEAP_CHECK,4,188,50,16,\r
-                    BS_CENTER\r
-    PUSHBUTTON      "Variables Check",IDC_BUTTON_VARIABLES_CHECK,60,188,50,\r
-                    16,BS_CENTER\r
-    EDITTEXT        IDC_EDIT,0,0,240,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
-                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
-                    WS_VSCROLL | WS_HSCROLL\r
-END\r
-\r
-IDD_DIALOG_CONSOLE DIALOGEX 0, 0, 243, 184\r
-STYLE DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Console Window (TiMidity Win32GUI)"\r
-FONT 9, "\82l\82\82o\96¾\92©", 0, 0\r
-BEGIN\r
-    PUSHBUTTON      "C L E A R",IDCLEAR,140,167,96,16,BS_CENTER\r
-    EDITTEXT        IDC_EDIT_VERBOSITY,44,167,16,16,ES_OEMCONVERT\r
-    CONTROL         "VALID",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | \r
-                    BS_LEFTTEXT | WS_TABSTOP,92,167,32,16\r
-    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,4,167,80,16\r
-    EDITTEXT        IDC_EDIT,0,0,242,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
-                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
-                    WS_VSCROLL | WS_HSCROLL,WS_EX_STATICEDGE\r
-    PUSHBUTTON      "VERBOSITY",IDC_BUTTON_VERBOSITY,4,167,40,16,BS_CENTER,\r
-                    WS_EX_CLIENTEDGE\r
-    PUSHBUTTON      "<<",IDC_BUTTON_DEC,60,167,12,16,BS_CENTER\r
-    PUSHBUTTON      ">>",IDC_BUTTON_INC,72,167,12,16,BS_CENTER\r
-    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,88,167,41,16\r
-END\r
-\r
-IDD_DIALOG_CONSOLE_EN DIALOGEX 0, 0, 247, 181\r
-STYLE DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Console Window (TiMidity Win32GUI)"\r
-FONT 8, "Times New Roman"\r
-BEGIN\r
-    PUSHBUTTON      "C L E A R",IDCLEAR,150,165,90,15,BS_CENTER\r
-    EDITTEXT        IDC_EDIT_VERBOSITY,50,165,21,15,ES_OEMCONVERT\r
-    CONTROL         "VALID",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | \r
-                    BS_LEFTTEXT | WS_TABSTOP,110,165,32,15\r
-    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,5,165,96,16\r
-    EDITTEXT        IDC_EDIT,0,0,245,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
-                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
-                    WS_VSCROLL | WS_HSCROLL,WS_EX_STATICEDGE\r
-    PUSHBUTTON      "VERBOSITY",IDC_BUTTON_VERBOSITY,4,165,46,15,BS_CENTER,\r
-                    WS_EX_CLIENTEDGE\r
-    PUSHBUTTON      "<<",IDC_BUTTON_DEC,70,165,15,16,BS_CENTER\r
-    PUSHBUTTON      ">>",IDC_BUTTON_INC,85,165,15,16,BS_CENTER\r
-    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,105,165,40,16\r
-END\r
-\r
-IDD_DIALOG_DOC DIALOG DISCARDABLE  0, 0, 302, 257\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
-CAPTION "Document Window (TiMidity Win32GUI)"\r
-FONT 9, "\82l\82\96¾\92©"\r
-BEGIN\r
-    EDITTEXT        IDC_EDIT_FILENAME,100,240,150,16,ES_CENTER | ES_READONLY\r
-    PUSHBUTTON      "<<",IDC_BUTTON_PREV,255,240,20,16,BS_CENTER\r
-    PUSHBUTTON      ">>",IDC_BUTTON_NEXT,275,240,20,16,BS_CENTER\r
-    EDITTEXT        IDC_EDIT,0,0,295,220,ES_MULTILINE | ES_AUTOVSCROLL | \r
-                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
-                    WS_VSCROLL | WS_HSCROLL\r
-    EDITTEXT        IDC_EDIT_INFO,0,240,95,16,ES_READONLY\r
-END\r
-\r
-IDD_DIALOG_DOC_EN DIALOG DISCARDABLE  0, 0, 241, 180\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
-CAPTION "Document Window (TiMidity Win32GUI)"\r
-FONT 9, "Times New Roman"\r
-BEGIN\r
-    EDITTEXT        IDC_EDIT_FILENAME,60,168,140,12,ES_CENTER | ES_READONLY\r
-    PUSHBUTTON      "<<",IDC_BUTTON_PREV,204,168,16,12,BS_CENTER\r
-    PUSHBUTTON      ">>",IDC_BUTTON_NEXT,220,168,16,12,BS_CENTER\r
-    EDITTEXT        IDC_EDIT,0,0,236,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
-                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
-                    WS_VSCROLL | WS_HSCROLL\r
-    EDITTEXT        IDC_EDIT_INFO,0,168,56,12,ES_READONLY\r
-END\r
-\r
-IDD_DIALOG_WRD DIALOGEX 0, 0, 320, 220\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Wrd Tracer Window (TiMidity Win32GUI)"\r
-FONT 9, "Times New Roman", 400, 0\r
-BEGIN\r
-    PUSHBUTTON      "FLUSH",IDFLUSH,256,200,60,16,BS_CENTER\r
-    CONTROL         "VALID",IDC_CHECKBOX_DEBUG_WND_VALID,"Button",\r
-                    BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,16,200,36,16\r
-    CONTROL         "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,12,200,44,16\r
-END\r
-\r
-IDD_DIALOG_SOUNDSPEC DIALOGEX 0, 0, 240, 180\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Sound Spec Window (TiMidity Win32GUI)"\r
-FONT 9, "Times New Roman", 400, 0\r
-BEGIN\r
-    PUSHBUTTON      "C L E A R",IDCLEAR,136,164,96,16,BS_CENTER\r
-    CONTROL         "VALID",IDC_CHECKBOX_DEBUG_WND_VALID,"Button",\r
-                    BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,20,164,36,16\r
-    CONTROL         "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,16,164,44,16\r
-END\r
-\r
-IDD_DIALOG_TRACER DIALOGEX 0, 0, 320, 220\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Tracer Window (TiMidity Win32GUI)"\r
-FONT 9, "Times New Roman", 400, 0\r
-BEGIN\r
-    PUSHBUTTON      "FLUSH",IDFLUSH,256,200,60,16,BS_CENTER\r
-    CONTROL         "VALID",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | \r
-                    BS_LEFTTEXT | WS_TABSTOP,16,200,36,16\r
-    CONTROL         "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,12,200,44,16\r
-END\r
-\r
-IDD_DIALOG_SIMPLE_LIST DIALOGEX 0, 0, 242, 187\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
-EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_ACCEPTFILES\r
-CAPTION "List Window (TiMidity Win32GUI)"\r
-FONT 9, "\82l\82\82o\96¾\92©"\r
-BEGIN\r
-    LISTBOX         IDC_LISTBOX_PLAYLIST,0,0,241,172,LBS_HASSTRINGS | \r
-                    LBS_WANTKEYBOARDINPUT | LBS_DISABLENOSCROLL | WS_VSCROLL | \r
-                    WS_HSCROLL | WS_TABSTOP\r
-    PUSHBUTTON      "DOC",IDC_BUTTON_DOC,65,175,40,12,BS_CENTER\r
-    PUSHBUTTON      "CLEAR",IDC_BUTTON_CLEAR,200,175,42,12,BS_CENTER\r
-    PUSHBUTTON      "REFINE",IDC_BUTTON_REFINE,155,175,30,12,BS_CENTER\r
-    PUSHBUTTON      "UNIQ",IDC_BUTTON_UNIQ,125,175,30,12,BS_CENTER\r
-    EDITTEXT        IDC_EDIT_NUM,5,175,45,12,ES_READONLY\r
-END\r
-\r
-IDD_DIALOG_SIMPLE_LIST_EN DIALOGEX 0, 0, 242, 187\r
-STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
-EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_ACCEPTFILES\r
-CAPTION "List Window (TiMidity Win32GUI)"\r
-FONT 9, "Times New Roman"\r
-BEGIN\r
-    LISTBOX         IDC_LISTBOX_PLAYLIST,0,0,241,170,LBS_HASSTRINGS | \r
-                    LBS_WANTKEYBOARDINPUT | LBS_DISABLENOSCROLL | WS_VSCROLL | \r
-                    WS_HSCROLL | WS_TABSTOP\r
-    PUSHBUTTON      "DOC",IDC_BUTTON_DOC,55,175,45,10,BS_CENTER\r
-    PUSHBUTTON      "CLEAR",IDC_BUTTON_CLEAR,190,175,46,10,BS_CENTER\r
-    PUSHBUTTON      "REFINE",IDC_BUTTON_REFINE,145,175,29,10,BS_CENTER\r
-    PUSHBUTTON      "UNIQ",IDC_BUTTON_UNIQ,115,175,31,10,BS_CENTER\r
-    EDITTEXT        IDC_EDIT_NUM,5,175,45,12,ES_READONLY\r
-END\r
-\r
-IDD_PREF_PLAYER DIALOG DISCARDABLE  0, 0, 212, 92\r
+IDD_PREF_PLAYER_EN DIALOG DISCARDABLE  0, 0, 212, 92\r
 STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
     WS_POPUP | WS_VISIBLE | WS_CAPTION\r
 FONT 9, "Times New Roman"\r
@@ -263,7 +89,7 @@ BEGIN
                     BS_AUTOCHECKBOX | WS_TABSTOP,8,72,52,8\r
 END\r
 \r
-IDD_PREF_TIMIDITY1 DIALOG DISCARDABLE  0, 0, 212, 92\r
+IDD_PREF_TIMIDITY1_EN DIALOG DISCARDABLE  0, 0, 212, 92\r
 STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
     WS_POPUP | WS_VISIBLE | WS_CAPTION\r
 FONT 9, "Times New Roman"\r
@@ -314,7 +140,7 @@ BEGIN
     EDITTEXT        IDC_EDIT_MODIFY_RELEASE,180,76,28,10\r
 END\r
 \r
-IDD_PREF_TIMIDITY2 DIALOG DISCARDABLE  0, 0, 212, 92\r
+IDD_PREF_TIMIDITY2_EN DIALOG DISCARDABLE  0, 0, 212, 92\r
 STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
     WS_POPUP | WS_VISIBLE | WS_CAPTION\r
 FONT 9, "Times New Roman"\r
@@ -357,7 +183,7 @@ BEGIN
     EDITTEXT        IDC_EDIT_CONTROL_RATIO,160,52,24,10\r
 END\r
 \r
-IDD_PREF_TIMIDITY3 DIALOG DISCARDABLE  0, 0, 212, 92\r
+IDD_PREF_TIMIDITY3_EN DIALOG DISCARDABLE  0, 0, 212, 92\r
 STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
     WS_POPUP | WS_VISIBLE | WS_CAPTION\r
 FONT 9, "Times New Roman"\r
@@ -419,10 +245,10 @@ BEGIN
     PUSHBUTTON      "DEL",IDC_BUTTON_OUTPUT_FILE_DEL,188,72,16,12,BS_CENTER\r
 END\r
 \r
-IDD_PREF_TIMIDITY4 DIALOGEX 0, 0, 212, 92\r
+IDD_PREF_TIMIDITY4_EN DIALOGEX 0, 0, 212, 92\r
 STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
     WS_POPUP | WS_VISIBLE | WS_CAPTION\r
-FONT 9, "Times New Roman", 0, 0\r
+FONT 9, "Times New Roman", 0, 0, 0x1\r
 BEGIN\r
     CONTROL         "Ch01",IDC_CHECKBOX_CH01,"Button",BS_AUTOCHECKBOX | \r
                     WS_TABSTOP,8,12,28,8\r
@@ -497,10 +323,503 @@ BEGIN
                     BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,136,60,64,16\r
 END\r
 \r
+IDD_DIALOG_MAIN_EN DIALOGEX 0, 0, 308, 64\r
+STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | \r
+    WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU\r
+EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | \r
+    WS_EX_APPWINDOW\r
+CAPTION "TiMidity++ Win32GUI"\r
+MENU IDM_MENU_MAIN_EN\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    CONTROL         "ToolBarMain",IDC_TOOLBARWINDOW_MAIN,"ToolbarWindow32",\r
+                    WS_TABSTOP | 0x14c,2,46,112,17\r
+    CONTROL         "ToolBarSubWnd",IDC_TOOLBARWINDOW_SUBWND,"ToolbarWindow32",\r
+                    WS_TABSTOP | 0x44,112,46,80,16\r
+    SCROLLBAR       IDC_SCROLLBAR_PROGRESS,190,48,100,12,WS_DISABLED\r
+    SCROLLBAR       IDC_SCROLLBAR_VOLUME,292,0,12,60,SBS_VERT\r
+    CONTROL         "",IDC_RECT_PANEL,"Static",SS_GRAYFRAME | SS_SUNKEN,0,0,\r
+                    220,44\r
+    CONTROL         "",IDC_RECT_CANVAS,"Static",SS_GRAYFRAME,220,0,68,44\r
+END\r
+\r
+#endif    // Æ­°Ä×Ù resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// \93ú\96{\8cê resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT\r
+#pragma code_page(932)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_DIALOG_DEBUG DIALOG DISCARDABLE  0, 0, 240, 240\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Debug Window (TiMidity Win32GUI)"\r
+FONT 9, "Times New Roman"\r
+BEGIN\r
+    PUSHBUTTON      "C L E A R",IDCLEAR,72,164,68,16,BS_CENTER\r
+    CONTROL         "VALID",IDC_CHECKBOX_DEBUG_WND_VALID,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,20,164,36,16\r
+    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,16,164,44,16\r
+    PUSHBUTTON      "E X I T",IDC_BUTTON_EXIT,144,164,48,16,BS_CENTER | \r
+                    WS_DISABLED\r
+    PUSHBUTTON      "ExitProcess",IDC_BUTTON_EXITPROCESS,196,164,40,16,\r
+                    BS_CENTER\r
+    CONTROL         "",-1,"Static",SS_ETCHEDHORZ,0,184,240,1\r
+    PUSHBUTTON      "Heaps Check",IDC_BUTTON_HEAP_CHECK,4,188,50,16,\r
+                    BS_CENTER\r
+    PUSHBUTTON      "Variables Check",IDC_BUTTON_VARIABLES_CHECK,60,188,50,\r
+                    16,BS_CENTER\r
+    EDITTEXT        IDC_EDIT,0,0,240,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
+                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
+                    WS_VSCROLL | WS_HSCROLL\r
+END\r
+\r
+IDD_DIALOG_CONSOLE DIALOGEX 0, 0, 243, 184\r
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\83R\83\93\83\\81[\83\8b (TiMidity++ Win32GUI)"\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N", 0, 0, 0x1\r
+BEGIN\r
+    PUSHBUTTON      "\83N\83\8a\83A",IDCLEAR,140,167,96,16,BS_CENTER\r
+    EDITTEXT        IDC_EDIT_VERBOSITY,44,167,16,16,ES_OEMCONVERT\r
+    CONTROL         "\97L\8cø",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | \r
+                    BS_LEFTTEXT | WS_TABSTOP,97,167,27,16\r
+    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,4,167,80,16\r
+    EDITTEXT        IDC_EDIT,0,0,242,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
+                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
+                    WS_VSCROLL | WS_HSCROLL,WS_EX_STATICEDGE\r
+    PUSHBUTTON      "\83\8c\83x\83\8b",IDC_BUTTON_VERBOSITY,4,167,40,16,BS_CENTER,\r
+                    WS_EX_CLIENTEDGE\r
+    PUSHBUTTON      "<<",IDC_BUTTON_DEC,60,167,12,16,BS_CENTER\r
+    PUSHBUTTON      ">>",IDC_BUTTON_INC,72,167,12,16,BS_CENTER\r
+    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,93,167,38,16\r
+END\r
+\r
+IDD_DIALOG_CONSOLE_EN DIALOGEX 0, 0, 247, 181\r
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Console Window (TiMidity Win32GUI)"\r
+FONT 8, "Times New Roman", 0, 0, 0x1\r
+BEGIN\r
+    PUSHBUTTON      "C L E A R",IDCLEAR,150,165,90,15,BS_CENTER\r
+    EDITTEXT        IDC_EDIT_VERBOSITY,50,165,21,15,ES_OEMCONVERT\r
+    CONTROL         "VALID",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | \r
+                    BS_LEFTTEXT | WS_TABSTOP,110,165,32,15\r
+    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,5,165,96,16\r
+    EDITTEXT        IDC_EDIT,0,0,245,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
+                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
+                    WS_VSCROLL | WS_HSCROLL,WS_EX_STATICEDGE\r
+    PUSHBUTTON      "VERBOSITY",IDC_BUTTON_VERBOSITY,4,165,46,15,BS_CENTER,\r
+                    WS_EX_CLIENTEDGE\r
+    PUSHBUTTON      "<<",IDC_BUTTON_DEC,70,165,15,16,BS_CENTER\r
+    PUSHBUTTON      ">>",IDC_BUTTON_INC,85,165,15,16,BS_CENTER\r
+    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,105,165,40,16\r
+END\r
+\r
+IDD_DIALOG_DOC DIALOG DISCARDABLE  0, 0, 302, 257\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+CAPTION "\83h\83L\83\85\83\81\83\93\83g (TiMidity++ Win32GUI)"\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    EDITTEXT        IDC_EDIT_FILENAME,100,240,150,16,ES_CENTER | ES_READONLY\r
+    PUSHBUTTON      "<<",IDC_BUTTON_PREV,255,240,20,16,BS_CENTER\r
+    PUSHBUTTON      ">>",IDC_BUTTON_NEXT,275,240,20,16,BS_CENTER\r
+    EDITTEXT        IDC_EDIT,0,0,295,220,ES_MULTILINE | ES_AUTOVSCROLL | \r
+                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
+                    WS_VSCROLL | WS_HSCROLL\r
+    EDITTEXT        IDC_EDIT_INFO,0,240,95,16,ES_READONLY\r
+END\r
+\r
+IDD_DIALOG_DOC_EN DIALOG DISCARDABLE  0, 0, 241, 180\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+CAPTION "Document Window (TiMidity Win32GUI)"\r
+FONT 9, "Times New Roman"\r
+BEGIN\r
+    EDITTEXT        IDC_EDIT_FILENAME,60,168,140,12,ES_CENTER | ES_READONLY\r
+    PUSHBUTTON      "<<",IDC_BUTTON_PREV,204,168,16,12,BS_CENTER\r
+    PUSHBUTTON      ">>",IDC_BUTTON_NEXT,220,168,16,12,BS_CENTER\r
+    EDITTEXT        IDC_EDIT,0,0,236,160,ES_MULTILINE | ES_AUTOVSCROLL | \r
+                    ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | \r
+                    WS_VSCROLL | WS_HSCROLL\r
+    EDITTEXT        IDC_EDIT_INFO,0,168,56,12,ES_READONLY\r
+END\r
+\r
+IDD_DIALOG_WRD DIALOGEX 0, 0, 320, 220\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Wrd Tracer Window (TiMidity Win32GUI)"\r
+FONT 9, "Times New Roman", 400, 0, 0x1\r
+BEGIN\r
+    PUSHBUTTON      "FLUSH",IDFLUSH,256,200,60,16,BS_CENTER\r
+    CONTROL         "VALID",IDC_CHECKBOX_DEBUG_WND_VALID,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,16,200,36,16\r
+    CONTROL         "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,12,200,44,16\r
+END\r
+\r
+IDD_DIALOG_SOUNDSPEC DIALOG DISCARDABLE  0, 0, 240, 180\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Sound Spec Window (TiMidity Win32GUI)"\r
+FONT 9, "Times New Roman"\r
+BEGIN\r
+    PUSHBUTTON      "C L E A R",IDCLEAR,136,164,96,16,BS_CENTER\r
+    CONTROL         "VALID",IDC_CHECKBOX_DEBUG_WND_VALID,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,20,164,36,16\r
+    CONTROL         "",-1,"Static",SS_ETCHEDFRAME,16,164,44,16\r
+END\r
+\r
+IDD_DIALOG_TRACER DIALOGEX 0, 0, 320, 220\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Tracer Window (TiMidity Win32GUI)"\r
+FONT 9, "Times New Roman", 400, 0, 0x1\r
+BEGIN\r
+    PUSHBUTTON      "FLUSH",IDFLUSH,256,200,60,16,BS_CENTER\r
+    CONTROL         "VALID",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | \r
+                    BS_LEFTTEXT | WS_TABSTOP,16,200,36,16\r
+    CONTROL         "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,12,200,44,16\r
+END\r
+\r
+IDD_DIALOG_SIMPLE_LIST DIALOGEX 0, 0, 242, 187\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_ACCEPTFILES\r
+CAPTION "\83v\83\8c\83C\83\8a\83X\83g (TiMidity++ Win32GUI)"\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N", 0, 0, 0x1\r
+BEGIN\r
+    LISTBOX         IDC_LISTBOX_PLAYLIST,0,0,241,172,LBS_HASSTRINGS | \r
+                    LBS_WANTKEYBOARDINPUT | LBS_DISABLENOSCROLL | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "\83h\83L\83\85\83\81\83\93\83g",IDC_BUTTON_DOC,54,175,43,12,BS_CENTER\r
+    PUSHBUTTON      "\83N\83\8a\83A",IDC_BUTTON_CLEAR,200,175,42,12,BS_CENTER\r
+    PUSHBUTTON      "\89\89\91t\82Ì\82Ý",IDC_BUTTON_REFINE,154,175,37,12,BS_CENTER\r
+    PUSHBUTTON      "\8fd\95¡\8dí\8f\9c",IDC_BUTTON_UNIQ,105,175,38,12,BS_CENTER\r
+    EDITTEXT        IDC_EDIT_NUM,5,175,45,12,ES_READONLY\r
+END\r
+\r
+IDD_DIALOG_SIMPLE_LIST_EN DIALOGEX 0, 0, 242, 187\r
+STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME\r
+EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_ACCEPTFILES\r
+CAPTION "List Window (TiMidity Win32GUI)"\r
+FONT 9, "Times New Roman", 0, 0, 0x1\r
+BEGIN\r
+    LISTBOX         IDC_LISTBOX_PLAYLIST,0,0,241,170,LBS_HASSTRINGS | \r
+                    LBS_WANTKEYBOARDINPUT | LBS_DISABLENOSCROLL | WS_VSCROLL | \r
+                    WS_HSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "DOC",IDC_BUTTON_DOC,55,175,45,10,BS_CENTER\r
+    PUSHBUTTON      "CLEAR",IDC_BUTTON_CLEAR,190,175,46,10,BS_CENTER\r
+    PUSHBUTTON      "REFINE",IDC_BUTTON_REFINE,145,175,29,10,BS_CENTER\r
+    PUSHBUTTON      "UNIQ",IDC_BUTTON_UNIQ,115,175,31,10,BS_CENTER\r
+    EDITTEXT        IDC_EDIT_NUM,5,175,45,12,ES_READONLY\r
+END\r
+\r
+IDD_PREF_PLAYER DIALOG DISCARDABLE  0, 0, 199, 155\r
+STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_POPUP | WS_VISIBLE | \r
+    WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    PUSHBUTTON      "\90Ý\92è\83t\83@\83C\83\8b",IDC_BUTTON_CONFIG_FILE,3,11,52,14,\r
+                    BS_CENTER\r
+    EDITTEXT        IDC_EDIT_CONFIG_FILE,62,10,137,16,ES_AUTOHSCROLL | \r
+                    ES_OEMCONVERT\r
+    GROUPBOX        "\83v\83\8c\83C\83\84\81[",IDC_GROUPBOX_PLAYERMODE,2,32,106,61,\r
+                    WS_GROUP\r
+    CONTROL         "\91S\8bÈ\89\89\91t\8cã\8fI\97¹",IDC_CHECKBOX_AUTOQUIT,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,44,61,8\r
+    CONTROL         "\8fd\95¡\93o\98^\82ð\96h\8e~",IDC_CHECKBOX_AUTOUNIQ,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,56,59,8\r
+    CONTROL         "\89\89\91t\83t\83@\83C\83\8b\82Ì\82Ý\93o\98^",IDC_CHECKBOX_AUTOREFINE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,68,75,8\r
+    GROUPBOX        "\8c¾\8cê",IDC_GROUPBOX_LANGUAGE,160,101,40,38,WS_GROUP\r
+    CONTROL         "\93ú\96{\8cê",IDC_RADIOBUTTON_JAPANESE,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,163,113,30,8\r
+    CONTROL         "\89p\8cê",IDC_RADIOBUTTON_ENGLISH,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,163,126,25,8\r
+    CONTROL         "\88ê\8bÈ\89\89\91t\82µ\82Ä\92â\8e~",IDC_CHECKBOX_NOT_CONTINUE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,7,44,64,8\r
+    CONTROL         "\83h\83\89\83b\83O&&\83h\83\8d\83b\83v\82Å\8dÄ\90\82µ\82È\82¢",\r
+                    IDC_CHECKBOX_NOT_DRAG_START,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,7,56,97,8\r
+    GROUPBOX        "\83t\83H\83\8b\83_",IDC_STATIC,83,101,70,23\r
+    CONTROL         "\8dÄ\8bA\93I\82É\92T\8dõ",IDC_CHECK_SEACHDIRRECURSIVE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,88,111,51,10\r
+    GROUPBOX        "\83h\83L\83\85\83\81\83\93\83g",IDC_STATIC,2,101,75,38\r
+    CONTROL         "\8e©\93®\95\\8e¦\82µ\82È\82¢",IDC_CHECK_DOCWNDINDEPENDENT,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,112,56,8\r
+    GROUPBOX        "\90Ý\92è",IDC_STATIC,83,130,70,25\r
+    CONTROL         "\90Ý\92è\82Ì\8e©\93®\95Û\91¶",IDC_CHECK_INIFILE_AUTOSAVE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,88,140,59,10\r
+    CONTROL         "\83\8a\83s\81[\83g\82µ\82È\82¢",IDC_CHECKBOX_NOT_LOOPING,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,7,68,51,8\r
+    CONTROL         "\83I\81[\83g\83X\83^\81[\83g",IDC_CHECKBOX_AUTOSTART,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,7,80,56,8\r
+    CONTROL         "\83\89\83\93\83_\83\80\8dÄ\90¶",IDC_CHECKBOX_RANDOM,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,80,50,8\r
+    CONTROL         "\83|\83b\83v\83A\83b\83v",IDC_CHECK_DOCWNDAUTOPOPUP,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,124,59,10\r
+    GROUPBOX        "\83v\83\8c\83C\83\8a\83X\83g",IDC_STATIC,112,32,85,61\r
+END\r
+\r
+IDD_PREF_TIMIDITY1 DIALOG DISCARDABLE  0, 0, 210, 191\r
+STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
+    WS_POPUP | WS_VISIBLE | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    CONTROL         "\83R\81[\83\89\83X",IDC_CHECKBOX_CHORUS,"Button",BS_AUTOCHECKBOX | \r
+                    BS_LEFT | BS_TOP | WS_TABSTOP,6,17,41,10\r
+    CONTROL         "\83R\81[\83\89\83X\83\8c\83x\83\8b\8ew\92è",IDC_CHECKBOX_CHORUS_LEVEL,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,101,17,73,10\r
+    CONTROL         "\83\8a\83o\81[\83u",IDC_CHECKBOX_REVERB,"Button",BS_AUTOCHECKBOX | \r
+                    BS_LEFT | BS_TOP | WS_TABSTOP,6,31,41,10\r
+    CONTROL         "\83O\83\8d\81[\83o\83\8b\83\8a\83o\81[\83u",IDC_CHECKBOX_GLOBAL_REVERB,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,101,46,74,10\r
+    CONTROL         "\83\8a\83o\81[\83u\83\8c\83x\83\8b\8ew\92è",IDC_CHECKBOX_REVERB_LEVEL,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,101,31,74,10\r
+    EDITTEXT        IDC_EDIT_REVERB,177,31,24,10,ES_NUMBER\r
+    CONTROL         "L&&R \83f\83B\83\8c\83C",IDC_CHECKBOX_DELAY,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFT | BS_TOP | WS_TABSTOP,101,61,\r
+                    57,10\r
+    CONTROL         "\8d¶",IDC_RADIOBUTTON_DELAY_LEFT,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,109,76,23,10\r
+    CONTROL         "\89E",IDC_RADIOBUTTON_DELAY_RIGHT,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,135,76,23,10\r
+    CONTROL         "\89ñ\93]",IDC_RADIOBUTTON_DELAY_CENTER,"Button",\r
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,161,76,30,10\r
+    LTEXT           "\92x\89\84(msec)",IDC_STATIC,113,91,35,8,NOT WS_GROUP | \r
+                    WS_TABSTOP\r
+    EDITTEXT        IDC_EDIT_DELAY,151,89,32,10,ES_NUMBER\r
+    LTEXT           "\83m\83C\83Y\83V\83F\83C\83s\83\93\83O (0..4)",IDC_STATIC,101,117,74,8,NOT \r
+                    WS_GROUP | WS_TABSTOP\r
+    EDITTEXT        IDC_EDIT_NOISESHARPING,178,115,16,10,ES_NUMBER\r
+    CONTROL         "\83\82\83W\83\85\83\8c\81[\83V\83\87\83\93",IDC_CHECKBOX_MODWHEEL,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,45,63,10\r
+    CONTROL         "\83|\83\8b\83^\83\81\83\93\83g",IDC_CHECKBOX_PORTAMENTO,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,59,50,10\r
+    CONTROL         "NRPN \83r\83u\83\89\81[\83g",IDC_CHECKBOX_NRPNVIB,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,73,65,10\r
+    CONTROL         "\83`\83\83\83\93\83l\83\8b\83v\83\8c\83b\83V\83\83\81[",IDC_CHECKBOX_CHPRESS,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,87,80,10\r
+    CONTROL         "\93¯\88ê\89¹\82Ì\8fd\95¡\82ð\8b\96\82·",IDC_CHECKBOX_OVOICE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,115,77,10\r
+    CONTROL         "\83e\83L\83X\83g\83\81\83^\83C\83x\83\93\83g",IDC_CHECKBOX_TRACETEXT,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,101,73,10\r
+    LTEXT           "\8ec\8b¿\8cø\89Ê(0..1000)",IDC_STATIC,101,105,52,8,NOT WS_GROUP | \r
+                    WS_TABSTOP\r
+    EDITTEXT        IDC_EDIT_MODIFY_RELEASE,155,103,28,10\r
+    GROUPBOX        "GM/GS/XG",IDC_STATIC,1,3,91,182\r
+    GROUPBOX        "\93Á\8eê",IDC_STATIC,97,3,113,187\r
+    CONTROL         "\83A\83^\83b\83N\81E\83^\83C\83\80",IDC_CHECKBOX_TVAA,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,129,59,10\r
+    CONTROL         "\83f\83B\83P\83C\81E\83^\83C\83\80",IDC_CHECKBOX_TVAD,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,143,61,10\r
+    CONTROL         "\83\8a\83\8a\81[\83X\81E\83^\83C\83\80",IDC_CHECKBOX_TVAR,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,157,61,10\r
+    EDITTEXT        IDC_EDIT_CHORUS,177,16,24,10,ES_NUMBER\r
+    CONTROL         "\83f\83B\83\8c\83C",IDC_CHECKBOX_PDELAY,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,6,171,39,10\r
+    CONTROL         "\83T\83\89\83E\83\93\83h\83R\81[\83\89\83X",IDC_CHECKBOX_SRCHORUS,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,101,130,70,10\r
+    CONTROL         "\8bU\83\8c\83]\83i\83\93\83X",IDC_CHECKBOX_RESONANCE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,101,146,53,10\r
+    EDITTEXT        IDC_EDIT_ENV_ATTACK,161,160,28,10\r
+    EDITTEXT        IDC_EDIT_VELOCITYTABLE,178,174,28,10\r
+    LTEXT           "\83A\83^\83b\83N\83^\83C\83v (0..3)",IDC_STATIC,101,162,56,8,NOT \r
+                    WS_GROUP | WS_TABSTOP\r
+    LTEXT           "\83x\83\8d\83V\83e\83B\83e\81[\83u\83\8b (0..2)",IDC_STATIC,101,175,72,8,NOT \r
+                    WS_GROUP | WS_TABSTOP\r
+END\r
+\r
+IDD_PREF_TIMIDITY2 DIALOG DISCARDABLE  0, 0, 213, 141\r
+STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
+    WS_POPUP | WS_VISIBLE | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    LTEXT           "\8dÅ\91å\93¯\8e\9e\94­\89¹\90\94(\83{\83C\83X)",IDC_STATIC,6,19,71,8,NOT \r
+                    WS_GROUP\r
+    EDITTEXT        IDC_EDIT_VOICES,78,19,24,12,ES_NUMBER\r
+    LTEXT           "\83{\83\8a\83\85\81[\83\80(%)",IDC_STATIC,6,33,40,8,NOT WS_GROUP\r
+    EDITTEXT        IDC_EDIT_AMPLIFICATION,47,31,24,12\r
+    CONTROL         "\88ê\8bÈ\96\88\82É\83p\83b\83`\82ð\83A\83\93\83\8d\81[\83h",IDC_CHECKBOX_FREE_INST,\r
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_TOP | WS_TABSTOP,\r
+                    6,75,92,10\r
+    CONTROL         "\83A\83\93\83`\83G\83C\83\8a\83A\83X",IDC_CHECKBOX_ANTIALIAS,"Button",\r
+                    BS_AUTOCHECKBOX | BS_LEFT | BS_TOP | WS_TABSTOP,6,49,62,\r
+                    10\r
+    CONTROL         "\89\89\91t\92\86\82É\83p\83b\83`\82ð\83\8d\81[\83h",IDC_CHECKBOX_LOADINST_PLAYING,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,63,83,10\r
+    LTEXT           "\83L\83\83\83b\83V\83\85\97e\97Ê",IDC_STATIC,117,19,44,8,NOT WS_GROUP\r
+    EDITTEXT        IDC_EDIT_CACHE_SIZE,162,17,39,12\r
+    CONTROL         "\94­\89¹\90\94\82ð\8e©\93®\92²\90®",IDC_CHECKBOX_REDUCE_VOICE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,89,67,8\r
+    LTEXT           "\95W\8f\80\82Ì\83o\83\93\83N",IDC_STATIC,117,37,41,8,NOT WS_GROUP\r
+    EDITTEXT        IDC_EDIT_DEFAULT_TONEBANK,158,35,24,12\r
+    CONTROL         "\83o\83\93\83N\8b­\90§",IDC_CHECKBOX_SPECIAL_TONEBANK,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,54,43,8\r
+    EDITTEXT        IDC_EDIT_SPECIAL_TONEBANK,161,52,24,12\r
+    CONTROL         "GM",IDC_RADIOBUTTON_GM,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,14,117,22,8\r
+    CONTROL         "GS",IDC_RADIOBUTTON_GS,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,39,117,20,8\r
+    CONTROL         "XG",IDC_RADIOBUTTON_XG,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,63,117,20,8\r
+    CONTROL         "\83g\83\8c\81[\83X\83\82\81[\83h",IDC_CHECKBOX_CTL_TRACE_PLAYING,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,88,54,8\r
+    LTEXT           "\83R\83\93\83\\81[\83\8b\83\8c\83x\83\8b",IDC_STATIC,117,105,51,8,NOT WS_GROUP\r
+    EDITTEXT        IDC_EDIT_CTL_VEBOSITY,170,103,20,12\r
+    LTEXT           "\90§\8cä\83\8c\81[\83g",IDC_STATIC,117,72,32,8,NOT WS_GROUP\r
+    EDITTEXT        IDC_EDIT_CONTROL_RATIO,149,70,24,12\r
+    GROUPBOX        "\95W\8f\80\82Å\97\98\97p\82·\82é\8bK\8ai",IDC_GROUPBOX_DEFAULT_MIDI_TYPE,6,\r
+                    105,87,27\r
+    GROUPBOX        "\8d\82\93x\82È\90Ý\92è",IDC_STATIC,111,3,100,119\r
+    GROUPBOX        "\8dÄ\90¶",IDC_STATIC,1,3,107,133\r
+END\r
+\r
+IDD_PREF_TIMIDITY3 DIALOG DISCARDABLE  0, 0, 205, 181\r
+STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
+    WS_POPUP | WS_VISIBLE | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    GROUPBOX        "\8fo\97Í",IDC_STATIC,1,0,203,180,WS_GROUP | WS_TABSTOP\r
+    GROUPBOX        "\8fo\97Í\83\82\81[\83h",IDC_STATIC,4,14,171,33,WS_GROUP | \r
+                    WS_TABSTOP\r
+    CONTROL         "8\83r\83b\83g",IDC_CHECKBOX_8BITS,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,8,23,29,8\r
+    CONTROL         "16\83r\83b\83g",IDC_CHECKBOX_16BITS,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,8,35,32,8\r
+    CONTROL         "U-Law",IDC_CHECKBOX_ULAW,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,23,31,8\r
+    CONTROL         "A-Law",IDC_CHECKBOX_ALAW,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,35,31,8\r
+    CONTROL         "\95\84\8d\86\95t\82«",IDC_CHECKBOX_SIGNED,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,77,23,37,8\r
+    CONTROL         "\95\84\8d\86\96³\82µ",IDC_CHECKBOX_UNSIGNED,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,77,35,37,8\r
+    CONTROL         "\83o\83C\83g\94½\93]",IDC_CHECKBOX_BYTESWAP,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,119,23,43,8\r
+    CONTROL         "Linear PCM",IDC_CHECKBOX_LINEAR,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,119,35,45,8\r
+    GROUPBOX        "\83`\83\83\83\93\83l\83\8b",IDC_STATIC,4,55,45,33,WS_GROUP | WS_TABSTOP\r
+    CONTROL         "\83X\83e\83\8c\83I",IDC_RADIO_STEREO,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,8,65,36,10\r
+    CONTROL         "\83\82\83m\83\89\83\8b",IDC_RADIO_MONO,"Button",BS_AUTORADIOBUTTON | \r
+                    WS_TABSTOP,8,77,35,8\r
+    LTEXT           "\83T\83\93\83v\83\8b\83\8c\81[\83g(Hz)",IDC_STATIC,65,60,56,8,WS_TABSTOP\r
+    EDITTEXT        IDC_EDIT_SAMPLE_RATE,122,58,32,10,ES_NUMBER | WS_GROUP\r
+    PUSHBUTTON      "L",IDC_BUTTON_LOW,65,73,8,14,BS_CENTER\r
+    PUSHBUTTON      "M",IDC_BUTTON_MIDDLE,73,73,10,14,BS_CENTER\r
+    PUSHBUTTON      "H",IDC_BUTTON_HIGH,84,73,10,14,BS_CENTER\r
+    PUSHBUTTON      "4",IDC_BUTTON_4,95,73,8,14,BS_CENTER\r
+    PUSHBUTTON      "8",IDC_BUTTON_8,103,73,8,14,BS_CENTER\r
+    PUSHBUTTON      "16",IDC_BUTTON_16,111,73,12,14,BS_CENTER\r
+    PUSHBUTTON      "24",IDC_BUTTON_24,123,73,12,14,BS_CENTER\r
+    PUSHBUTTON      "32",IDC_BUTTON_32,135,73,12,14,BS_CENTER\r
+    PUSHBUTTON      "40",IDC_BUTTON_40,147,73,12,14,BS_CENTER\r
+    PUSHBUTTON      "48",IDC_BUTTON_48,159,73,12,14,BS_CENTER\r
+    GROUPBOX        "\8fo\97Í\95û\96@",IDC_GROUPBOX_OUTPUT,4,102,193,49,WS_GROUP | \r
+                    WS_TABSTOP\r
+    PUSHBUTTON      "\8fo\97Í\83t\83@\83C\83\8b",IDC_BUTTON_OUTPUT_FILE,4,156,42,14,\r
+                    BS_CENTER | WS_GROUP\r
+    EDITTEXT        IDC_EDIT_OUTPUT_FILE,47,156,130,15,ES_AUTOHSCROLL | \r
+                    ES_OEMCONVERT | WS_GROUP\r
+    PUSHBUTTON      "\8dí\8f\9c",IDC_BUTTON_OUTPUT_FILE_DEL,178,156,19,14,\r
+                    BS_CENTER\r
+    COMBOBOX        IDC_COMBO_OUTPUT,8,116,151,64,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "\83I\83v\83V\83\87\83\93",IDC_BUTTON_OUTPUT_OPTIONS,160,115,34,14\r
+    COMBOBOX        IDC_COMBO_OUTPUT_MODE,8,134,186,72,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+END\r
+\r
+IDD_PREF_TIMIDITY4 DIALOG DISCARDABLE  0, 0, 181, 143\r
+STYLE DS_SYSMODAL | DS_3DLOOK | DS_CONTROL | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | \r
+    WS_POPUP | WS_VISIBLE | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    CONTROL         "Ch01",IDC_CHECKBOX_CH01,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,16,28,8\r
+    CONTROL         "Ch02",IDC_CHECKBOX_CH02,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,24,28,8\r
+    CONTROL         "Ch03",IDC_CHECKBOX_CH03,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,32,28,8\r
+    CONTROL         "Ch04",IDC_CHECKBOX_CH04,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,40,28,8\r
+    CONTROL         "Ch05",IDC_CHECKBOX_CH05,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,48,28,8\r
+    CONTROL         "Ch06",IDC_CHECKBOX_CH06,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,56,28,8\r
+    CONTROL         "Ch07",IDC_CHECKBOX_CH07,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,64,28,8\r
+    CONTROL         "Ch08",IDC_CHECKBOX_CH08,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,10,72,28,8\r
+    CONTROL         "Ch09",IDC_CHECKBOX_CH09,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,16,28,8\r
+    CONTROL         "Ch10",IDC_CHECKBOX_CH10,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,24,28,8\r
+    CONTROL         "Ch11",IDC_CHECKBOX_CH11,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,32,28,8\r
+    CONTROL         "Ch12",IDC_CHECKBOX_CH12,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,40,28,8\r
+    CONTROL         "Ch13",IDC_CHECKBOX_CH13,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,48,28,8\r
+    CONTROL         "Ch14",IDC_CHECKBOX_CH14,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,56,28,8\r
+    CONTROL         "Ch15",IDC_CHECKBOX_CH15,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,64,28,8\r
+    CONTROL         "Ch16",IDC_CHECKBOX_CH16,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,41,72,28,8\r
+    CONTROL         "Ch17",IDC_CHECKBOX_CH17,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,16,28,8\r
+    CONTROL         "Ch18",IDC_CHECKBOX_CH18,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,24,28,8\r
+    CONTROL         "Ch19",IDC_CHECKBOX_CH19,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,32,28,8\r
+    CONTROL         "Ch20",IDC_CHECKBOX_CH20,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,40,28,8\r
+    CONTROL         "Ch21",IDC_CHECKBOX_CH21,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,48,28,8\r
+    CONTROL         "Ch22",IDC_CHECKBOX_CH22,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,56,28,8\r
+    CONTROL         "Ch23",IDC_CHECKBOX_CH23,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,64,28,8\r
+    CONTROL         "Ch24",IDC_CHECKBOX_CH24,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,73,72,28,8\r
+    CONTROL         "Ch25",IDC_CHECKBOX_CH25,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,16,28,8\r
+    CONTROL         "Ch26",IDC_CHECKBOX_CH26,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,24,28,8\r
+    CONTROL         "Ch27",IDC_CHECKBOX_CH27,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,32,28,8\r
+    CONTROL         "Ch28",IDC_CHECKBOX_CH28,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,40,28,8\r
+    CONTROL         "Ch29",IDC_CHECKBOX_CH29,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,48,28,8\r
+    CONTROL         "Ch30",IDC_CHECKBOX_CH30,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,56,28,8\r
+    CONTROL         "Ch31",IDC_CHECKBOX_CH31,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,64,28,8\r
+    CONTROL         "Ch32",IDC_CHECKBOX_CH32,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,106,72,28,8\r
+    CONTROL         "\83f\83t\83H\83\8b\83g\82Ì\83h\83\89\83\80\83`\83\83\83\93\83l\83\8b",IDC_CHECKBOX_DRUM_CHANNEL,\r
+                    "Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,9,87,\r
+                    95,13\r
+    CONTROL         "\83h\83\89\83\80\83p\81[\83g\8e©\93®\94F\8e¯\82ð\96³\8e\8b\82·\82é\83`\83\83\83\93\83l\83\8b",\r
+                    IDC_CHECKBOX_DRUM_CHANNEL_MASK,"Button",BS_AUTOCHECKBOX | \r
+                    BS_PUSHLIKE | WS_TABSTOP,9,105,137,14\r
+    CONTROL         "\83~\83\85\81[\83g\82·\82é\83`\83\83\83\93\83l\83\8b",IDC_CHECKBOX_QUIET_CHANNEL,\r
+                    "Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,9,\r
+                    124,76,13\r
+    PUSHBUTTON      "\91S\82Ä\94½\93]",IDC_BUTTON_REVERSE,141,18,31,61\r
+    GROUPBOX        "\83`\83\83\83\93\83l\83\8b",IDC_STATIC,1,3,179,138\r
+END\r
+\r
 IDD_DIALOG_WAVEFORM DIALOGEX 0, 0, 240, 120\r
 STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION\r
 EXSTYLE WS_EX_DLGMODALFRAME\r
-FONT 9, "Times New Roman", 400, 0\r
+FONT 9, "Times New Roman", 400, 0, 0x1\r
 BEGIN\r
 END\r
 \r
@@ -514,6 +833,109 @@ BEGIN
     EDITTEXT        IDC_EDIT1,7,7,169,24,ES_AUTOHSCROLL | ES_OEMCONVERT\r
 END\r
 \r
+IDD_DIALOG_VORBIS DIALOG DISCARDABLE  0, 0, 197, 93\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Ogg Vorbis \90Ý\92è\83_\83C\83A\83\8d\83O"\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    CONTROL         "\83f\83t\83H\83\8b\83g\90Ý\92è",IDC_CHECK_DEFAULT,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,0,56,10\r
+    COMBOBOX        IDC_COMBO_MODE,25,13,123,56,CBS_DROPDOWNLIST | CBS_SORT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "\83^\83C\83g\83\8b",IDC_STATIC,4,49,23,8\r
+    EDITTEXT        IDC_EDIT1,41,48,152,14,ES_AUTOHSCROLL | WS_DISABLED\r
+    LTEXT           "\83A\81[\83e\83B\83X\83g",IDC_STATIC,4,63,36,8\r
+    EDITTEXT        IDC_EDIT2,41,76,152,14,ES_AUTOHSCROLL | WS_DISABLED\r
+    LTEXT           "\83A\83\8b\83o\83\80",IDC_STATIC,4,77,27,8\r
+    EDITTEXT        IDC_EDIT3,41,62,152,14,ES_AUTOHSCROLL | WS_DISABLED\r
+    CONTROL         "\8e\9f\82Ì\8fî\95ñ\82ð\8f\91\82«\8d\9e\82Þ",IDC_CHECK_USE_TAG,"Button",\r
+                    BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,4,32,73,10\r
+    LTEXT           "\83\82\81[\83h",IDC_STATIC,4,16,18,8\r
+    PUSHBUTTON      "OK",IDOK,152,2,40,12\r
+    PUSHBUTTON      "\83L\83\83\83\93\83Z\83\8b",IDCANCEL,152,30,40,12\r
+    PUSHBUTTON      "\93K\97p",IDC_BUTTON_APPLY,152,14,40,11\r
+END\r
+\r
+IDD_DIALOG_GOGO DIALOG DISCARDABLE  0, 0, 346, 196\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "MP3(\8cß\8cã\82Ì\82±\81`\82¾) \90Ý\92è\83_\83C\83A\83\8d\83O"\r
+FONT 8, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,173,179,50,14\r
+    PUSHBUTTON      "\83L\83\83\83\93\83Z\83\8b",IDCANCEL,285,179,50,14\r
+    COMBOBOX        IDC_COMBO_OUTPUT_FORMAT,4,36,72,64,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "\83f\83t\83H\83\8b\83g\90Ý\92è",IDC_CHECK_DEFAULT,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,0,80,10\r
+    CONTROL         "\83R\83}\83\93\83h\83\89\83C\83\93\83I\83v\83V\83\87\83\93",IDC_CHECK_COMMANDLINE_OPTS,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,12,86,10\r
+    EDITTEXT        IDC_EDIT_COMMANDLINE_OPTION,91,10,232,14,ES_AUTOHSCROLL\r
+    COMBOBOX        IDC_COMBO_MPEG1_AUDIO_BITRATE,6,72,76,76,\r
+                    CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_COMBO_MPEG2_AUDIO_BITRATE,87,72,76,76,\r
+                    CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_COMBO_VBR_BITRATE_LOW,6,119,76,64,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    LTEXT           "VBR - \8dÅ\8d\82",IDC_STATIC,86,110,55,8\r
+    COMBOBOX        IDC_COMBO_VBR_BITRATE_HIGH,86,119,76,64,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "16KHz \83\8d\81[\83p\83X\83t\83B\83\8b\83^",IDC_CHECK_16KHZ_LOW_PASS_FILTER,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,176,57,89,8\r
+    CONTROL         "\83G\83\93\83n\83\93\83X\83g\83\8d\81[\83p\83X\83t\83B\83\8b\83^",\r
+                    IDC_CHECK_ENHANCED_LOW_PASS_FILTER,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,176,68,104,8\r
+    EDITTEXT        IDC_EDIT_LPF_PARA1,200,77,28,12\r
+    EDITTEXT        IDC_EDIT_LPF_PARA2,251,77,28,12\r
+    LTEXT           "para1",IDC_STATIC,183,79,16,8\r
+    LTEXT           "para2",IDC_STATIC,233,79,16,8\r
+    COMBOBOX        IDC_COMBO_ENCODE_MODE,172,36,84,60,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "\90S\97\9d\89ð\90Í",IDC_CHECK_USEPSY,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,176,90,42,10\r
+    CONTROL         "MMX",IDC_CHECK_CPUMMX,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,193,151,29,10\r
+    CONTROL         "SSE",IDC_CHECK_CPUSSE,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,193,163,27,10\r
+    CONTROL         "3DNOW",IDC_CHECK_CPU3DNOW,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,227,151,39,10\r
+    CONTROL         "E3DNOW",IDC_CHECK_CPUE3DNOW,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,227,163,40,10\r
+    COMBOBOX        IDC_COMBO_EMPHASIS_TYPE,268,36,76,64,CBS_DROPDOWNLIST | \r
+                    CBS_SORT | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_COMBO_VBR,37,92,124,72,CBS_DROPDOWNLIST | CBS_SORT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "VBR",IDC_CHECK_VBR,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,6,94,29,10\r
+    CONTROL         "\8eü\94g\90\94",IDC_CHECK_OUTFREQ,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,88,28,35,8\r
+    EDITTEXT        IDC_EDIT_OUTFREQ,88,36,72,12\r
+    CONTROL         "J-Stereo\82Å\82Ì Stereo/MS-Stereo \82Ì\90Ø\91Ö\82¦\90§\8cä",\r
+                    IDC_CHECK_MSTHRESHOLD,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,176,103,167,8\r
+    EDITTEXT        IDC_EDIT_MSTHRESHOLD_THRESHOLD,200,112,28,12\r
+    EDITTEXT        IDC_EDIT_MSTHRESHOLD_MSPOWER,252,112,28,12\r
+    LTEXT           "para1",IDC_STATIC,183,114,16,8\r
+    LTEXT           "para2",IDC_STATIC,233,114,16,8\r
+    CONTROL         "\83x\83\8a\83t\83@\83C",IDC_CHECK_VERIFY,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,176,127,45,10\r
+    PUSHBUTTON      "\93K\97p",IDC_BUTTON_APPLY,229,179,50,14\r
+    CONTROL         "\88È\89º\82Ì\96½\97ß\82ð\8eg\82¤",IDC_CHECK_USE_CPU_OPTS,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,176,140,68,8\r
+    CONTROL         "MPEG1Audio",IDC_CHECK_MPEG1AUDIOBITRATE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,64,80,8\r
+    CONTROL         "MPEG2Audio",IDC_CHECK_MPEG2AUDIOBITRATE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,87,64,80,8\r
+    CONTROL         "VBR - \8dÅ\92á",IDC_CHECK_VBR_BITRATE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,6,110,67,8\r
+    CONTROL         "\8fo\97Í\83t\83H\81[\83}\83b\83g",IDC_CHECK_OUTPUT_FORMAT,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,4,28,64,8\r
+    CONTROL         "\83\82\81[\83h",IDC_CHECK_ENCODE_MODE,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,172,28,34,8\r
+    CONTROL         "\83G\83\93\83t\83@\83V\83X",IDC_CHECK_EMPHASIS_TYPE,"Button",\r
+                    BS_AUTOCHECKBOX | WS_TABSTOP,268,28,62,8\r
+    GROUPBOX        "\83r\83b\83g\83\8c\81[\83g",IDC_STATIC,2,55,167,86\r
+END\r
+\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
@@ -529,7 +951,7 @@ IDI_ICON_TIMIDITY       ICON    DISCARDABLE     "w32g_icon.ico"
 // Menu\r
 //\r
 \r
-IDM_MENU_MAIN MENU DISCARDABLE \r
+IDM_MENU_MAIN_EN MENU DISCARDABLE \r
 BEGIN\r
     POPUP "File(&F)"\r
     BEGIN\r
@@ -569,6 +991,46 @@ BEGIN
     END\r
 END\r
 \r
+IDM_MENU_MAIN MENU DISCARDABLE \r
+BEGIN\r
+    POPUP "\83t\83@\83C\83\8b(&F)"\r
+    BEGIN\r
+        MENUITEM "\83t\83@\83C\83\8b\82ð\8aJ\82­(&F)",          IDM_MFOPENFILE\r
+        MENUITEM "\83t\83H\83\8b\83_\82ð\8aJ\82­(&D)",          IDM_MFOPENDIR\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "\83v\83\8c\83C\83\8a\83X\83g\82ð\8aJ\82­(&P)",      IDM_MFLOADPLAYLIST\r
+        MENUITEM "\83v\83\8c\83C\83\8a\83X\83g\82ð\95Û\91¶(&S)",      IDM_MFSAVEPLAYLISTAS\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "\8fI\97¹(&X)",                    IDM_MFEXIT\r
+    END\r
+    POPUP "\90Ý\92è(&C)"\r
+    BEGIN\r
+        MENUITEM "\8fÚ\8d×\90Ý\92è(&P)",                IDM_SETTING\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "\90Ý\92è\93Ç\8d\9e(&L)",                IDM_MCLOADINIFILE\r
+        MENUITEM "\90Ý\92è\95Û\91¶(&S)",                IDM_MCSAVEINIFILE\r
+    END\r
+    POPUP "\83E\83B\83\93\83h\83E(&W)"\r
+    BEGIN\r
+        MENUITEM "\83v\83\8c\83C\83\8a\83X\83g(&L)",            IDM_MWPLAYLIST\r
+        MENUITEM "\83g\83\8c\81[\83T(&T)",                IDM_MWTRACER, GRAYED\r
+        MENUITEM "\83h\83L\83\85\83\81\83\93\83g(&D)",            IDM_MWDOCUMENT\r
+        MENUITEM "WRD(&W)",                     IDM_MWWRDTRACER, GRAYED\r
+        MENUITEM "Sound Spectogram(&S)",        IDM_MWSOUNDSPEC, GRAYED\r
+        MENUITEM "\83R\83\93\83\\81[\83\8b(&C)",              IDM_MWCONSOLE\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "\83f\83o\83b\83O(&B)",                IDM_MWDEBUG\r
+    END\r
+    POPUP "\83w\83\8b\83v(&H)"\r
+    BEGIN\r
+        MENUITEM "\83g\83s\83b\83N(&T)",                IDM_MHTOPIC, GRAYED\r
+        MENUITEM "\83w\83\8b\83v(&H)",                  IDM_MHHELP, GRAYED\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "TiMidity\82É\82Â\82¢\82Ä(&T)",        IDM_MHTIMIDITY\r
+        MENUITEM "\83o\81[\83W\83\87\83\93\8fî\95ñ(&V)",          IDM_MHVERSION\r
+    END\r
+END\r
+\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
@@ -641,6 +1103,36 @@ BEGIN
         BOTTOMMARGIN, 179\r
     END\r
 \r
+    IDD_PREF_PLAYER, DIALOG\r
+    BEGIN\r
+        RIGHTMARGIN, 197\r
+        BOTTOMMARGIN, 99\r
+    END\r
+\r
+    IDD_PREF_TIMIDITY1, DIALOG\r
+    BEGIN\r
+        RIGHTMARGIN, 145\r
+        BOTTOMMARGIN, 148\r
+    END\r
+\r
+    IDD_PREF_TIMIDITY2, DIALOG\r
+    BEGIN\r
+        RIGHTMARGIN, 209\r
+        BOTTOMMARGIN, 122\r
+    END\r
+\r
+    IDD_PREF_TIMIDITY3, DIALOG\r
+    BEGIN\r
+        RIGHTMARGIN, 190\r
+        BOTTOMMARGIN, 138\r
+    END\r
+\r
+    IDD_PREF_TIMIDITY4, DIALOG\r
+    BEGIN\r
+        RIGHTMARGIN, 168\r
+        BOTTOMMARGIN, 125\r
+    END\r
+\r
     IDD_DIALOG_SEARCHBOX, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
@@ -648,10 +1140,72 @@ BEGIN
         TOPMARGIN, 7\r
         BOTTOMMARGIN, 47\r
     END\r
+\r
+    IDD_DIALOG_VORBIS, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 190\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 86\r
+    END\r
+\r
+    IDD_DIALOG_GOGO, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 339\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 189\r
+    END\r
 END\r
 #endif    // APSTUDIO_INVOKED\r
 \r
 \r
+#ifndef _MAC\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION 2,10,0,4\r
+ PRODUCTVERSION 2,10,0,4\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x40004L\r
+ FILETYPE 0x1L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "000004e4"\r
+        BEGIN\r
+            VALUE "Comments", "\0"\r
+            VALUE "CompanyName", "\0"\r
+            VALUE "FileDescription", "timw32g\0"\r
+            VALUE "FileVersion", "2, 10, 0, 4\0"\r
+            VALUE "InternalName", "timw32g\0"\r
+            VALUE "LegalCopyright", "Copyright (C) 1999,2001 Masanao Izumo <mo@goice.co.jp>\r\nCopyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>\0"\r
+            VALUE "LegalTrademarks", "\0"\r
+            VALUE "OriginalFilename", "timw32g.exe\0"\r
+            VALUE "PrivateBuild", "\0"\r
+            VALUE "ProductName", "TiMidity++ Win32GUI Version\0"\r
+            VALUE "ProductVersion", "2, 10, 0, 4\0"\r
+            VALUE "SpecialBuild", "\0"\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x0, 1252\r
+    END\r
+END\r
+\r
+#endif    // !_MAC\r
+\r
+\r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
 // String Table\r
index d556517..8ae3fd9 100644 (file)
-/*\r
-    TiMidity++ -- MIDI to WAVE converter and player\r
-    Copyright (C) 1999-2001 Masanao Izumo <mo@goice.co.jp>\r
-    Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>\r
-\r
-    This program is free software; you can redistribute it and/or modify\r
-    it under the terms of the GNU General Public License as published by\r
-    the Free Software Foundation; either version 2 of the License, or\r
-    (at your option) any later version.\r
-\r
-    This program is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-    GNU General Public License for more details.\r
-\r
-    You should have received a copy of the GNU General Public License\r
-    along with this program; if not, write to the Free Software\r
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-\r
-    w32g_utl.c: written by Daisuke Aoki <dai@y7.net>\r
-                           Masanao Izumo <mo@goice.co.jp>\r
-*/\r
-\r
-\r
-#ifdef HAVE_CONFIG_H\r
-#include "config.h"\r
-#endif /* HAVE_CONFIG_H */\r
-\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#ifndef NO_STRING_H\r
-#include <string.h>\r
-#else\r
-#include <strings.h>\r
-#endif\r
-#include <ctype.h>\r
-\r
-#include "timidity.h"\r
-#include "common.h"\r
-#include "instrum.h"\r
-#include "playmidi.h"\r
-#include "readmidi.h"\r
-#include "output.h"\r
-#include "controls.h"\r
+/*
+    TiMidity++ -- MIDI to WAVE converter and player
+    Copyright (C) 1999-2001 Masanao Izumo <mo@goice.co.jp>
+    Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
+
+    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.
+
+    w32g_utl.c: written by Daisuke Aoki <dai@y7.net>
+                           Masanao Izumo <mo@goice.co.jp>
+*/
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <stdlib.h>
+#include <stdio.h>
+#ifndef NO_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <ctype.h>
+
+#include "timidity.h"
+#include "common.h"
+#include "instrum.h"
+#include "playmidi.h"
+#include "readmidi.h"
+#include "output.h"
+#include "controls.h"
 #include "recache.h"\r
-#ifdef SUPPORT_SOUNDSPEC\r
-#include "soundspec.h"\r
-#endif /* SUPPORT_SOUNDSPEC */\r
-#include "wrd.h"\r
-#include "w32g.h"\r
-#include "w32g_utl.h"\r
-#include <sys/stat.h>\r
-#include "strtab.h"\r
-#include "url.h"\r
-\r
-extern int opt_default_mid;\r
-extern int effect_lr_mode;\r
-extern int effect_lr_delay_msec;\r
-extern char def_instr_name[];\r
-extern int opt_control_ratio;\r
-extern char *opt_aq_max_buff;\r
-extern char *opt_aq_fill_buff;\r
-extern int opt_evil_mode;\r
-extern int opt_buffer_fragments;\r
-extern int32 opt_output_rate;\r
-extern int PlayerLanguage;\r
-extern volatile int data_block_bits;\r
-extern volatile int data_block_num;\r
-extern int DocWndIndependent;\r
-extern int SeachDirRecursive;\r
-extern int IniFileAutoSave;\r
-extern int SecondMode;\r
-\r
-//*****************************************************************************/\r
-// ini\r
-\r
-// INI file\r
-CHAR *INI_INVALID = "INVALID PARAMETER";\r
-CHAR *INI_SEC_PLAYER = "PLAYER";\r
-CHAR *INI_SEC_TIMIDITY = "TIMIDITY";\r
-#define INI_MAXLEN 1024\r
-\r
-int\r
-IniGetKeyInt32(char *section, char *key,int32 *n)\r
-{\r
-  CHAR buffer[INI_MAXLEN];\r
-  GetPrivateProfileString\r
-    (section,key,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);\r
-  if(strcasecmp(buffer,INI_INVALID)){\r
-    *n =atol(buffer);\r
-    return 0;\r
-  } else\r
-    return 1;\r
-}\r
-\r
-int\r
-IniGetKeyInt32Array(char *section, char *key, int32 *n, int arraysize)\r
-{\r
-  int i;\r
-  int ret = 0;\r
-  CHAR buffer[INI_MAXLEN];\r
-  char keybuffer[INI_MAXLEN];\r
-  for(i=0;i<arraysize;i++){\r
-    sprintf(keybuffer,"%s%d",key,i);\r
-    GetPrivateProfileString\r
-      (section,keybuffer,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);\r
-    if(strcasecmp(buffer,INI_INVALID))\r
-      *n =atol(buffer);\r
-    else\r
-      ret++;\r
-  }\r
-  return ret;\r
-}\r
-\r
-int\r
-IniGetKeyInt(char *section, char *key, int *n)\r
-{\r
-  return IniGetKeyInt32(section, key, (int32 *)n);\r
-}\r
-\r
-int\r
-IniGetKeyFloat(char *section, char *key, FLOAT_T *n)\r
-{\r
-    CHAR buffer[INI_MAXLEN];\r
-    GetPrivateProfileString(section, key, INI_INVALID, buffer,\r
-                           INI_MAXLEN-1, IniFile);\r
-    if(strcasecmp(buffer, INI_INVALID))\r
-    {\r
-       *n = (FLOAT_T)atof(buffer);\r
-       return 0;\r
-    }\r
-    else\r
-       return 1;\r
-}\r
-\r
-int\r
-IniGetKeyChar(char *section, char *key, char *c)\r
-{\r
-  char buffer[64];\r
-  if(IniGetKeyStringN(section,key,buffer,60))\r
-    return 1;\r
-  else {\r
-    *c = buffer[0];\r
-    return 0;\r
-  }\r
-}\r
-\r
-int\r
-IniGetKeyIntArray(char *section, char *key, int *n, int arraysize)\r
-{\r
-  return IniGetKeyInt32Array(section,key,(int32 *)n, arraysize);\r
-}\r
-\r
-int\r
-IniGetKeyString(char *section, char *key,char *str)\r
-{\r
-  CHAR buffer[INI_MAXLEN];\r
-  GetPrivateProfileString\r
-    (section,key,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);\r
-  if(strcasecmp(buffer,INI_INVALID)){\r
-    strcpy(str,buffer);\r
-    return 0;\r
-  } else\r
-    return 1;\r
-}\r
-\r
-int\r
-IniGetKeyStringN(char *section, char *key,char *str, int size)\r
-{\r
-  CHAR buffer[INI_MAXLEN];\r
-  GetPrivateProfileString\r
-    (section,key,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);\r
-  if(strcasecmp(buffer,INI_INVALID)){\r
-    strncpy(str,buffer,size);\r
-    return 0;\r
-  }    else\r
-    return 1;\r
-}\r
-\r
-int\r
-IniPutKeyInt32(char *section, char *key,int32 *n)\r
-{\r
-  CHAR buffer[INI_MAXLEN];\r
-  sprintf(buffer,"%ld",*n);\r
-  WritePrivateProfileString\r
-    (section,key,buffer,IniFile);\r
-  return 0;\r
-}\r
-\r
-int\r
-IniPutKeyInt32Array(char *section, char *key, int32 *n, int arraysize)\r
-{\r
-  int i;\r
-  CHAR buffer[INI_MAXLEN];\r
-  CHAR keybuffer[INI_MAXLEN];\r
-  for(i=0;i<arraysize;i++){\r
-    sprintf(buffer,"%ld",n[i]);\r
-    sprintf(keybuffer,"%s%d",key,i);\r
-    WritePrivateProfileString(section,keybuffer,buffer,IniFile);\r
-  }\r
-  return 0;\r
-}\r
-\r
-int\r
-IniPutKeyInt(char *section, char *key, int *n)\r
-{\r
-  return IniPutKeyInt32(section, key, (int32 *)n);\r
-}\r
-\r
-int\r
-IniPutKeyChar(char *section, char *key, char *c)\r
-{\r
-  char buffer[64];\r
-  sprintf(buffer,"%c",*c);\r
-  return IniPutKeyStringN(section,key,buffer,60);\r
-}\r
-\r
-int\r
-IniPutKeyIntArray(char *section, char *key, int *n, int arraysize)\r
-{\r
-  return IniPutKeyInt32Array(section,key,(int32 *)n, arraysize);\r
-}\r
-\r
-int\r
-IniPutKeyString(char *section, char *key, char *str)\r
-{\r
-  WritePrivateProfileString(section,key,str,IniFile);\r
-  return 0;\r
-}\r
-\r
-int\r
-IniPutKeyStringN(char *section, char *key, char *str, int size)\r
-{\r
-  WritePrivateProfileString(section,key,str,IniFile);\r
-  return 0;\r
-}\r
-\r
-int\r
-IniPutKeyFloat(char *section, char *key,FLOAT_T n)\r
-{\r
-    CHAR buffer[INI_MAXLEN];\r
-    sprintf(buffer,"%f", (double)n);\r
-    WritePrivateProfileString(section, key, buffer, IniFile);\r
-    return 0;\r
-}\r
-\r
-// LoadIniFile() , SaveIniFile()\r
-// ***************************************************************************\r
-// Setting\r
-\r
-#define SetFlag(flag) (!!(flag))\r
-\r
-static long SetValue(int32 value, int32 min, int32 max)\r
-{\r
-  int32 v = value;\r
-  if(v < min) v = min;\r
-  else if( v > max) v = max;\r
-  return v;\r
-}\r
-\r
-void\r
-ApplySettingPlayer(SETTING_PLAYER *sp)\r
-{\r
-  InitMinimizeFlag = SetFlag(sp->InitMinimizeFlag);\r
-  DebugWndStartFlag = SetFlag(sp->DebugWndStartFlag);\r
-  ConsoleWndStartFlag = SetFlag(sp->ConsoleWndStartFlag);\r
-  ListWndStartFlag = SetFlag(sp->ListWndStartFlag);\r
-  TracerWndStartFlag = SetFlag(sp->TracerWndStartFlag);\r
-  DocWndStartFlag = SetFlag(sp->DocWndStartFlag);\r
-  WrdWndStartFlag = SetFlag(sp->WrdWndStartFlag);\r
-  DebugWndFlag = SetFlag(sp->DebugWndFlag);\r
-  ConsoleWndFlag = SetFlag(sp->ConsoleWndFlag);\r
-  ListWndFlag = SetFlag(sp->ListWndFlag);\r
-  TracerWndFlag = SetFlag(sp->TracerWndFlag);\r
-  DocWndFlag = SetFlag(sp->DocWndFlag);\r
-  WrdWndFlag = SetFlag(sp->WrdWndFlag);\r
-  SoundSpecWndFlag = SetFlag(sp->SoundSpecWndFlag);\r
-  SubWindowMax = SetValue(sp->SubWindowMax,1,10);\r
-  strncpy(ConfigFile,sp->ConfigFile,MAXPATH + 31);\r
-  ConfigFile[MAXPATH + 31] = '\0';\r
-  strncpy(PlaylistFile,sp->PlaylistFile,MAXPATH + 31);\r
-  PlaylistFile[MAXPATH + 31] = '\0';\r
-  strncpy(PlaylistHistoryFile,sp->PlaylistHistoryFile,MAXPATH + 31);\r
-  PlaylistHistoryFile[MAXPATH + 31] = '\0';\r
-  strncpy(MidiFileOpenDir,sp->MidiFileOpenDir,MAXPATH + 31);\r
-  MidiFileOpenDir[MAXPATH + 31] = '\0';\r
-  strncpy(ConfigFileOpenDir,sp->ConfigFileOpenDir,MAXPATH + 31);\r
-  ConfigFileOpenDir[MAXPATH + 31] = '\0';\r
-  strncpy(PlaylistFileOpenDir,sp->PlaylistFileOpenDir,MAXPATH + 31);\r
-  PlaylistFileOpenDir[MAXPATH + 31] = '\0';\r
-  PlayerThreadPriority = sp->PlayerThreadPriority;\r
-  GUIThreadPriority = sp->GUIThreadPriority;\r
-  TraceGraphicFlag = SetFlag(sp->TraceGraphicFlag);\r
-  // fonts ...\r
-  SystemFontSize = sp->SystemFontSize;\r
-  PlayerFontSize = sp->PlayerFontSize;\r
-  WrdFontSize = sp->WrdFontSize;\r
-  DocFontSize = sp->DocFontSize;\r
-  ListFontSize = sp->ListFontSize;\r
-  TracerFontSize = sp->TracerFontSize;\r
-  strncpy(SystemFont,sp->SystemFont,255);\r
-  SystemFont[255] = '\0';\r
-  strncpy(PlayerFont,sp->PlayerFont,255);\r
-  PlayerFont[255] = '\0';\r
-  strncpy(WrdFont,sp->WrdFont,255);\r
-  WrdFont[255] = '\0';\r
-  strncpy(DocFont,sp->DocFont,255);\r
-  DocFont[255] = '\0';\r
-  strncpy(ListFont,sp->ListFont,255);\r
-  ListFont[255] = '\0';\r
-  strncpy(TracerFont,sp->TracerFont,255);\r
-  TracerFont[255] = '\0';\r
-  // Apply font functions ...\r
-\r
-  PlayerLanguage = sp->PlayerLanguage;\r
-  DocWndIndependent = sp->DocWndIndependent; \r
-  SeachDirRecursive = sp->SeachDirRecursive;\r
-  IniFileAutoSave = sp->IniFileAutoSave;\r
-  SecondMode = sp->SecondMode;\r
-}\r
-\r
-void\r
-SaveSettingPlayer(SETTING_PLAYER *sp)\r
-{\r
-  sp->InitMinimizeFlag = SetFlag(InitMinimizeFlag);\r
-  sp->DebugWndStartFlag = SetFlag(DebugWndStartFlag);\r
-  sp->ConsoleWndStartFlag = SetFlag(ConsoleWndStartFlag);\r
-  sp->ListWndStartFlag = SetFlag(ListWndStartFlag);\r
-  sp->TracerWndStartFlag = SetFlag(TracerWndStartFlag);\r
-  sp->DocWndStartFlag = SetFlag(DocWndStartFlag);\r
-  sp->WrdWndStartFlag = SetFlag(WrdWndStartFlag);\r
-  sp->DebugWndFlag = SetFlag(DebugWndFlag);\r
-  sp->ConsoleWndFlag = SetFlag(ConsoleWndFlag);\r
-  sp->ListWndFlag = SetFlag(ListWndFlag);\r
-  sp->TracerWndFlag = SetFlag(TracerWndFlag);\r
-  sp->DocWndFlag = SetFlag(DocWndFlag);\r
-  sp->WrdWndFlag = SetFlag(WrdWndFlag);\r
-  sp->SoundSpecWndFlag = SetFlag(SoundSpecWndFlag);\r
-  sp->SubWindowMax = SetValue(SubWindowMax,1,10);\r
-  strncpy(sp->ConfigFile,ConfigFile,MAXPATH + 31);\r
-  (sp->ConfigFile)[MAXPATH + 31] = '\0';\r
-  strncpy(sp->PlaylistFile,PlaylistFile,MAXPATH + 31);\r
-  (sp->PlaylistFile)[MAXPATH + 31] = '\0';\r
-  strncpy(sp->PlaylistHistoryFile,PlaylistHistoryFile,MAXPATH + 31);\r
-  (sp->PlaylistHistoryFile)[MAXPATH + 31] = '\0';\r
-  strncpy(sp->MidiFileOpenDir,MidiFileOpenDir,MAXPATH + 31);\r
-  (sp->MidiFileOpenDir)[MAXPATH + 31] = '\0';\r
-  strncpy(sp->ConfigFileOpenDir,ConfigFileOpenDir,MAXPATH + 31);\r
-  (sp->ConfigFileOpenDir)[MAXPATH + 31] = '\0';\r
-  strncpy(sp->PlaylistFileOpenDir,PlaylistFileOpenDir,MAXPATH + 31);\r
-  (sp->PlaylistFileOpenDir)[MAXPATH + 31] = '\0';\r
-  sp->PlayerThreadPriority = PlayerThreadPriority;\r
-  sp->GUIThreadPriority = GUIThreadPriority;\r
-  sp->WrdGraphicFlag = SetFlag(WrdGraphicFlag);\r
-  sp->TraceGraphicFlag = SetFlag(TraceGraphicFlag);\r
-  // fonts ...\r
-  sp->SystemFontSize = SystemFontSize;\r
-  sp->PlayerFontSize = PlayerFontSize;\r
-  sp->WrdFontSize = WrdFontSize;\r
-  sp->DocFontSize = DocFontSize;\r
-  sp->ListFontSize = ListFontSize;\r
-  sp->TracerFontSize = TracerFontSize;\r
-  strncpy(sp->SystemFont,SystemFont,255);\r
-  sp->SystemFont[255] = '\0';\r
-  strncpy(sp->PlayerFont,PlayerFont,255);\r
-  sp->PlayerFont[255] = '\0';\r
-  strncpy(sp->WrdFont,WrdFont,255);\r
-  sp->WrdFont[255] = '\0';\r
-  strncpy(sp->DocFont,DocFont,255);\r
-  DocFont[255] = '\0';\r
-  strncpy(sp->ListFont,ListFont,255);\r
-  sp->ListFont[255] = '\0';\r
-  strncpy(sp->TracerFont,TracerFont,255);\r
-  sp->TracerFont[255] = '\0';\r
-  sp->PlayerLanguage = PlayerLanguage;\r
-  sp->DocWndIndependent = DocWndIndependent; \r
-  sp->SeachDirRecursive = SeachDirRecursive;\r
-  sp->IniFileAutoSave = IniFileAutoSave;\r
-  sp->SecondMode = SecondMode;\r
-}\r
-\r
-extern int set_play_mode(char *cp);\r
-extern int set_tim_opt(int c, char *optarg);\r
-extern int set_ctl(char *cp);\r
-extern int set_wrd(char *w);\r
-\r
-#if defined(__W32__) && defined(SMFCONV)\r
-extern int opt_rcpcv_dll;\r
-#endif /* SMFCONV */\r
-extern char *wrdt_open_opts;\r
-\r
-static int is_device_output_ID(int id)\r
-{\r
-    return id == 'd' || id == 'n' || id == 'e';\r
-}\r
-\r
-void\r
-ApplySettingTiMidity(SETTING_TIMIDITY *st)\r
-{\r
-    int i;\r
-    char buffer[INI_MAXLEN];\r
-\r
-    /* Player must be stopped.\r
-     * DANGER to apply settings while playing.\r
-     */\r
-    amplification = SetValue(st->amplification, 0, MAX_AMPLIFICATION);\r
-    antialiasing_allowed = SetFlag(st->antialiasing_allowed);\r
-    if(st->buffer_fragments == -1)\r
-       opt_buffer_fragments = -1;\r
-    else\r
-       opt_buffer_fragments = SetValue(st->buffer_fragments, 3, 1000);\r
-    default_drumchannels = st->default_drumchannels;\r
-    default_drumchannel_mask = st->default_drumchannel_mask;\r
-    opt_modulation_wheel = SetFlag(st->opt_modulation_wheel);\r
-    opt_portamento = SetFlag(st->opt_portamento);\r
-    opt_nrpn_vibrato = SetFlag(st->opt_nrpn_vibrato);\r
-    opt_channel_pressure = SetFlag(st->opt_channel_pressure);\r
-    opt_trace_text_meta_event = SetFlag(st->opt_trace_text_meta_event);\r
-    opt_overlap_voice_allow = SetFlag(st->opt_overlap_voice_allow);\r
-    opt_default_mid = st->opt_default_mid;\r
-    default_tonebank = st->default_tonebank;\r
-    special_tonebank = st->special_tonebank;\r
-    effect_lr_mode = st->effect_lr_mode;\r
-    effect_lr_delay_msec = st->effect_lr_delay_msec;\r
-    opt_reverb_control = st->opt_reverb_control;\r
+#include "tables.h"
+#ifdef SUPPORT_SOUNDSPEC
+#include "soundspec.h"
+#endif /* SUPPORT_SOUNDSPEC */
+#include "wrd.h"
+#include "w32g.h"
+#include "w32g_utl.h"
+#include <sys/stat.h>
+#include "strtab.h"
+#include "url.h"
+
+extern int opt_default_mid;
+extern int effect_lr_mode;
+extern int effect_lr_delay_msec;
+extern char def_instr_name[];
+extern int opt_control_ratio;
+extern char *opt_aq_max_buff;
+extern char *opt_aq_fill_buff;
+extern int opt_evil_mode;
+extern int opt_buffer_fragments;
+extern int32 opt_output_rate;
+extern int PlayerLanguage;
+extern volatile int data_block_bits;
+extern volatile int data_block_num;
+extern int DocWndIndependent;
+extern int DocWndAutoPopup;
+extern int SeachDirRecursive;
+extern int IniFileAutoSave;
+extern int SecondMode;
+
+//*****************************************************************************/
+// ini
+
+// INI file
+CHAR *INI_INVALID = "INVALID PARAMETER";
+CHAR *INI_SEC_PLAYER = "PLAYER";
+CHAR *INI_SEC_TIMIDITY = "TIMIDITY";
+#define INI_MAXLEN 1024
+
+int
+IniGetKeyInt32(char *section, char *key,int32 *n)
+{
+  CHAR buffer[INI_MAXLEN];
+  GetPrivateProfileString
+    (section,key,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);
+  if(strcasecmp(buffer,INI_INVALID)){
+    *n =atol(buffer);
+    return 0;
+  } else
+    return 1;
+}
+
+int
+IniGetKeyInt32Array(char *section, char *key, int32 *n, int arraysize)
+{
+  int i;
+  int ret = 0;
+  CHAR buffer[INI_MAXLEN];
+  char keybuffer[INI_MAXLEN];
+  for(i=0;i<arraysize;i++){
+    sprintf(keybuffer,"%s%d",key,i);
+    GetPrivateProfileString
+      (section,keybuffer,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);
+    if(strcasecmp(buffer,INI_INVALID))
+      *n =atol(buffer);
+    else
+      ret++;
+  }
+  return ret;
+}
+
+int
+IniGetKeyInt(char *section, char *key, int *n)
+{
+  return IniGetKeyInt32(section, key, (int32 *)n);
+}
+
+int
+IniGetKeyFloat(char *section, char *key, FLOAT_T *n)
+{
+    CHAR buffer[INI_MAXLEN];
+    GetPrivateProfileString(section, key, INI_INVALID, buffer,
+                           INI_MAXLEN-1, IniFile);
+    if(strcasecmp(buffer, INI_INVALID))
+    {
+       *n = (FLOAT_T)atof(buffer);
+       return 0;
+    }
+    else
+       return 1;
+}
+
+int
+IniGetKeyChar(char *section, char *key, char *c)
+{
+  char buffer[64];
+  if(IniGetKeyStringN(section,key,buffer,60))
+    return 1;
+  else {
+    *c = buffer[0];
+    return 0;
+  }
+}
+
+int
+IniGetKeyIntArray(char *section, char *key, int *n, int arraysize)
+{
+  return IniGetKeyInt32Array(section,key,(int32 *)n, arraysize);
+}
+
+int
+IniGetKeyString(char *section, char *key,char *str)
+{
+  CHAR buffer[INI_MAXLEN];
+  GetPrivateProfileString
+    (section,key,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);
+  if(strcasecmp(buffer,INI_INVALID)){
+    strcpy(str,buffer);
+    return 0;
+  } else
+    return 1;
+}
+
+int
+IniGetKeyStringN(char *section, char *key,char *str, int size)
+{
+  CHAR buffer[INI_MAXLEN];
+  GetPrivateProfileString
+    (section,key,INI_INVALID,buffer,INI_MAXLEN-1,IniFile);
+  if(strcasecmp(buffer,INI_INVALID)){
+    strncpy(str,buffer,size);
+    return 0;
+  }    else
+    return 1;
+}
+
+int
+IniPutKeyInt32(char *section, char *key,int32 *n)
+{
+  CHAR buffer[INI_MAXLEN];
+  sprintf(buffer,"%ld",*n);
+  WritePrivateProfileString
+    (section,key,buffer,IniFile);
+  return 0;
+}
+
+int
+IniPutKeyInt32Array(char *section, char *key, int32 *n, int arraysize)
+{
+  int i;
+  CHAR buffer[INI_MAXLEN];
+  CHAR keybuffer[INI_MAXLEN];
+  for(i=0;i<arraysize;i++){
+    sprintf(buffer,"%ld",n[i]);
+    sprintf(keybuffer,"%s%d",key,i);
+    WritePrivateProfileString(section,keybuffer,buffer,IniFile);
+  }
+  return 0;
+}
+
+int
+IniPutKeyInt(char *section, char *key, int *n)
+{
+  return IniPutKeyInt32(section, key, (int32 *)n);
+}
+
+int
+IniPutKeyChar(char *section, char *key, char *c)
+{
+  char buffer[64];
+  sprintf(buffer,"%c",*c);
+  return IniPutKeyStringN(section,key,buffer,60);
+}
+
+int
+IniPutKeyIntArray(char *section, char *key, int *n, int arraysize)
+{
+  return IniPutKeyInt32Array(section,key,(int32 *)n, arraysize);
+}
+
+int
+IniPutKeyString(char *section, char *key, char *str)
+{
+  WritePrivateProfileString(section,key,str,IniFile);
+  return 0;
+}
+
+int
+IniPutKeyStringN(char *section, char *key, char *str, int size)
+{
+  WritePrivateProfileString(section,key,str,IniFile);
+  return 0;
+}
+
+int
+IniPutKeyFloat(char *section, char *key,FLOAT_T n)
+{
+    CHAR buffer[INI_MAXLEN];
+    sprintf(buffer,"%f", (double)n);
+    WritePrivateProfileString(section, key, buffer, IniFile);
+    return 0;
+}
+
+// LoadIniFile() , SaveIniFile()
+// ***************************************************************************
+// Setting
+
+#define SetFlag(flag) (!!(flag))
+
+static long SetValue(int32 value, int32 min, int32 max)
+{
+  int32 v = value;
+  if(v < min) v = min;
+  else if( v > max) v = max;
+  return v;
+}
+
+void
+ApplySettingPlayer(SETTING_PLAYER *sp)
+{
+  InitMinimizeFlag = SetFlag(sp->InitMinimizeFlag);
+  DebugWndStartFlag = SetFlag(sp->DebugWndStartFlag);
+  ConsoleWndStartFlag = SetFlag(sp->ConsoleWndStartFlag);
+  ListWndStartFlag = SetFlag(sp->ListWndStartFlag);
+  TracerWndStartFlag = SetFlag(sp->TracerWndStartFlag);
+  DocWndStartFlag = SetFlag(sp->DocWndStartFlag);
+  WrdWndStartFlag = SetFlag(sp->WrdWndStartFlag);
+  DebugWndFlag = SetFlag(sp->DebugWndFlag);
+  ConsoleWndFlag = SetFlag(sp->ConsoleWndFlag);
+  ListWndFlag = SetFlag(sp->ListWndFlag);
+  TracerWndFlag = SetFlag(sp->TracerWndFlag);
+  DocWndFlag = SetFlag(sp->DocWndFlag);
+  WrdWndFlag = SetFlag(sp->WrdWndFlag);
+  SoundSpecWndFlag = SetFlag(sp->SoundSpecWndFlag);
+  SubWindowMax = SetValue(sp->SubWindowMax,1,10);
+  strncpy(ConfigFile,sp->ConfigFile,MAXPATH + 31);
+  ConfigFile[MAXPATH + 31] = '\0';
+  strncpy(PlaylistFile,sp->PlaylistFile,MAXPATH + 31);
+  PlaylistFile[MAXPATH + 31] = '\0';
+  strncpy(PlaylistHistoryFile,sp->PlaylistHistoryFile,MAXPATH + 31);
+  PlaylistHistoryFile[MAXPATH + 31] = '\0';
+  strncpy(MidiFileOpenDir,sp->MidiFileOpenDir,MAXPATH + 31);
+  MidiFileOpenDir[MAXPATH + 31] = '\0';
+  strncpy(ConfigFileOpenDir,sp->ConfigFileOpenDir,MAXPATH + 31);
+  ConfigFileOpenDir[MAXPATH + 31] = '\0';
+  strncpy(PlaylistFileOpenDir,sp->PlaylistFileOpenDir,MAXPATH + 31);
+  PlaylistFileOpenDir[MAXPATH + 31] = '\0';
+  PlayerThreadPriority = sp->PlayerThreadPriority;
+  GUIThreadPriority = sp->GUIThreadPriority;
+  TraceGraphicFlag = SetFlag(sp->TraceGraphicFlag);
+  // fonts ...
+  SystemFontSize = sp->SystemFontSize;
+  PlayerFontSize = sp->PlayerFontSize;
+  WrdFontSize = sp->WrdFontSize;
+  DocFontSize = sp->DocFontSize;
+  ListFontSize = sp->ListFontSize;
+  TracerFontSize = sp->TracerFontSize;
+  strncpy(SystemFont,sp->SystemFont,255);
+  SystemFont[255] = '\0';
+  strncpy(PlayerFont,sp->PlayerFont,255);
+  PlayerFont[255] = '\0';
+  strncpy(WrdFont,sp->WrdFont,255);
+  WrdFont[255] = '\0';
+  strncpy(DocFont,sp->DocFont,255);
+  DocFont[255] = '\0';
+  strncpy(ListFont,sp->ListFont,255);
+  ListFont[255] = '\0';
+  strncpy(TracerFont,sp->TracerFont,255);
+  TracerFont[255] = '\0';
+  // Apply font functions ...
+
+  DocMaxSize = sp->DocMaxSize;
+  strncpy(DocFileExt,sp->DocFileExt,255);
+  DocFileExt[255] = '\0';
+  PlayerLanguage = sp->PlayerLanguage;
+  DocWndIndependent = sp->DocWndIndependent; 
+  DocWndAutoPopup = sp->DocWndAutoPopup; 
+  SeachDirRecursive = sp->SeachDirRecursive;
+  IniFileAutoSave = sp->IniFileAutoSave;
+  SecondMode = sp->SecondMode;
+}
+
+void
+SaveSettingPlayer(SETTING_PLAYER *sp)
+{
+  sp->InitMinimizeFlag = SetFlag(InitMinimizeFlag);
+  sp->DebugWndStartFlag = SetFlag(DebugWndStartFlag);
+  sp->ConsoleWndStartFlag = SetFlag(ConsoleWndStartFlag);
+  sp->ListWndStartFlag = SetFlag(ListWndStartFlag);
+  sp->TracerWndStartFlag = SetFlag(TracerWndStartFlag);
+  sp->DocWndStartFlag = SetFlag(DocWndStartFlag);
+  sp->WrdWndStartFlag = SetFlag(WrdWndStartFlag);
+  sp->DebugWndFlag = SetFlag(DebugWndFlag);
+  sp->ConsoleWndFlag = SetFlag(ConsoleWndFlag);
+  sp->ListWndFlag = SetFlag(ListWndFlag);
+  sp->TracerWndFlag = SetFlag(TracerWndFlag);
+  sp->DocWndFlag = SetFlag(DocWndFlag);
+  sp->WrdWndFlag = SetFlag(WrdWndFlag);
+  sp->SoundSpecWndFlag = SetFlag(SoundSpecWndFlag);
+  sp->SubWindowMax = SetValue(SubWindowMax,1,10);
+  strncpy(sp->ConfigFile,ConfigFile,MAXPATH + 31);
+  (sp->ConfigFile)[MAXPATH + 31] = '\0';
+  strncpy(sp->PlaylistFile,PlaylistFile,MAXPATH + 31);
+  (sp->PlaylistFile)[MAXPATH + 31] = '\0';
+  strncpy(sp->PlaylistHistoryFile,PlaylistHistoryFile,MAXPATH + 31);
+  (sp->PlaylistHistoryFile)[MAXPATH + 31] = '\0';
+  strncpy(sp->MidiFileOpenDir,MidiFileOpenDir,MAXPATH + 31);
+  (sp->MidiFileOpenDir)[MAXPATH + 31] = '\0';
+  strncpy(sp->ConfigFileOpenDir,ConfigFileOpenDir,MAXPATH + 31);
+  (sp->ConfigFileOpenDir)[MAXPATH + 31] = '\0';
+  strncpy(sp->PlaylistFileOpenDir,PlaylistFileOpenDir,MAXPATH + 31);
+  (sp->PlaylistFileOpenDir)[MAXPATH + 31] = '\0';
+  sp->PlayerThreadPriority = PlayerThreadPriority;
+  sp->GUIThreadPriority = GUIThreadPriority;
+  sp->WrdGraphicFlag = SetFlag(WrdGraphicFlag);
+  sp->TraceGraphicFlag = SetFlag(TraceGraphicFlag);
+  // fonts ...
+  sp->SystemFontSize = SystemFontSize;
+  sp->PlayerFontSize = PlayerFontSize;
+  sp->WrdFontSize = WrdFontSize;
+  sp->DocFontSize = DocFontSize;
+  sp->ListFontSize = ListFontSize;
+  sp->TracerFontSize = TracerFontSize;
+  strncpy(sp->SystemFont,SystemFont,255);
+  sp->SystemFont[255] = '\0';
+  strncpy(sp->PlayerFont,PlayerFont,255);
+  sp->PlayerFont[255] = '\0';
+  strncpy(sp->WrdFont,WrdFont,255);
+  sp->WrdFont[255] = '\0';
+  strncpy(sp->DocFont,DocFont,255);
+  DocFont[255] = '\0';
+  strncpy(sp->ListFont,ListFont,255);
+  sp->ListFont[255] = '\0';
+  strncpy(sp->TracerFont,TracerFont,255);
+  sp->TracerFont[255] = '\0';
+  sp->DocMaxSize = DocMaxSize;
+  strncpy(sp->DocFileExt,DocFileExt,255);
+  sp->DocFileExt[255] = '\0';
+  sp->PlayerLanguage = PlayerLanguage;
+  sp->DocWndIndependent = DocWndIndependent; 
+  sp->DocWndAutoPopup = DocWndAutoPopup; 
+  sp->SeachDirRecursive = SeachDirRecursive;
+  sp->IniFileAutoSave = IniFileAutoSave;
+  sp->SecondMode = SecondMode;
+}
+
+extern int set_play_mode(char *cp);
+extern int set_tim_opt(int c, char *optarg);
+extern int set_ctl(char *cp);
+extern int set_wrd(char *w);
+
+#if defined(__W32__) && defined(SMFCONV)
+extern int opt_rcpcv_dll;
+#endif /* SMFCONV */
+extern char *wrdt_open_opts;
+
+static int is_device_output_ID(int id)
+{
+    return id == 'd' || id == 'n' || id == 'e';
+}
+
+void
+ApplySettingTiMidity(SETTING_TIMIDITY *st)
+{
+    int i;
+    char buffer[INI_MAXLEN];
+
+    /* Player must be stopped.
+     * DANGER to apply settings while playing.
+     */
+    amplification = SetValue(st->amplification, 0, MAX_AMPLIFICATION);
+    antialiasing_allowed = SetFlag(st->antialiasing_allowed);
+    if(st->buffer_fragments == -1)
+       opt_buffer_fragments = -1;
+    else
+       opt_buffer_fragments = SetValue(st->buffer_fragments, 3, 1000);
+    default_drumchannels = st->default_drumchannels;
+    default_drumchannel_mask = st->default_drumchannel_mask;
+    opt_modulation_wheel = SetFlag(st->opt_modulation_wheel);
+    opt_portamento = SetFlag(st->opt_portamento);
+    opt_nrpn_vibrato = SetFlag(st->opt_nrpn_vibrato);
+    opt_channel_pressure = SetFlag(st->opt_channel_pressure);
+    opt_trace_text_meta_event = SetFlag(st->opt_trace_text_meta_event);
+    opt_overlap_voice_allow = SetFlag(st->opt_overlap_voice_allow);
+    opt_default_mid = st->opt_default_mid;
+    default_tonebank = st->default_tonebank;
+    special_tonebank = st->special_tonebank;
+    effect_lr_mode = st->effect_lr_mode;
+    effect_lr_delay_msec = st->effect_lr_delay_msec;
+    opt_reverb_control = st->opt_reverb_control;
     opt_chorus_control = st->opt_chorus_control;\r
-    noise_sharp_type = st->noise_sharp_type;\r
+       opt_surround_chorus = st->opt_surround_chorus;
+    noise_sharp_type = st->noise_sharp_type;
     opt_evil_mode = st->opt_evil_mode;\r
-    adjust_panning_immediately = SetFlag(st->adjust_panning_immediately);\r
-    fast_decay = SetFlag(st->fast_decay);\r
-#ifdef SUPPORT_SOUNDSPEC\r
-    view_soundspec_flag = SetFlag(st->view_soundspec_flag);\r
-    spectrigram_update_sec = st->spectrigram_update_sec;\r
-#endif\r
-    for(i = 0; i < MAX_CHANNELS; i++)\r
-       default_program[i] = st->default_program[i];\r
-    set_ctl(st->opt_ctl);\r
-    opt_realtime_playing = SetFlag(st->opt_realtime_playing);\r
-    reduce_voice_threshold = st->reduce_voice_threshold;\r
-    set_play_mode(st->opt_playmode);\r
-    strncpy(OutputName,st->OutputName,MAXPATH);\r
-    if(OutputName[0] && !is_device_output_ID(play_mode->id_character))\r
-       play_mode->name = OutputName;\r
-    opt_output_rate = st->output_rate;\r
-    if(st->output_rate)\r
-       play_mode->rate = SetValue(st->output_rate,\r
-                                  MIN_OUTPUT_RATE, MAX_OUTPUT_RATE);\r
-    else if(play_mode->rate == 0)\r
-       play_mode->rate = DEFAULT_RATE;\r
-    voices = SetValue(st->voices, 1, MAX_VOICES);\r
-       auto_reduce_polyphony = st->auto_reduce_polyphony;\r
-    quietchannels = st->quietchannels;\r
-    if(opt_aq_max_buff)\r
-       free(opt_aq_max_buff);\r
-    if(opt_aq_fill_buff)\r
-       free(opt_aq_fill_buff);\r
-    strcpy(buffer, st->opt_qsize);\r
-    opt_aq_max_buff = buffer;\r
-    opt_aq_fill_buff = strchr(opt_aq_max_buff, '/');\r
-    *opt_aq_fill_buff++ = '\0';\r
-    opt_aq_max_buff = safe_strdup(opt_aq_max_buff);\r
-    opt_aq_fill_buff = safe_strdup(opt_aq_fill_buff);\r
-    modify_release = SetValue(st->modify_release, 0, MAX_MREL);\r
-    allocate_cache_size = st->allocate_cache_size;\r
-    if(output_text_code)\r
-       free(output_text_code);\r
-    output_text_code = safe_strdup(st->output_text_code);\r
-    free_instruments_afterwards = st->free_instruments_afterwards;\r
-    set_wrd(st->opt_wrd);\r
-#if defined(__W32__) && defined(SMFCONV)\r
-    opt_rcpcv_dll = st->opt_rcpcv_dll;\r
-#endif /* SMFCONV */\r
-\r
-    opt_control_ratio = st->control_ratio;\r
-    if(opt_control_ratio)\r
-       control_ratio = SetValue(opt_control_ratio, 1, MAX_CONTROL_RATIO);\r
-    else\r
-    {\r
-       control_ratio = play_mode->rate / CONTROLS_PER_SECOND;\r
-       control_ratio = SetValue(control_ratio, 1, MAX_CONTROL_RATIO);\r
-    }\r
-    data_block_bits = st->data_block_bits;\r
-    data_block_num = st->data_block_num;\r
-}\r
-\r
-void\r
-SaveSettingTiMidity(SETTING_TIMIDITY *st)\r
-{\r
-    int i, j;\r
-\r
-    st->amplification = SetValue(amplification, 0, MAX_AMPLIFICATION);\r
-    st->antialiasing_allowed = SetFlag(antialiasing_allowed);\r
-    st->buffer_fragments = opt_buffer_fragments;\r
-    st->control_ratio = SetValue(opt_control_ratio, 0, MAX_CONTROL_RATIO);\r
-    st->default_drumchannels = default_drumchannels;\r
-    st->default_drumchannel_mask = default_drumchannel_mask;\r
-    st->opt_modulation_wheel = SetFlag(opt_modulation_wheel);\r
-    st->opt_portamento = SetFlag(opt_portamento);\r
-    st->opt_nrpn_vibrato = SetFlag(opt_nrpn_vibrato);\r
-    st->opt_channel_pressure = SetFlag(opt_channel_pressure);\r
-    st->opt_trace_text_meta_event = SetFlag(opt_trace_text_meta_event);\r
-    st->opt_overlap_voice_allow = SetFlag(opt_overlap_voice_allow);\r
-    st->opt_default_mid = opt_default_mid;\r
-    st->default_tonebank = default_tonebank;\r
-    st->special_tonebank = special_tonebank;\r
-    st->effect_lr_mode = effect_lr_mode;\r
-    st->effect_lr_delay_msec = effect_lr_delay_msec;\r
-    st->opt_reverb_control = opt_reverb_control;\r
+       opt_tva_attack = st->opt_tva_attack;\r
+       opt_tva_decay = st->opt_tva_decay;\r
+       opt_tva_release = st->opt_tva_release;\r
+       opt_delay_control = st->opt_delay_control;\r
+       opt_resonance = st->opt_resonance;\r
+       opt_env_attack = st->opt_env_attack;\r
+       opt_velocity_table = st->opt_velocity_table;
+    adjust_panning_immediately = SetFlag(st->adjust_panning_immediately);
+    fast_decay = SetFlag(st->fast_decay);
+#ifdef SUPPORT_SOUNDSPEC
+    view_soundspec_flag = SetFlag(st->view_soundspec_flag);
+    spectrigram_update_sec = st->spectrigram_update_sec;
+#endif
+    for(i = 0; i < MAX_CHANNELS; i++)
+       default_program[i] = st->default_program[i];
+    set_ctl(st->opt_ctl);
+    opt_realtime_playing = SetFlag(st->opt_realtime_playing);
+    reduce_voice_threshold = st->reduce_voice_threshold;
+    set_play_mode(st->opt_playmode);
+    strncpy(OutputName,st->OutputName,MAXPATH);
+    if(OutputName[0] && !is_device_output_ID(play_mode->id_character))
+               play_mode->name = strdup(OutputName);           // \83\81\83\82\83\8a\83\8a\81[\83N\82·\82é\82©\82È\81\82Í\82¸\82·\82Æ\82¾\82ß\82¾\82µ\81B
+    strncpy(w32g_output_dir,st->OutputDirName,MAXPATH);
+       w32g_output_dir[MAXPATH-1] = '\0';
+       w32g_auto_output_mode = st->auto_output_mode;
+    opt_output_rate = st->output_rate;
+    if(st->output_rate)
+       play_mode->rate = SetValue(st->output_rate,
+                                  MIN_OUTPUT_RATE, MAX_OUTPUT_RATE);
+    else if(play_mode->rate == 0)
+       play_mode->rate = DEFAULT_RATE;
+    voices = SetValue(st->voices, 1, MAX_VOICES);
+       auto_reduce_polyphony = st->auto_reduce_polyphony;
+    quietchannels = st->quietchannels;
+    if(opt_aq_max_buff)
+       free(opt_aq_max_buff);
+    if(opt_aq_fill_buff)
+       free(opt_aq_fill_buff);
+    strcpy(buffer, st->opt_qsize);
+    opt_aq_max_buff = buffer;
+    opt_aq_fill_buff = strchr(opt_aq_max_buff, '/');
+    *opt_aq_fill_buff++ = '\0';
+    opt_aq_max_buff = safe_strdup(opt_aq_max_buff);
+    opt_aq_fill_buff = safe_strdup(opt_aq_fill_buff);
+    modify_release = SetValue(st->modify_release, 0, MAX_MREL);
+    allocate_cache_size = st->allocate_cache_size;
+    if(output_text_code)
+       free(output_text_code);
+    output_text_code = safe_strdup(st->output_text_code);
+    free_instruments_afterwards = st->free_instruments_afterwards;
+    set_wrd(st->opt_wrd);
+#if defined(__W32__) && defined(SMFCONV)
+    opt_rcpcv_dll = st->opt_rcpcv_dll;
+#endif /* SMFCONV */
+
+    opt_control_ratio = st->control_ratio;
+    if(opt_control_ratio)
+       control_ratio = SetValue(opt_control_ratio, 1, MAX_CONTROL_RATIO);
+    else
+    {
+       control_ratio = play_mode->rate / CONTROLS_PER_SECOND;
+       control_ratio = SetValue(control_ratio, 1, MAX_CONTROL_RATIO);
+    }
+    data_block_bits = st->data_block_bits;
+    data_block_num = st->data_block_num;
+}
+
+void
+SaveSettingTiMidity(SETTING_TIMIDITY *st)
+{
+    int i, j;
+
+    st->amplification = SetValue(amplification, 0, MAX_AMPLIFICATION);
+    st->antialiasing_allowed = SetFlag(antialiasing_allowed);
+    st->buffer_fragments = opt_buffer_fragments;
+    st->control_ratio = SetValue(opt_control_ratio, 0, MAX_CONTROL_RATIO);
+    st->default_drumchannels = default_drumchannels;
+    st->default_drumchannel_mask = default_drumchannel_mask;
+    st->opt_modulation_wheel = SetFlag(opt_modulation_wheel);
+    st->opt_portamento = SetFlag(opt_portamento);
+    st->opt_nrpn_vibrato = SetFlag(opt_nrpn_vibrato);
+    st->opt_channel_pressure = SetFlag(opt_channel_pressure);
+    st->opt_trace_text_meta_event = SetFlag(opt_trace_text_meta_event);
+    st->opt_overlap_voice_allow = SetFlag(opt_overlap_voice_allow);
+    st->opt_default_mid = opt_default_mid;
+    st->default_tonebank = default_tonebank;
+    st->special_tonebank = special_tonebank;
+    st->effect_lr_mode = effect_lr_mode;
+    st->effect_lr_delay_msec = effect_lr_delay_msec;
+    st->opt_reverb_control = opt_reverb_control;
     st->opt_chorus_control = opt_chorus_control;\r
-    st->noise_sharp_type = noise_sharp_type;\r
-    st->opt_evil_mode = SetFlag(opt_evil_mode);\r
-    st->adjust_panning_immediately = SetFlag(adjust_panning_immediately);\r
-    st->fast_decay = SetFlag(fast_decay);\r
-#ifdef SUPPORT_SOUNDSPEC\r
-    st->view_soundspec_flag = SetFlag(view_soundspec_flag);\r
-    st->spectrigram_update_sec = spectrigram_update_sec;\r
-#endif\r
-    for(i = 0; i < MAX_CHANNELS; i++)\r
-    {\r
-       if(def_instr_name[0])\r
-           st->default_program[i] = SPECIAL_PROGRAM;\r
-       else\r
-           st->default_program[i] = default_program[i];\r
-    }\r
-    j = 0;\r
-    st->opt_ctl[j++] = ctl->id_character;\r
-    for(i = 1; i < ctl->verbosity; i++)\r
-       st->opt_ctl[j++] = 'v';\r
-    for(i = 1; i > ctl->verbosity; i--)\r
-       st->opt_ctl[j++] = 'q';\r
-    if(ctl->trace_playing)\r
-       st->opt_ctl[j++] = 't';\r
-    if(ctl->flags & CTLF_LIST_LOOP)\r
-       st->opt_ctl[j++] = 'l';\r
-    if(ctl->flags & CTLF_LIST_RANDOM)\r
-       st->opt_ctl[j++] = 'r';\r
-    if(ctl->flags & CTLF_LIST_SORT)\r
-       st->opt_ctl[j++] = 's';\r
-    if(ctl->flags & CTLF_AUTOSTART)\r
-       st->opt_ctl[j++] = 'a';\r
-    if(ctl->flags & CTLF_AUTOEXIT)\r
-       st->opt_ctl[j++] = 'x';\r
-    if(ctl->flags & CTLF_DRAG_START)\r
-       st->opt_ctl[j++] = 'd';\r
-    if(ctl->flags & CTLF_AUTOUNIQ)\r
-       st->opt_ctl[j++] = 'u';\r
-    if(ctl->flags & CTLF_AUTOREFINE)\r
-       st->opt_ctl[j++] = 'R';\r
-    if(ctl->flags & CTLF_NOT_CONTINUE)\r
-       st->opt_ctl[j++] = 'C';\r
-    st->opt_ctl[j] = '\0';\r
-    st->opt_realtime_playing = SetFlag(opt_realtime_playing);\r
-    st->reduce_voice_threshold = reduce_voice_threshold;\r
-    j = 0;\r
-    st->opt_playmode[j++] = play_mode->id_character;\r
-    st->opt_playmode[j++] = ((play_mode->encoding & PE_MONO) ? 'M' : 'S');\r
-    st->opt_playmode[j++] = ((play_mode->encoding & PE_SIGNED) ? 's' : 'u');\r
-    st->opt_playmode[j++] = ((play_mode->encoding & PE_16BIT) ? '1' : '8');\r
-    if(play_mode->encoding & PE_ULAW)\r
-       st->opt_playmode[j++] = 'U';\r
-    else if(play_mode->encoding & PE_ALAW)\r
-       st->opt_playmode[j++] = 'A';\r
-    else\r
-       st->opt_playmode[j++] = 'l';\r
-    if(play_mode->encoding & PE_BYTESWAP)\r
-       st->opt_playmode[j++] = 'x';\r
-    st->opt_playmode[j] = '\0';\r
-    strncpy(st->OutputName,OutputName,sizeof(st->OutputName)-1);\r
-    st->voices = SetValue(voices, 1, MAX_VOICES);\r
-       st->auto_reduce_polyphony = auto_reduce_polyphony;\r
-    st->quietchannels = quietchannels;\r
-    snprintf(st->opt_qsize,sizeof(st->opt_qsize),"%s/%s",\r
-            opt_aq_max_buff,opt_aq_fill_buff);\r
-    st->modify_release = SetValue(modify_release, 0, MAX_MREL);\r
-    st->allocate_cache_size = allocate_cache_size;\r
-    st->output_rate = opt_output_rate;\r
-    if(st->output_rate == 0)\r
-    {\r
-       st->output_rate = play_mode->rate;\r
-       if(st->output_rate == 0)\r
-           st->output_rate = DEFAULT_RATE;\r
-    }\r
-    st->output_rate = SetValue(st->output_rate,MIN_OUTPUT_RATE,MAX_OUTPUT_RATE);\r
-    strncpy(st->output_text_code,output_text_code,sizeof(st->output_text_code)-1);\r
-    st->free_instruments_afterwards = free_instruments_afterwards;\r
-    st->opt_wrd[0] = wrdt->id;\r
-    if(wrdt_open_opts)\r
-       strncpy(st->opt_wrd + 1, wrdt_open_opts, sizeof(st->opt_wrd) - 2);\r
-    else\r
-       st->opt_wrd[1] = '\0';\r
-#if defined(__W32__) && defined(SMFCONV)\r
-    st->opt_rcpcv_dll = opt_rcpcv_dll;\r
-#endif /* SMFCONV */\r
-  st->data_block_bits = data_block_bits;\r
-  st->data_block_num = data_block_num;\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-//****************************************************************************/\r
-// ini & config\r
-\r
-static char S_IniFile[MAXPATH + 32];\r
-static char S_timidity_window_inifile[MAXPATH + 32];\r
-static char S_ConfigFile[MAXPATH + 32];\r
-static char S_PlaylistFile[MAXPATH + 32];\r
-static char S_PlaylistHistoryFile[MAXPATH + 32];\r
-static char S_MidiFileOpenDir[MAXPATH + 32];\r
-static char S_ConfigFileOpenDir[MAXPATH + 32];\r
-static char S_PlaylistFileOpenDir[MAXPATH + 32];\r
-static char S_DocFileExt[256];\r
-static char S_OutputName[MAXPATH + 32];\r
-static char *OutputName;\r
-static char S_SystemFont[256];\r
-static char S_PlayerFont[256];\r
-static char S_WrdFont[256];\r
-static char S_DocFont[256];\r
-static char S_ListFont[256];\r
-static char S_TracerFont[256];\r
-static char *SystemFont = S_SystemFont;\r
-char *PlayerFont = S_PlayerFont;\r
-static char *WrdFont = S_WrdFont;\r
-static char *DocFont = S_DocFont;\r
-static char *ListFont = S_ListFont;\r
-static char *TracerFont = S_TracerFont;\r
-\r
-//static HFONT hSystemFont = 0;\r
-//static HFONT hPlayerFont = 0;\r
-//static HFONT hWrdFont = 0;\r
-//static HFONT hDocFont = 0;\r
-//static HFONT hListFont = 0;\r
-//static HFONT hTracerFont = 0;\r
-static int SystemFontSize = 9;\r
-static int PlayerFontSize = 16;\r
-static int WrdFontSize = 16;\r
-static int DocFontSize = 16;\r
-static int ListFontSize = 16;\r
-static int TracerFontSize = 16;\r
-\r
-#define DEFAULT_DOCFILEEXT "doc;txt;hed"\r
-\r
-SETTING_PLAYER *sp_default, *sp_current, *sp_temp;\r
-SETTING_TIMIDITY *st_default, *st_current, *st_temp;\r
-extern char *timidity_window_inifile;\r
-\r
-void w32g_initialize(void)\r
-{\r
-    char buffer[MAXPATH + 1024];\r
-    char *p;\r
-\r
-    hInst = GetModuleHandle(0);\r
-  \r
-    IniFile = S_IniFile;\r
-    ConfigFile = S_ConfigFile;\r
-    PlaylistFile = S_PlaylistFile;\r
-    PlaylistHistoryFile = S_PlaylistHistoryFile;\r
-    MidiFileOpenDir = S_MidiFileOpenDir;\r
-    ConfigFileOpenDir = S_ConfigFileOpenDir;\r
-    PlaylistFileOpenDir = S_PlaylistFileOpenDir;\r
-    DocFileExt = S_DocFileExt;\r
-    OutputName = S_OutputName;\r
-  \r
-    IniFile[0] = '\0';\r
-    ConfigFile[0] = '\0';\r
-    PlaylistFile[0] = '\0';\r
-    PlaylistHistoryFile[0] = '\0';\r
-    MidiFileOpenDir[0] = '\0';\r
-    ConfigFileOpenDir[0] = '\0';\r
-    PlaylistFileOpenDir[0] = '\0';\r
-    OutputName[0] = '\0';\r
-    strcpy(DocFileExt,DEFAULT_DOCFILEEXT);\r
-    strcpy(SystemFont,"\82l\82\96¾\92©");\r
-    strcpy(PlayerFont,"\82l\82\96¾\92©");\r
-    strcpy(WrdFont,"\82l\82\96¾\92©");\r
-    strcpy(DocFont,"\82l\82\96¾\92©");\r
-    strcpy(ListFont,"\82l\82\96¾\92©");\r
-    strcpy(TracerFont,"\82l\82\96¾\92©");\r
-\r
-    if(GetModuleFileName(hInst, buffer, MAXPATH))\r
-    {\r
-       if((p = pathsep_strrchr(buffer)) != NULL)\r
-       {\r
-           p++;\r
-           *p = '\0';\r
-       }\r
-       else\r
-       {\r
-           buffer[0] = '.';\r
-           buffer[1] = PATH_SEP;\r
-           buffer[2] = '\0';\r
-       }\r
-    }\r
-    else\r
-    {\r
-       buffer[0] = '.';\r
-       buffer[1] = PATH_SEP;\r
-       buffer[2] = '\0';\r
-    }\r
-    strncpy(IniFile, buffer, MAXPATH);\r
-    IniFile[MAXPATH] = '\0';\r
-    strcat(IniFile,"timpp32g.ini");\r
-       timidity_window_inifile = S_timidity_window_inifile;\r
-       strncpy(timidity_window_inifile, buffer, 200);\r
-    timidity_window_inifile[200] = '\0';\r
-    strcat(timidity_window_inifile,"timidity_window.ini");\r
-    st_default = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY));\r
-    sp_default = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER));\r
-    st_current = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY));\r
-    sp_current = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER));\r
-    st_temp = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY));\r
-    sp_temp = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER));\r
-\r
-    SaveSettingPlayer(sp_current);\r
-    SaveSettingTiMidity(st_current);\r
-    if(IniVersionCheck())\r
-    {\r
-       LoadIniFile(sp_current, st_current);\r
-       ApplySettingPlayer(sp_current);\r
-       ApplySettingTiMidity(st_current);\r
-       w32g_has_ini_file = 1;\r
-    }\r
-    else\r
-    {\r
-       sprintf(buffer,\r
-"Ini file is not found, or old format is found.\n"\r
-"Do you want to initialize the ini file?\n\n"\r
-"Ini file path: %s",\r
-               IniFile);\r
-\r
-       if(MessageBox(0, buffer, "TiMidity Notice", MB_YESNO) == IDYES)\r
-       {\r
-           SaveIniFile(sp_current, st_current);\r
-           w32g_has_ini_file = 1;\r
-       }\r
-       else\r
-       {\r
-           w32g_has_ini_file = 0;\r
-       }\r
-    }\r
-\r
-    memcpy(sp_default, sp_current, sizeof(SETTING_PLAYER));\r
-    memcpy(st_default, st_current, sizeof(SETTING_TIMIDITY));\r
-\r
-    memcpy(sp_temp, sp_current, sizeof(SETTING_PLAYER));\r
-    memcpy(st_temp, st_current, sizeof(SETTING_TIMIDITY));\r
-\r
-    w32g_i_init();\r
-}\r
-\r
-int IniVersionCheck(void)\r
-{\r
-    char version[INI_MAXLEN];\r
-    if(IniGetKeyStringN(INI_SEC_PLAYER,"IniVersion",version,sizeof(version)-1) == 0 &&\r
-       strcmp(version, IniVersion) == 0)\r
-       return 1; // UnChanged\r
-    return 0;\r
-}\r
-\r
-void BitBltRect(HDC dst, HDC src, RECT *rc)\r
-{\r
-    BitBlt(dst, rc->left, rc->top,\r
-          rc->right - rc->left, rc->bottom - rc->top,\r
-          src, rc->left, rc->top, SRCCOPY);\r
-}\r
-\r
-#if 0\r
-/*\r
- * TmColor\r
- */\r
-TmColors tm_colors[TMCC_SIZE];\r
-\r
-static COLORREF WeakHalfColor(COLORREF fc, COLORREF bc)\r
-{\r
-    return fc*1/3 + bc*2/3;\r
-}\r
-\r
-static COLORREF HalfColor(COLORREF fc, COLORREF bc)\r
-{\r
-    return fc*1/6 + bc*5/6;\r
-}\r
-\r
-void TmInitColor(void)\r
-{\r
-    int i;\r
-\r
-    tm_colors[TMCC_BLACK].color        = TMCCC_BLACK;\r
-    tm_colors[TMCC_WHITE].color        = TMCCC_WHITE;\r
-    tm_colors[TMCC_RED].color  = TMCCC_RED;\r
-    tm_colors[TMCC_BACK].color = TMCCC_BACK;\r
-    tm_colors[TMCC_LOW].color  = TMCCC_LOW;\r
-    tm_colors[TMCC_MIDDLE].color= TMCCC_MIDDLE;\r
-    tm_colors[TMCC_HIGH].color = TMCCC_HIGH;\r
-\r
-    tm_colors[TMCC_FORE_HALF].color = HalfColor(TMCCC_FORE,TMCCC_BACK);\r
-    tm_colors[TMCC_FORE_WEAKHALF].color = WeakHalfColor(TMCCC_FORE,TMCCC_BACK);\r
-    tm_colors[TMCC_LOW_HALF].color = HalfColor(TMCCC_LOW,TMCCC_BACK);\r
-    tm_colors[TMCC_MIDDLE_HALF].color = HalfColor(TMCCC_MIDDLE,TMCCC_BACK);\r
-    tm_colors[TMCC_HIGH_HALF].color = HalfColor(TMCCC_HIGH,TMCCC_BACK);\r
-\r
-    for(i = 0; i < TMCC_SIZE; i++)\r
-    {\r
-       tm_colors[i].pen = CreatePen(PS_SOLID, 1, tm_colors[i].color);\r
-       tm_colors[i].brush = CreateSolidBrush(tm_colors[i].color);\r
-    }\r
-}\r
-\r
-void TmFreeColor(void)\r
-{\r
-    int i;\r
-    for(i = 0; i < TMCC_SIZE; i++)\r
-    {\r
-       if(tm_colors[i].pen != NULL)\r
-       {\r
-           DeleteObject(tm_colors[i].pen);\r
-           DeleteObject(tm_colors[i].brush);\r
-           tm_colors[i].pen = NULL;\r
-       }\r
-    }\r
-}\r
-\r
-void TmFillRect(HDC hdc, RECT *rc, int color)\r
-{\r
-    HPEN hPen = tm_colors[color].pen;\r
-    HBRUSH hBrush = tm_colors[color].brush;\r
-    HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush;\r
-\r
-    hgdiobj_hpen = SelectObject(hdc, hPen);\r
-    hgdiobj_hbrush = SelectObject(hdc, hBrush);\r
-    Rectangle(hdc, rc->left, rc->top, rc->right, rc->bottom);\r
-    SelectObject(hdc, hgdiobj_hpen);\r
-    SelectObject(hdc, hgdiobj_hbrush);\r
-}\r
-#endif\r
-\r
-#ifndef S_ISDIR\r
-#define S_ISDIR(mode)   (((mode)&0xF000) == 0x4000)\r
-#endif /* S_ISDIR */\r
-int is_directory(char *path)\r
-{\r
-       struct stat st;\r
-       if(*path == '@') /* special identifire for playlist file */\r
-               return 0;\r
-       if(stat(path, &st) != -1)\r
-               return S_ISDIR(st.st_mode);\r
-       return GetFileAttributes(path) == FILE_ATTRIBUTE_DIRECTORY;\r
-}\r
-\r
-/* Return: 0: - not modified\r
- *         1: - modified\r
- */\r
-int directory_form(char *buffer)\r
-{\r
-       int len;\r
-\r
-       len = strlen(buffer);\r
-       if(len == 0 || buffer[len - 1] == PATH_SEP)\r
-               return 0;\r
-       if(IS_PATH_SEP(buffer[len - 1]))\r
-               len--;\r
-       buffer[len++] = PATH_SEP;\r
-       buffer[len] = '\0';\r
-       return 1;\r
-}\r
-\r
-/* Return: 0: - not modified\r
- *         1: - modified\r
- */\r
-int nodirectory_form(char *buffer)\r
-{\r
-       char *lastp = buffer + strlen(buffer);\r
-       char *p = lastp;\r
-\r
-       while(p > buffer && IS_PATH_SEP(*(p - 1)))\r
-               p--;\r
-       if(p == lastp)\r
-               return 0;\r
-       *p = '\0';\r
-       return 1;\r
-}\r
-\r
-void SettingCtlFlag(SETTING_TIMIDITY *st, int c, int onoff)\r
-{\r
-    int n;\r
-    char *opt;\r
-    \r
-    opt = st->opt_ctl + 1;\r
-    n = strlen(opt);\r
-    if(onoff)\r
-    {\r
-       if(strchr(opt, c) != NULL)\r
-           return; /* Already set */\r
-       opt[n++] = c;\r
-       opt[n] = '\0';\r
-    }\r
-    else\r
-    {\r
-       char *p;\r
-       if((p = strchr(opt, c)) == NULL)\r
-           return; /* Already removed */\r
-       while(*(p + 1))\r
-       {\r
-           *p = *(p + 1);\r
-           p++;\r
-       }\r
-       *p = '\0';\r
-    }\r
-}\r
-\r
-\r
-\r
-\r
-int IsAvailableFilename(char *filename)\r
-{\r
-       char *p = strrchr(filename,'.');\r
-       if(p == NULL)\r
-               return 0;\r
-       if(     strcasecmp(p,".lzh")==0 ||\r
-               strcasecmp(p,".zip")==0 ||\r
-               strcasecmp(p,".gz")==0  ||\r
-               strcasecmp(p,".mid")==0 ||\r
-               strcasecmp(p,".rcp")==0 ||\r
-               strcasecmp(p,".r36")==0 ||\r
-               strcasecmp(p,".g18")==0 ||\r
-               strcasecmp(p,".g36")==0 ||\r
-               strcasecmp(p,".mod")==0 ||\r
-//             strcasecmp(p,".hqx")==0 ||\r
-               strcasecmp(p,".tar")==0 ||\r
-               strcasecmp(p,".tgz")==0 ||\r
-               strcasecmp(p,".lha")==0 ||\r
-               strcasecmp(p,".mime")==0 ||\r
-               strcasecmp(p,".smf")==0)\r
-               return 1;\r
-//     if(url_check_type(filename)!=-1)\r
-//             return 1;\r
-       return 0;\r
-}\r
-\r
-/* ScanDirectoryFiles() works like UNIX find. */\r
-#define SCANDIR_MAX_DEPTH 32\r
-void ScanDirectoryFiles(char *basedir,\r
-                                               int (* file_proc)(char *pathname, /* (const) */\r
-                                                                                 void *user_val),\r
-                                               void *user_val)\r
-{\r
-       char baselen;\r
-       URL dir;\r
-\r
-       static int depth = 0;\r
-    static int stop_flag;      /* Stop scanning if true */\r
-    static int error_disp;     /* Whether error is displayed or not */\r
-       static char pathbuf[MAXPATH]; /* pathname buffer */\r
-\r
-       if(depth == 0) /* Initialize variables at first recursive */\r
-       {\r
-               stop_flag = 0;\r
-               error_disp = 0;\r
-               strcpy(pathbuf, basedir);\r
-       }\r
-       else if(depth > SCANDIR_MAX_DEPTH) /* Avoid infinite recursive */\r
-       {\r
-               if(!error_disp)\r
-               {\r
-                       /* Display this message at once */\r
-                       ctl->cmsg(CMSG_WARNING, VERB_NORMAL,\r
-                                         "%s: Directory is too deep",\r
-                                         basedir);\r
-                       error_disp = 1;\r
-               }\r
-               return; /* Skip scanning this directory */\r
-       }\r
-\r
-       directory_form(pathbuf);\r
-       baselen = strlen(pathbuf);\r
-       if(baselen > sizeof(pathbuf) - 16)\r
-       {\r
-               /* Ignore too long file name */\r
-               return;\r
-       }\r
-\r
-       if((dir = url_dir_open(pathbuf)) == NULL)\r
-       {\r
-           ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: Can't open directory", pathbuf);\r
-               return;\r
-       }\r
-\r
-       if(file_proc(pathbuf, user_val))\r
-       {\r
-           stop_flag = 1; /* Terminate */\r
-               return;\r
-       }\r
-\r
-       while(!stop_flag &&\r
-                 url_gets(dir, pathbuf + baselen, sizeof(pathbuf) - baselen - 1))\r
-       {\r
-               if(strcmp(pathbuf + baselen, ".") == 0 ||\r
-                  strcmp(pathbuf + baselen, "..") == 0)\r
-                       continue;\r
-               if(file_proc(pathbuf, user_val))\r
-               {\r
-                       stop_flag = 1; /* Terminate */\r
-                       break;\r
-               }\r
-               if(is_directory(pathbuf))\r
-               {\r
-                       /* into subdirectory */\r
-                       depth++;\r
-                       ScanDirectoryFiles(pathbuf, file_proc, user_val);\r
-                       depth--;\r
-               }\r
-       }\r
-       url_close(dir);\r
-}\r
-\r
-#define EXPANDDIR_MAX_SIZE  100000     /* Limit of total bytes of the file names */\r
-static int expand_dir_proc(char *filename, void *v)\r
-{\r
-       void **user_val = (void **)v;\r
-       StringTable *st = (StringTable *)user_val[0];\r
-       int *total_size = (int *)user_val[1];\r
-       char *startdir  = (char *)user_val[2];\r
-\r
-       if(IsAvailableFilename(filename))\r
-       {\r
-               if(*total_size > EXPANDDIR_MAX_SIZE)\r
-               {\r
-                       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: There are too many files.",\r
-                                         startdir);\r
-                       return 1; /* Terminate */\r
-               }\r
-               put_string_table(st, filename, strlen(filename));\r
-               *total_size += strlen(filename);\r
-       }\r
-       return 0;\r
-}\r
-\r
-char **FilesExpandDir(int *p_nfiles, char **files)\r
-{\r
-       StringTable st;\r
-       int i;\r
-\r
-       init_string_table(&st);\r
-       for(i = 0; i < *p_nfiles; i++)\r
-       {\r
-               void *user_val[3];\r
-               int total_size;\r
-\r
-               total_size = 0;\r
-               user_val[0] = &st;\r
-               user_val[1] = &total_size;\r
-               user_val[2] = files[i];\r
-\r
-               if(is_directory(files[i]))\r
-                       ScanDirectoryFiles(files[i], expand_dir_proc, user_val);\r
-               else\r
-               {\r
-                       int len = strlen(files[i]);\r
-                       put_string_table(&st, files[i], len);\r
-               }\r
-       }\r
-       *p_nfiles = st.nstring;\r
-    return make_string_array(&st);\r
-\r
-}\r
+       st->opt_surround_chorus = opt_surround_chorus;\r
+       st->opt_tva_attack = opt_tva_attack;\r
+       st->opt_tva_decay = opt_tva_decay;\r
+       st->opt_tva_release = opt_tva_release;\r
+       st->opt_delay_control = opt_delay_control;\r
+       st->opt_resonance = opt_resonance;\r
+       st->opt_env_attack = opt_env_attack;\r
+       st->opt_velocity_table = opt_velocity_table;
+    st->noise_sharp_type = noise_sharp_type;
+    st->opt_evil_mode = SetFlag(opt_evil_mode);
+    st->adjust_panning_immediately = SetFlag(adjust_panning_immediately);
+    st->fast_decay = SetFlag(fast_decay);
+#ifdef SUPPORT_SOUNDSPEC
+    st->view_soundspec_flag = SetFlag(view_soundspec_flag);
+    st->spectrigram_update_sec = spectrigram_update_sec;
+#endif
+    for(i = 0; i < MAX_CHANNELS; i++)
+    {
+       if(def_instr_name[0])
+           st->default_program[i] = SPECIAL_PROGRAM;
+       else
+           st->default_program[i] = default_program[i];
+    }
+    j = 0;
+    st->opt_ctl[j++] = ctl->id_character;
+    for(i = 1; i < ctl->verbosity; i++)
+       st->opt_ctl[j++] = 'v';
+    for(i = 1; i > ctl->verbosity; i--)
+       st->opt_ctl[j++] = 'q';
+    if(ctl->trace_playing)
+       st->opt_ctl[j++] = 't';
+    if(ctl->flags & CTLF_LIST_LOOP)
+       st->opt_ctl[j++] = 'l';
+    if(ctl->flags & CTLF_LIST_RANDOM)
+       st->opt_ctl[j++] = 'r';
+    if(ctl->flags & CTLF_LIST_SORT)
+       st->opt_ctl[j++] = 's';
+    if(ctl->flags & CTLF_AUTOSTART)
+       st->opt_ctl[j++] = 'a';
+    if(ctl->flags & CTLF_AUTOEXIT)
+       st->opt_ctl[j++] = 'x';
+    if(ctl->flags & CTLF_DRAG_START)
+       st->opt_ctl[j++] = 'd';
+    if(ctl->flags & CTLF_AUTOUNIQ)
+       st->opt_ctl[j++] = 'u';
+    if(ctl->flags & CTLF_AUTOREFINE)
+       st->opt_ctl[j++] = 'R';
+    if(ctl->flags & CTLF_NOT_CONTINUE)
+       st->opt_ctl[j++] = 'C';
+    st->opt_ctl[j] = '\0';
+    st->opt_realtime_playing = SetFlag(opt_realtime_playing);
+    st->reduce_voice_threshold = reduce_voice_threshold;
+    j = 0;
+    st->opt_playmode[j++] = play_mode->id_character;
+    st->opt_playmode[j++] = ((play_mode->encoding & PE_MONO) ? 'M' : 'S');
+    st->opt_playmode[j++] = ((play_mode->encoding & PE_SIGNED) ? 's' : 'u');
+    st->opt_playmode[j++] = ((play_mode->encoding & PE_16BIT) ? '1' : '8');
+    if(play_mode->encoding & PE_ULAW)
+       st->opt_playmode[j++] = 'U';
+    else if(play_mode->encoding & PE_ALAW)
+       st->opt_playmode[j++] = 'A';
+    else
+       st->opt_playmode[j++] = 'l';
+    if(play_mode->encoding & PE_BYTESWAP)
+       st->opt_playmode[j++] = 'x';
+    st->opt_playmode[j] = '\0';
+    strncpy(st->OutputName,OutputName,sizeof(st->OutputName)-1);
+       strncpy(st->OutputDirName,w32g_output_dir,MAXPATH);
+       st->OutputDirName[MAXPATH-1] = '\0';
+       st->auto_output_mode = w32g_auto_output_mode;
+    st->voices = SetValue(voices, 1, MAX_VOICES);
+       st->auto_reduce_polyphony = auto_reduce_polyphony;
+    st->quietchannels = quietchannels;
+    snprintf(st->opt_qsize,sizeof(st->opt_qsize),"%s/%s",
+            opt_aq_max_buff,opt_aq_fill_buff);
+    st->modify_release = SetValue(modify_release, 0, MAX_MREL);
+    st->allocate_cache_size = allocate_cache_size;
+    st->output_rate = opt_output_rate;
+    if(st->output_rate == 0)
+    {
+       st->output_rate = play_mode->rate;
+       if(st->output_rate == 0)
+           st->output_rate = DEFAULT_RATE;
+    }
+    st->output_rate = SetValue(st->output_rate,MIN_OUTPUT_RATE,MAX_OUTPUT_RATE);
+    strncpy(st->output_text_code,output_text_code,sizeof(st->output_text_code)-1);
+    st->free_instruments_afterwards = free_instruments_afterwards;
+    st->opt_wrd[0] = wrdt->id;
+    if(wrdt_open_opts)
+       strncpy(st->opt_wrd + 1, wrdt_open_opts, sizeof(st->opt_wrd) - 2);
+    else
+       st->opt_wrd[1] = '\0';
+#if defined(__W32__) && defined(SMFCONV)
+    st->opt_rcpcv_dll = opt_rcpcv_dll;
+#endif /* SMFCONV */
+  st->data_block_bits = data_block_bits;
+  st->data_block_num = data_block_num;
+}
+
+
+
+
+
+
+//****************************************************************************/
+// ini & config
+
+static char S_IniFile[MAXPATH + 32];
+static char S_timidity_window_inifile[MAXPATH + 32];
+static char S_timidity_output_inifile[MAXPATH + 32];
+static char S_ConfigFile[MAXPATH + 32];
+static char S_PlaylistFile[MAXPATH + 32];
+static char S_PlaylistHistoryFile[MAXPATH + 32];
+static char S_MidiFileOpenDir[MAXPATH + 32];
+static char S_ConfigFileOpenDir[MAXPATH + 32];
+static char S_PlaylistFileOpenDir[MAXPATH + 32];
+static char S_DocFileExt[256];
+static char S_OutputName[MAXPATH + 32];
+static char *OutputName;
+static char S_w32g_output_dir[1024 + 32];
+static char S_SystemFont[256];
+static char S_PlayerFont[256];
+static char S_WrdFont[256];
+static char S_DocFont[256];
+static char S_ListFont[256];
+static char S_TracerFont[256];
+static char *SystemFont = S_SystemFont;
+char *PlayerFont = S_PlayerFont;
+static char *WrdFont = S_WrdFont;
+static char *DocFont = S_DocFont;
+static char *ListFont = S_ListFont;
+static char *TracerFont = S_TracerFont;
+
+//static HFONT hSystemFont = 0;
+//static HFONT hPlayerFont = 0;
+//static HFONT hWrdFont = 0;
+//static HFONT hDocFont = 0;
+//static HFONT hListFont = 0;
+//static HFONT hTracerFont = 0;
+static int SystemFontSize = 9;
+static int PlayerFontSize = 16;
+static int WrdFontSize = 16;
+static int DocFontSize = 16;
+static int ListFontSize = 16;
+static int TracerFontSize = 16;
+
+#define DEFAULT_DOCFILEEXT "doc;txt;hed"
+
+SETTING_PLAYER *sp_default, *sp_current, *sp_temp;
+SETTING_TIMIDITY *st_default, *st_current, *st_temp;
+char *timidity_window_inifile;
+char *timidity_output_inifile;
+
+#ifdef AU_GOGO
+extern int gogo_ConfigDialogInfoInit(void);
+extern int gogo_ConfigDialogInfoSaveINI(void);
+extern int gogo_ConfigDialogInfoLoadINI(void);
+#endif
+#ifdef AU_VORBIS
+extern int vorbis_ConfigDialogInfoInit(void);
+extern int vorbis_ConfigDialogInfoSaveINI(void);
+extern int vorbis_ConfigDialogInfoLoadINI(void);
+#endif
+
+void w32g_initialize(void)
+{
+    char buffer[MAXPATH + 1024];
+    char *p;
+
+    hInst = GetModuleHandle(0);
+  
+    IniFile = S_IniFile;
+    ConfigFile = S_ConfigFile;
+    PlaylistFile = S_PlaylistFile;
+    PlaylistHistoryFile = S_PlaylistHistoryFile;
+    MidiFileOpenDir = S_MidiFileOpenDir;
+    ConfigFileOpenDir = S_ConfigFileOpenDir;
+    PlaylistFileOpenDir = S_PlaylistFileOpenDir;
+    DocFileExt = S_DocFileExt;
+    OutputName = S_OutputName;
+       w32g_output_dir = S_w32g_output_dir;
+  
+    IniFile[0] = '\0';
+    ConfigFile[0] = '\0';
+    PlaylistFile[0] = '\0';
+    PlaylistHistoryFile[0] = '\0';
+    MidiFileOpenDir[0] = '\0';
+    ConfigFileOpenDir[0] = '\0';
+    PlaylistFileOpenDir[0] = '\0';
+    OutputName[0] = '\0';
+       w32g_output_dir[0] = '\0';
+
+    strcpy(DocFileExt,DEFAULT_DOCFILEEXT);
+    strcpy(SystemFont,"\82l\82\96¾\92©");
+    strcpy(PlayerFont,"\82l\82\96¾\92©");
+    strcpy(WrdFont,"\82l\82\96¾\92©");
+    strcpy(DocFont,"\82l\82\96¾\92©");
+    strcpy(ListFont,"\82l\82\96¾\92©");
+    strcpy(TracerFont,"\82l\82\96¾\92©");
+
+    if(GetModuleFileName(hInst, buffer, MAXPATH))
+    {
+       if((p = pathsep_strrchr(buffer)) != NULL)
+       {
+           p++;
+           *p = '\0';
+       }
+       else
+       {
+           buffer[0] = '.';
+           buffer[1] = PATH_SEP;
+           buffer[2] = '\0';
+       }
+    }
+    else
+    {
+       buffer[0] = '.';
+       buffer[1] = PATH_SEP;
+       buffer[2] = '\0';
+    }
+       // timpp32g.ini
+    strncpy(IniFile, buffer, MAXPATH);
+    IniFile[MAXPATH] = '\0';
+    strcat(IniFile,"timpp32g.ini");
+       // timidity_window.ini
+       timidity_window_inifile = S_timidity_window_inifile;
+       strncpy(timidity_window_inifile, buffer, 200);
+    timidity_window_inifile[200] = '\0';
+    strcat(timidity_window_inifile,"timidity_window.ini");
+       // timidity_output.ini
+       timidity_output_inifile = S_timidity_output_inifile;
+       strncpy(timidity_output_inifile, buffer, 200);
+    timidity_output_inifile[200] = '\0';
+    strcat(timidity_output_inifile,"timidity_output.ini");
+       //
+    st_default = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY));
+    sp_default = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER));
+    st_current = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY));
+    sp_current = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER));
+    st_temp = (SETTING_TIMIDITY *)safe_malloc(sizeof(SETTING_TIMIDITY));
+    sp_temp = (SETTING_PLAYER *)safe_malloc(sizeof(SETTING_PLAYER));
+
+       {
+               DWORD dwRes;
+#ifdef AU_GOGO
+               gogo_ConfigDialogInfoInit();
+#endif
+#ifdef AU_VORBIS
+               vorbis_ConfigDialogInfoInit();
+#endif
+               dwRes = GetFileAttributes(timidity_output_inifile);
+               if(dwRes==0xFFFFFFFF || dwRes & FILE_ATTRIBUTE_DIRECTORY){
+#ifdef AU_GOGO
+                       gogo_ConfigDialogInfoSaveINI();
+#endif
+#ifdef AU_VORBIS
+                       vorbis_ConfigDialogInfoSaveINI();
+#endif
+               } else {
+#ifdef AU_GOGO
+                       gogo_ConfigDialogInfoLoadINI();
+#endif
+#ifdef AU_VORBIS
+                       vorbis_ConfigDialogInfoLoadINI();
+#endif
+               }
+       }
+
+    SaveSettingPlayer(sp_current);
+    SaveSettingTiMidity(st_current);
+    if(IniVersionCheck())
+    {
+       LoadIniFile(sp_current, st_current);
+       ApplySettingPlayer(sp_current);
+       ApplySettingTiMidity(st_current);
+       w32g_has_ini_file = 1;
+    }
+    else
+    {
+       sprintf(buffer,
+"Ini file is not found, or old format is found.\n"
+"Do you want to initialize the ini file?\n\n"
+"Ini file path: %s",
+               IniFile);
+
+       if(MessageBox(0, buffer, "TiMidity Notice", MB_YESNO) == IDYES)
+       {
+           SaveIniFile(sp_current, st_current);
+           w32g_has_ini_file = 1;
+       }
+       else
+       {
+           w32g_has_ini_file = 0;
+       }
+    }
+
+    memcpy(sp_default, sp_current, sizeof(SETTING_PLAYER));
+    memcpy(st_default, st_current, sizeof(SETTING_TIMIDITY));
+
+    memcpy(sp_temp, sp_current, sizeof(SETTING_PLAYER));
+    memcpy(st_temp, st_current, sizeof(SETTING_TIMIDITY));
+
+    w32g_i_init();
+}
+
+int IniVersionCheck(void)
+{
+    char version[INI_MAXLEN];
+    if(IniGetKeyStringN(INI_SEC_PLAYER,"IniVersion",version,sizeof(version)-1) == 0 &&
+       strcmp(version, IniVersion) == 0)
+       return 1; // UnChanged
+    return 0;
+}
+
+void BitBltRect(HDC dst, HDC src, RECT *rc)
+{
+    BitBlt(dst, rc->left, rc->top,
+          rc->right - rc->left, rc->bottom - rc->top,
+          src, rc->left, rc->top, SRCCOPY);
+}
+
+#if 0
+/*
+ * TmColor
+ */
+TmColors tm_colors[TMCC_SIZE];
+
+static COLORREF WeakHalfColor(COLORREF fc, COLORREF bc)
+{
+    return fc*1/3 + bc*2/3;
+}
+
+static COLORREF HalfColor(COLORREF fc, COLORREF bc)
+{
+    return fc*1/6 + bc*5/6;
+}
+
+void TmInitColor(void)
+{
+    int i;
+
+    tm_colors[TMCC_BLACK].color        = TMCCC_BLACK;
+    tm_colors[TMCC_WHITE].color        = TMCCC_WHITE;
+    tm_colors[TMCC_RED].color  = TMCCC_RED;
+    tm_colors[TMCC_BACK].color = TMCCC_BACK;
+    tm_colors[TMCC_LOW].color  = TMCCC_LOW;
+    tm_colors[TMCC_MIDDLE].color= TMCCC_MIDDLE;
+    tm_colors[TMCC_HIGH].color = TMCCC_HIGH;
+
+    tm_colors[TMCC_FORE_HALF].color = HalfColor(TMCCC_FORE,TMCCC_BACK);
+    tm_colors[TMCC_FORE_WEAKHALF].color = WeakHalfColor(TMCCC_FORE,TMCCC_BACK);
+    tm_colors[TMCC_LOW_HALF].color = HalfColor(TMCCC_LOW,TMCCC_BACK);
+    tm_colors[TMCC_MIDDLE_HALF].color = HalfColor(TMCCC_MIDDLE,TMCCC_BACK);
+    tm_colors[TMCC_HIGH_HALF].color = HalfColor(TMCCC_HIGH,TMCCC_BACK);
+
+    for(i = 0; i < TMCC_SIZE; i++)
+    {
+       tm_colors[i].pen = CreatePen(PS_SOLID, 1, tm_colors[i].color);
+       tm_colors[i].brush = CreateSolidBrush(tm_colors[i].color);
+    }
+}
+
+void TmFreeColor(void)
+{
+    int i;
+    for(i = 0; i < TMCC_SIZE; i++)
+    {
+       if(tm_colors[i].pen != NULL)
+       {
+           DeleteObject(tm_colors[i].pen);
+           DeleteObject(tm_colors[i].brush);
+           tm_colors[i].pen = NULL;
+       }
+    }
+}
+
+void TmFillRect(HDC hdc, RECT *rc, int color)
+{
+    HPEN hPen = tm_colors[color].pen;
+    HBRUSH hBrush = tm_colors[color].brush;
+    HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush;
+
+    hgdiobj_hpen = SelectObject(hdc, hPen);
+    hgdiobj_hbrush = SelectObject(hdc, hBrush);
+    Rectangle(hdc, rc->left, rc->top, rc->right, rc->bottom);
+    SelectObject(hdc, hgdiobj_hpen);
+    SelectObject(hdc, hgdiobj_hbrush);
+}
+#endif
+
+#ifndef S_ISDIR
+#define S_ISDIR(mode)   (((mode)&0xF000) == 0x4000)
+#endif /* S_ISDIR */
+int is_directory(char *path)
+{
+       struct stat st;
+       if(*path == '@') /* special identifire for playlist file */
+               return 0;
+       if(stat(path, &st) != -1)
+               return S_ISDIR(st.st_mode);
+       return GetFileAttributes(path) == FILE_ATTRIBUTE_DIRECTORY;
+}
+
+/* Return: 0: - not modified
+ *         1: - modified
+ */
+int directory_form(char *buffer)
+{
+       int len;
+
+       len = strlen(buffer);
+       if(len == 0 || buffer[len - 1] == PATH_SEP)
+               return 0;
+       if(IS_PATH_SEP(buffer[len - 1]))
+               len--;
+       buffer[len++] = PATH_SEP;
+       buffer[len] = '\0';
+       return 1;
+}
+
+/* Return: 0: - not modified
+ *         1: - modified
+ */
+int nodirectory_form(char *buffer)
+{
+       char *lastp = buffer + strlen(buffer);
+       char *p = lastp;
+
+       while(p > buffer && IS_PATH_SEP(*(p - 1)))
+               p--;
+       if(p == lastp)
+               return 0;
+       *p = '\0';
+       return 1;
+}
+
+void SettingCtlFlag(SETTING_TIMIDITY *st, int c, int onoff)
+{
+    int n;
+    char *opt;
+    
+    opt = st->opt_ctl + 1;
+    n = strlen(opt);
+    if(onoff)
+    {
+       if(strchr(opt, c) != NULL)
+           return; /* Already set */
+       opt[n++] = c;
+       opt[n] = '\0';
+    }
+    else
+    {
+       char *p;
+       if((p = strchr(opt, c)) == NULL)
+           return; /* Already removed */
+       while(*(p + 1))
+       {
+           *p = *(p + 1);
+           p++;
+       }
+       *p = '\0';
+    }
+}
+
+
+
+
+int IsAvailableFilename(char *filename)
+{
+       char *p = strrchr(filename,'.');
+       if(p == NULL)
+               return 0;
+       if(     strcasecmp(p,".lzh")==0 ||
+               strcasecmp(p,".zip")==0 ||
+               strcasecmp(p,".gz")==0  ||
+               strcasecmp(p,".mid")==0 ||
+               strcasecmp(p,".rcp")==0 ||
+               strcasecmp(p,".r36")==0 ||
+               strcasecmp(p,".g18")==0 ||
+               strcasecmp(p,".g36")==0 ||
+               strcasecmp(p,".mod")==0 ||
+//             strcasecmp(p,".hqx")==0 ||
+               strcasecmp(p,".tar")==0 ||
+               strcasecmp(p,".tgz")==0 ||
+               strcasecmp(p,".lha")==0 ||
+               strcasecmp(p,".mime")==0 ||
+               strcasecmp(p,".smf")==0)
+               return 1;
+//     if(url_check_type(filename)!=-1)
+//             return 1;
+       return 0;
+}
+
+/* ScanDirectoryFiles() works like UNIX find. */
+#define SCANDIR_MAX_DEPTH 32
+void ScanDirectoryFiles(char *basedir,
+                                               int (* file_proc)(char *pathname, /* (const) */
+                                                                                 void *user_val),
+                                               void *user_val)
+{
+       char baselen;
+       URL dir;
+
+       static int depth = 0;
+    static int stop_flag;      /* Stop scanning if true */
+    static int error_disp;     /* Whether error is displayed or not */
+       static char pathbuf[MAXPATH]; /* pathname buffer */
+
+       if(depth == 0) /* Initialize variables at first recursive */
+       {
+               stop_flag = 0;
+               error_disp = 0;
+               strcpy(pathbuf, basedir);
+       }
+       else if(depth > SCANDIR_MAX_DEPTH) /* Avoid infinite recursive */
+       {
+               if(!error_disp)
+               {
+                       /* Display this message at once */
+                       ctl->cmsg(CMSG_WARNING, VERB_NORMAL,
+                                         "%s: Directory is too deep",
+                                         basedir);
+                       error_disp = 1;
+               }
+               return; /* Skip scanning this directory */
+       }
+
+       directory_form(pathbuf);
+       baselen = strlen(pathbuf);
+       if(baselen > sizeof(pathbuf) - 16)
+       {
+               /* Ignore too long file name */
+               return;
+       }
+
+       if((dir = url_dir_open(pathbuf)) == NULL)
+       {
+           ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: Can't open directory", pathbuf);
+               return;
+       }
+
+       if(file_proc(pathbuf, user_val))
+       {
+           stop_flag = 1; /* Terminate */
+               return;
+       }
+
+       while(!stop_flag &&
+                 url_gets(dir, pathbuf + baselen, sizeof(pathbuf) - baselen - 1))
+       {
+               if(strcmp(pathbuf + baselen, ".") == 0 ||
+                  strcmp(pathbuf + baselen, "..") == 0)
+                       continue;
+               if(file_proc(pathbuf, user_val))
+               {
+                       stop_flag = 1; /* Terminate */
+                       break;
+               }
+               if(is_directory(pathbuf))
+               {
+                       /* into subdirectory */
+                       depth++;
+                       ScanDirectoryFiles(pathbuf, file_proc, user_val);
+                       depth--;
+               }
+       }
+       url_close(dir);
+}
+
+#define EXPANDDIR_MAX_SIZE  100000     /* Limit of total bytes of the file names */
+static int expand_dir_proc(char *filename, void *v)
+{
+       void **user_val = (void **)v;
+       StringTable *st = (StringTable *)user_val[0];
+       int *total_size = (int *)user_val[1];
+       char *startdir  = (char *)user_val[2];
+
+       if(IsAvailableFilename(filename))
+       {
+               if(*total_size > EXPANDDIR_MAX_SIZE)
+               {
+                       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: There are too many files.",
+                                         startdir);
+                       return 1; /* Terminate */
+               }
+               put_string_table(st, filename, strlen(filename));
+               *total_size += strlen(filename);
+       }
+       return 0;
+}
+
+char **FilesExpandDir(int *p_nfiles, char **files)
+{
+       StringTable st;
+       int i;
+
+       init_string_table(&st);
+       for(i = 0; i < *p_nfiles; i++)
+       {
+               void *user_val[3];
+               int total_size;
+
+               total_size = 0;
+               user_val[0] = &st;
+               user_val[1] = &total_size;
+               user_val[2] = files[i];
+
+               if(is_directory(files[i]))
+                       ScanDirectoryFiles(files[i], expand_dir_proc, user_val);
+               else
+               {
+                       int len = strlen(files[i]);
+                       put_string_table(&st, files[i], len);
+               }
+       }
+       *p_nfiles = st.nstring;
+    return make_string_array(&st);
+
+}
index 3691867..17137dd 100644 (file)
-/*\r
-    TiMidity++ -- MIDI to WAVE converter and player\r
-    Copyright (C) 1999-2001 Masanao Izumo <mo@goice.co.jp>\r
-    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>\r
-\r
-    This program is free software; you can redistribute it and/or modify\r
-    it under the terms of the GNU General Public License as published by\r
-    the Free Software Foundation; either version 2 of the License, or\r
-    (at your option) any later version.\r
-\r
-    This program is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-    GNU General Public License for more details.\r
-\r
-    You should have received a copy of the GNU General Public License\r
-    along with this program; if not, write to the Free Software\r
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-*/\r
-\r
-#ifndef ___W32G_UTL_H_\r
-#define ___W32G_UTL_H_\r
-\r
-// ini & config\r
-#define IniVersion "2.2"\r
-typedef struct SETTING_PLAYER_ {\r
-// Main Window\r
-       int InitMinimizeFlag;\r
-// SubWindow Starting Create Flag\r
-       int DebugWndStartFlag;\r
-       int ConsoleWndStartFlag;\r
-       int ListWndStartFlag;\r
-       int TracerWndStartFlag;\r
-       int DocWndStartFlag;\r
-       int WrdWndStartFlag;\r
-// SubWindow Starting Valid Flag\r
-       int DebugWndFlag;\r
-       int ConsoleWndFlag;\r
-       int ListWndFlag;\r
-       int TracerWndFlag;\r
-       int DocWndFlag;\r
-       int WrdWndFlag;\r
-       int SoundSpecWndFlag;\r
-// SubWindow Max Numer\r
-       int SubWindowMax;\r
-// Default File\r
-       char ConfigFile[MAXPATH + 32];\r
-       char PlaylistFile[MAXPATH + 32];\r
-       char PlaylistHistoryFile[MAXPATH + 32];\r
-// Default Dir\r
-       char MidiFileOpenDir[MAXPATH + 32];\r
-       char ConfigFileOpenDir[MAXPATH + 32];\r
-       char PlaylistFileOpenDir[MAXPATH + 32];\r
-// Thread Priority\r
-       int PlayerThreadPriority;\r
-       int GUIThreadPriority;\r
-// Font\r
-       char SystemFont[256];\r
-       char PlayerFont[256];\r
-       char WrdFont[256];\r
-       char DocFont[256];\r
-       char ListFont[256];\r
-       char TracerFont[256];\r
-       int SystemFontSize;\r
-       int PlayerFontSize;\r
-       int WrdFontSize;\r
-       int DocFontSize;\r
-       int ListFontSize;\r
-       int TracerFontSize;\r
-// Misc.\r
-       int WrdGraphicFlag;\r
-       int TraceGraphicFlag;\r
-       int DocMaxSize;\r
-       char DocFileExt[256];\r
-// End.\r
-       int PlayerLanguage;\r
-       int DocWndIndependent; \r
-       int SeachDirRecursive;\r
-       int IniFileAutoSave;\r
-       int SecondMode;\r
-// End.\r
-} SETTING_PLAYER;\r
-\r
-typedef struct SETTING_TIMIDITY_ {\r
-    // Parameter from command line options.\r
-\r
-    int32 amplification;       // A\r
-    int antialiasing_allowed;  // a\r
-    int buffer_fragments;      // B\r
-    int32 control_ratio;       // C\r
-                               // c (ignore)\r
-    ChannelBitMask default_drumchannels, default_drumchannel_mask; // D\r
-                               // d (ignore)\r
-\r
-                               // E...\r
-    int opt_modulation_wheel;  // E w/W\r
-    int opt_portamento;                // E p/P\r
-    int opt_nrpn_vibrato;      // E v/V\r
-    int opt_channel_pressure;  // E s/S\r
-    int opt_trace_text_meta_event; // E t/T\r
-    int opt_overlap_voice_allow;// E o/O\r
-    int opt_default_mid;       // E mXX\r
-    int default_tonebank;      // E b\r
-    int special_tonebank;      // E B\r
-    int effect_lr_mode;                // E Fdelay\r
-    int effect_lr_delay_msec;  // E Fdelay\r
-    int opt_reverb_control;    // E Freverb\r
-    int opt_chorus_control;    // E Fchorus\r
+/*
+    TiMidity++ -- MIDI to WAVE converter and player
+    Copyright (C) 1999-2001 Masanao Izumo <mo@goice.co.jp>
+    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>
+
+    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.
+*/
+
+#ifndef ___W32G_UTL_H_
+#define ___W32G_UTL_H_
+
+// ini & config
+#define IniVersion "2.2"
+typedef struct SETTING_PLAYER_ {
+// Main Window
+       int InitMinimizeFlag;
+// SubWindow Starting Create Flag
+       int DebugWndStartFlag;
+       int ConsoleWndStartFlag;
+       int ListWndStartFlag;
+       int TracerWndStartFlag;
+       int DocWndStartFlag;
+       int WrdWndStartFlag;
+// SubWindow Starting Valid Flag
+       int DebugWndFlag;
+       int ConsoleWndFlag;
+       int ListWndFlag;
+       int TracerWndFlag;
+       int DocWndFlag;
+       int WrdWndFlag;
+       int SoundSpecWndFlag;
+// SubWindow Max Numer
+       int SubWindowMax;
+// Default File
+       char ConfigFile[MAXPATH + 32];
+       char PlaylistFile[MAXPATH + 32];
+       char PlaylistHistoryFile[MAXPATH + 32];
+// Default Dir
+       char MidiFileOpenDir[MAXPATH + 32];
+       char ConfigFileOpenDir[MAXPATH + 32];
+       char PlaylistFileOpenDir[MAXPATH + 32];
+// Thread Priority
+       int PlayerThreadPriority;
+       int GUIThreadPriority;
+// Font
+       char SystemFont[256];
+       char PlayerFont[256];
+       char WrdFont[256];
+       char DocFont[256];
+       char ListFont[256];
+       char TracerFont[256];
+       int SystemFontSize;
+       int PlayerFontSize;
+       int WrdFontSize;
+       int DocFontSize;
+       int ListFontSize;
+       int TracerFontSize;
+// Misc.
+       int WrdGraphicFlag;
+       int TraceGraphicFlag;
+       int DocMaxSize;
+       char DocFileExt[256];
+// End.
+       int PlayerLanguage;
+       int DocWndIndependent; 
+       int DocWndAutoPopup; 
+       int SeachDirRecursive;
+       int IniFileAutoSave;
+       int SecondMode;
+// End.
+} SETTING_PLAYER;
+
+typedef struct SETTING_TIMIDITY_ {
+    // Parameter from command line options.
+
+    int32 amplification;       // A
+    int antialiasing_allowed;  // a
+    int buffer_fragments;      // B
+    int32 control_ratio;       // C
+                               // c (ignore)
+    ChannelBitMask default_drumchannels, default_drumchannel_mask; // D
+                               // d (ignore)
+
+                               // E...
+    int opt_modulation_wheel;  // E w/W
+    int opt_portamento;                // E p/P
+    int opt_nrpn_vibrato;      // E v/V
+    int opt_channel_pressure;  // E s/S
+    int opt_trace_text_meta_event; // E t/T
+    int opt_overlap_voice_allow;// E o/O
+    int opt_default_mid;       // E mXX
+    int default_tonebank;      // E b
+    int special_tonebank;      // E B
+    int effect_lr_mode;                // E Fdelay
+    int effect_lr_delay_msec;  // E Fdelay
+    int opt_reverb_control;    // E Freverb
+    int opt_chorus_control;    // E Fchorus
     int noise_sharp_type;      // E Fns\r
-\r
-    int opt_evil_mode;         // e\r
-    int adjust_panning_immediately; // F\r
-    int fast_decay;            // f\r
-#ifdef SUPPORT_SOUNDSPEC\r
-    int view_soundspec_flag;   // g\r
-    double spectrogram_update_sec; // g\r
-#endif\r
-                               // h (ignore)\r
-    int default_program[MAX_CHANNELS]; // I\r
-    char opt_ctl[16];          // i\r
-    int opt_realtime_playing;  // j\r
-    int reduce_voice_threshold; // k\r
-                               // L (ignore)\r
-    char opt_playmode[16];     // O\r
-    char OutputName[MAXPATH + 32]; // o : string\r
-                               // P (ignore)\r
-    int voices;                        // p\r
-    int auto_reduce_polyphony;  // pa\r
-    ChannelBitMask quietchannels; // Q\r
-    char opt_qsize[16];                // q\r
-    int32 modify_release;      // R\r
-    int32 allocate_cache_size; // S\r
-    int output_rate;           // s\r
-    char output_text_code[16]; // t\r
-    int free_instruments_afterwards; // U\r
-    char opt_wrd[16];          // W\r
-#if defined(__W32__) && defined(SMFCONV)\r
-    int opt_rcpcv_dll;         // wr, wR\r
-#endif\r
-                               // x (ignore)\r
-                               // Z (ignore)\r
-    /* for w32g_a.c */\r
-    int data_block_bits;\r
-    int data_block_num;\r
-//??    int waveout_data_block_size;\r
-} SETTING_TIMIDITY;\r
-\r
-// #### obsoleted\r
-#define PLAYERMODE_AUTOQUIT                            0x0001\r
-#define PLAYERMODE_AUTOREFINE                          0x0002\r
-#define PLAYERMODE_AUTOUNIQ                            0x0004\r
-#define PLAYERMODE_NOT_CONTINUE                        0x0008\r
-#define PLAYERMODE_NOT_DRAG_START      0x0010\r
-\r
-\r
-extern char *OutputName;\r
-\r
-extern void LoadIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st);\r
-extern void SaveIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st);\r
-\r
-extern SETTING_PLAYER *sp_default, *sp_current, *sp_temp;\r
-extern SETTING_TIMIDITY *st_default, *st_current, *st_temp;\r
-extern CHAR *INI_INVALID;\r
-extern CHAR *INI_SEC_PLAYER;\r
-extern CHAR *INI_SEC_TIMIDITY;\r
-extern char *SystemFont;\r
-extern char *PlayerFont;\r
-extern char *WrdFont;\r
-extern char *DocFont;\r
-extern char *ListFont;\r
-extern char *TracerFont;\r
-extern HFONT hSystemFont;\r
-extern HFONT hPlayerFont;\r
-extern HFONT hWrdFont;\r
-extern HFONT hDocFont;\r
-extern HFONT hListFont;\r
-extern HFONT hTracerFont;\r
-extern int SystemFontSize;\r
-extern int PlayerFontSize;\r
-extern int WrdFontSize;\r
-extern int DocFontSize;\r
-extern int ListFontSize;\r
-extern int TracerFontSize;\r
-\r
-extern int IniGetKeyInt32(char *section, char *key,int32 *n);\r
-extern int IniGetKeyInt32Array(char *section, char *key, int32 *n, int arraysize);\r
-extern int IniGetKeyInt(char *section, char *key, int *n);\r
-extern int IniGetKeyChar(char *section, char *key, char *c);\r
-extern int IniGetKeyIntArray(char *section, char *key, int *n, int arraysize);\r
-extern int IniGetKeyString(char *section, char *key,char *str);\r
-extern int IniGetKeyStringN(char *section, char *key,char *str, int size);\r
-extern int IniGetKeyFloat(char *section, char *key, FLOAT_T *n);\r
-extern int IniPutKeyInt32(char *section, char *key,int32 *n);\r
-extern int IniPutKeyInt32Array(char *section, char *key, int32 *n, int arraysize);\r
-extern int IniPutKeyInt(char *section, char *key, int *n);\r
-extern int IniPutKeyChar(char *section, char *key, char *c);\r
-extern int IniPutKeyIntArray(char *section, char *key, int *n, int arraysize);\r
-extern int IniPutKeyString(char *section, char *key, char *str);\r
-extern int IniPutKeyStringN(char *section, char *key, char *str, int size);\r
-extern int IniPutKeyFloat(char *section, char *key, FLOAT_T n);\r
-extern void ApplySettingPlayer(SETTING_PLAYER *sp);\r
-extern void SaveSettingPlayer(SETTING_PLAYER *sp);\r
-extern void ApplySettingTiMidity(SETTING_TIMIDITY *st);\r
-extern void SaveSettingTiMidity(SETTING_TIMIDITY *st);\r
-extern void SettingCtlFlag(SETTING_TIMIDITY *st, int opt_id, int onoff);\r
-extern int IniVersionCheck(void);\r
-extern void BitBltRect(HDC dst, HDC src, RECT *rc);\r
-#if 0\r
-extern TmColors tm_colors[ /* TMCC_SIZE */ ];\r
-#define TmCc(c) (tm_colors[c].color)\r
-extern void TmInitColor(void);\r
-extern void TmFreeColor(void);\r
-extern void TmFillRect(HDC hdc, RECT *rc, int color);\r
-#endif\r
-extern void w32g_initialize(void);\r
-extern int is_directory(char *path);\r
-extern int directory_form(char *path_in_out);\r
-\r
-#endif /* ___W32G_UTL_H_ */\r
+       int opt_surround_chorus; // E ?
+       int opt_tva_attack;                     // E ?\r
+       int opt_tva_decay;                      // E ?\r
+       int opt_tva_release;            // E ?\r
+       int opt_delay_control;          // E ?\r
+       int opt_resonance;                      // E ?\r
+       int opt_env_attack;                     // E ?\r
+       int opt_velocity_table;         // E ?
+    int opt_evil_mode;         // e
+    int adjust_panning_immediately; // F
+    int fast_decay;            // f
+#ifdef SUPPORT_SOUNDSPEC
+    int view_soundspec_flag;   // g
+    double spectrogram_update_sec; // g
+#endif
+                               // h (ignore)
+    int default_program[MAX_CHANNELS]; // I
+    char opt_ctl[30];          // i
+    int opt_realtime_playing;  // j
+    int reduce_voice_threshold; // k
+                               // L (ignore)
+    char opt_playmode[16];     // O
+    char OutputName[MAXPATH + 32]; // o : string
+    char OutputDirName[MAXPATH + 32]; // o : string
+       int auto_output_mode;
+                               // P (ignore)
+    int voices;                        // p
+    int auto_reduce_polyphony;  // pa
+    ChannelBitMask quietchannels; // Q
+    char opt_qsize[16];                // q
+    int32 modify_release;      // R
+    int32 allocate_cache_size; // S
+    int output_rate;           // s
+    char output_text_code[16]; // t
+    int free_instruments_afterwards; // U
+    char opt_wrd[16];          // W
+#if defined(__W32__) && defined(SMFCONV)
+    int opt_rcpcv_dll;         // wr, wR
+#endif
+                               // x (ignore)
+                               // Z (ignore)
+    /* for w32g_a.c */
+    int data_block_bits;
+    int data_block_num;
+//??    int waveout_data_block_size;
+} SETTING_TIMIDITY;
+
+// #### obsoleted
+#define PLAYERMODE_AUTOQUIT                            0x0001
+#define PLAYERMODE_AUTOREFINE                          0x0002
+#define PLAYERMODE_AUTOUNIQ                            0x0004
+#define PLAYERMODE_NOT_CONTINUE                        0x0008
+#define PLAYERMODE_NOT_DRAG_START      0x0010
+
+
+extern char *OutputName;
+
+extern void LoadIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st);
+extern void SaveIniFile(SETTING_PLAYER *sp,  SETTING_TIMIDITY *st);
+
+extern SETTING_PLAYER *sp_default, *sp_current, *sp_temp;
+extern SETTING_TIMIDITY *st_default, *st_current, *st_temp;
+extern CHAR *INI_INVALID;
+extern CHAR *INI_SEC_PLAYER;
+extern CHAR *INI_SEC_TIMIDITY;
+extern char *SystemFont;
+extern char *PlayerFont;
+extern char *WrdFont;
+extern char *DocFont;
+extern char *ListFont;
+extern char *TracerFont;
+extern HFONT hSystemFont;
+extern HFONT hPlayerFont;
+extern HFONT hWrdFont;
+extern HFONT hDocFont;
+extern HFONT hListFont;
+extern HFONT hTracerFont;
+extern int SystemFontSize;
+extern int PlayerFontSize;
+extern int WrdFontSize;
+extern int DocFontSize;
+extern int ListFontSize;
+extern int TracerFontSize;
+
+extern int IniGetKeyInt32(char *section, char *key,int32 *n);
+extern int IniGetKeyInt32Array(char *section, char *key, int32 *n, int arraysize);
+extern int IniGetKeyInt(char *section, char *key, int *n);
+extern int IniGetKeyChar(char *section, char *key, char *c);
+extern int IniGetKeyIntArray(char *section, char *key, int *n, int arraysize);
+extern int IniGetKeyString(char *section, char *key,char *str);
+extern int IniGetKeyStringN(char *section, char *key,char *str, int size);
+extern int IniGetKeyFloat(char *section, char *key, FLOAT_T *n);
+extern int IniPutKeyInt32(char *section, char *key,int32 *n);
+extern int IniPutKeyInt32Array(char *section, char *key, int32 *n, int arraysize);
+extern int IniPutKeyInt(char *section, char *key, int *n);
+extern int IniPutKeyChar(char *section, char *key, char *c);
+extern int IniPutKeyIntArray(char *section, char *key, int *n, int arraysize);
+extern int IniPutKeyString(char *section, char *key, char *str);
+extern int IniPutKeyStringN(char *section, char *key, char *str, int size);
+extern int IniPutKeyFloat(char *section, char *key, FLOAT_T n);
+extern void ApplySettingPlayer(SETTING_PLAYER *sp);
+extern void SaveSettingPlayer(SETTING_PLAYER *sp);
+extern void ApplySettingTiMidity(SETTING_TIMIDITY *st);
+extern void SaveSettingTiMidity(SETTING_TIMIDITY *st);
+extern void SettingCtlFlag(SETTING_TIMIDITY *st, int opt_id, int onoff);
+extern int IniVersionCheck(void);
+extern void BitBltRect(HDC dst, HDC src, RECT *rc);
+#if 0
+extern TmColors tm_colors[ /* TMCC_SIZE */ ];
+#define TmCc(c) (tm_colors[c].color)
+extern void TmInitColor(void);
+extern void TmFreeColor(void);
+extern void TmFillRect(HDC hdc, RECT *rc, int color);
+#endif
+extern void w32g_initialize(void);
+extern int is_directory(char *path);
+extern int directory_form(char *path_in_out);
+
+extern char *timidity_window_inifile;
+extern char *timidity_output_inifile;
+
+#endif /* ___W32G_UTL_H_ */
index e34d33c..1df29cc 100644 (file)
@@ -252,7 +252,7 @@ static void ctl_lyric(int lyricid)
         {
             if(lyric[1] == '/' || lyric[1] == '\\')
             {
-                strcpy(lyric_buf, lyric + 2);
+                strncpy(lyric_buf, lyric + 2, sizeof(lyric_buf) - 1);
                 a_pipe_write_msg(lyric_buf);
                 lyric_col = strlen(lyric_buf);
             }
index 0597236..95a44c0 100644 (file)
@@ -192,7 +192,7 @@ static void ctl_lyric(int lyricid)
            {
                lyric_buf[0] = 'L';
                lyric_buf[1] = ' ';
-               sprintf(lyric_buf + 2, "%s", lyric + 2);
+               snprintf(lyric_buf + 2, sizeof (lyric_buf) - 2, "%s", lyric + 2);
                xskin_pipe_write(lyric_buf);
                lyric_col = strlen(lyric + 2) + 2;
            }
@@ -201,18 +201,18 @@ static void ctl_lyric(int lyricid)
                lyric_buf[0] = 'L';
                lyric_buf[1] = ' ';
                if(lyric[2] == 'L')
-                   sprintf(lyric_buf + 2, "Language: %s", lyric + 3);
+                   snprintf(lyric_buf + 2, sizeof (lyric_buf) - 2, "Language: %s", lyric + 3);
                else if(lyric[2] == 'T')
-                   sprintf(lyric_buf + 2, "Title: %s", lyric + 3);
+                   snprintf(lyric_buf + 2, sizeof (lyric_buf) - 2, "Title: %s", lyric + 3);
                else
-                   sprintf(lyric_buf + 2, "%s", lyric + 1);
+                   snprintf(lyric_buf + 2, sizeof (lyric_buf) - 2, "%s", lyric + 1);
                xskin_pipe_write(lyric_buf);
            }
            else
            {
                lyric_buf[0] = 'L';
                lyric_buf[1] = ' ';
-               sprintf(lyric_buf + lyric_col, lyric + 1);
+               snprintf(lyric_buf + lyric_col, sizeof (lyric_buf) - lyric_col, "%s", lyric + 1);
                xskin_pipe_write(lyric_buf);
                lyric_col += strlen(lyric + 1);
            }
@@ -221,7 +221,7 @@ static void ctl_lyric(int lyricid)
        {
            if(lyric[0] == ME_CHORUS_TEXT || lyric[0] == ME_INSERT_TEXT)
                lyric_col = 0;
-           sprintf(lyric_buf + lyric_col, lyric + 1);
+           snprintf(lyric_buf + lyric_col, sizeof (lyric_buf) - lyric_col, "%s", lyric + 1);
            xskin_pipe_write(lyric_buf);
        }
     }
index 6f5d10c..d7c598d 100644 (file)
 #include <stdlib.h>
 #include <stdarg.h>
 #include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
 #ifndef NO_STRING_H
 #include <string.h>
 #else
@@ -48,6 +53,7 @@
 #include "nkflib.h"
 #include "wrd.h"
 #include "strtab.h"
+#include "support.h"
 
 /* RAND_MAX must defined in stdlib.h
  * Why RAND_MAX is not defined at SunOS?
 #define RAND_MAX ((1<<15)-1)
 #endif
 
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
 /* #define MIME_CONVERSION */
 
 char *program_name, current_filename[1024];
@@ -76,44 +86,118 @@ const char *note_name[] =
     "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"
 };
 
-static int url_copyfile(URL url, char *path)
+
+#ifndef TMP_MAX
+#define TMP_MAX 238328
+#endif
+
+int
+tmdy_mkstemp(char *tmpl)
 {
-    FILE *fp;
-    char buff[BUFSIZ];
-    int n;
-
-    if((fp = fopen(path, "wb")) == NULL)
-       return -1;
-    while((n = url_read(url, buff, sizeof(buff))) > 0)
-       fwrite(buff, 1, n, fp);
-    fclose(fp);
-    return 0;
+  char *XXXXXX;
+  static uint32 value;
+  uint32 random_time_bits;
+  int count, fd = -1;
+  int save_errno = errno;
+
+  /* These are the characters used in temporary filenames.  */
+  static const char letters[] =
+    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+  /* This is where the Xs start.  */
+  XXXXXX = strstr(tmpl, "XXXXXX");
+  if (XXXXXX == NULL) {
+    errno = EINVAL;
+    return -1;
+  }
+
+  /* Get some more or less random data.  */
+#if HAVE_GETTIMEOFDAY
+  {
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    random_time_bits = (uint32)((tv.tv_usec << 16) ^ tv.tv_sec);
+  }
+#else
+  random_time_bits = (uint32)time(NULL);
+#endif
+
+  value += random_time_bits ^ getpid();
+
+  for (count = 0; count < TMP_MAX; value += 7777, ++count) {
+    uint32 v = value;
+
+    /* Fill in the random bits.  */
+    XXXXXX[0] = letters[v % 62];
+    v /= 62;
+    XXXXXX[1] = letters[v % 62];
+    v /= 62;
+    XXXXXX[2] = letters[v % 62];
+
+    v = (v << 16) ^ value;
+    XXXXXX[3] = letters[v % 62];
+    v /= 62;
+    XXXXXX[4] = letters[v % 62];
+    v /= 62;
+    XXXXXX[5] = letters[v % 62];
+
+    fd = open(tmpl, O_RDWR | O_CREAT | O_EXCL | O_BINARY, S_IRUSR | S_IWUSR);
+
+    if (fd >= 0) {
+      errno = save_errno;
+      return fd;
+    }
+    if (errno != EEXIST)
+      return -1;
+  }
+
+  /* We got out of the loop because we ran out of combinations to try.  */
+  errno = EEXIST;
+  return -1;
 }
 
-static char *make_temp_filename(char *ext)
-{
-    static char buff[1024], *tmpdir;
-    static int cnt;
 
-    if(ext == NULL)
-       ext = "";
+static char *
+url_dumpfile(URL url, const char *ext)
+{
+  char filename[1024];
+  char *tmpdir;
+  int fd;
+  FILE *fp;
+  int n;
+  char buff[BUFSIZ];
 
 #ifdef TMPDIR
-    tmpdir = TMPDIR;
+  tmpdir = TMPDIR;
 #else
-    tmpdir = getenv("TMPDIR");
+  tmpdir = getenv("TMPDIR");
 #endif
-    if(tmpdir == NULL || strlen(tmpdir) == 0)
-       tmpdir = PATH_STRING "tmp" PATH_STRING;
-    if(IS_PATH_SEP(tmpdir[strlen(tmpdir) - 1]))
-       sprintf(buff, "%stimidity-tmp%d-%d%s",
-               tmpdir, cnt++, (int)getpid(), ext);
-    else
-       sprintf(buff, "%s" PATH_STRING "timidity-tmp%d-%d%s",
-               tmpdir, cnt++, (int)getpid(), ext);
-    return buff;
+  if(tmpdir == NULL || strlen(tmpdir) == 0)
+    tmpdir = PATH_STRING "tmp" PATH_STRING;
+  if(IS_PATH_SEP(tmpdir[strlen(tmpdir) - 1]))
+    snprintf(filename, sizeof(filename), "%sXXXXXX.%s", tmpdir, ext);
+  else
+    snprintf(filename, sizeof(filename), "%s" PATH_STRING "XXXXXX.%s",
+            tmpdir, ext);
+
+  fd = tmdy_mkstemp(filename);
+
+  if (fd == -1)
+    return NULL;
+
+  if ((fp = fdopen(fd, "w")) == NULL) {
+    close(fd);
+    unlink(filename);
+    return NULL;
+  }
+
+  while((n = url_read(url, buff, sizeof(buff))) > 0)
+    fwrite(buff, 1, n, fp);
+  fclose(fp);
+  return safe_strdup(filename);
 }
 
+
 /* Try to open a file for reading. If the filename ends in one of the
    defined compressor extensions, pipe the file through the decompressor */
 struct timidity_file *try_to_open(char *name, int decompress)
@@ -178,16 +262,15 @@ struct timidity_file *try_to_open(char *name, int decompress)
        {
            if(!check_file_extension(name, *dec, 0))
                continue;
-           tmpname = make_temp_filename(*dec);
-           unlink(tmpname); /* For security */
-           tf->tmpname = safe_strdup(tmpname);
-           if(url_copyfile(tf->url, tmpname) == -1)
-           {
+
+           tf->tmpname = url_dumpfile(tf->url, *dec);
+           if (tf->tmpname == NULL) {
                close_file(tf);
                return NULL;
            }
+
            url_close(tf->url);
-           sprintf(tmp, *(dec+1), tf->tmpname);
+           snprintf(tmp, sizeof(tmp), *(dec+1), tf->tmpname);
            if((tf->url = url_pipe_open(tmp)) == NULL)
            {
                close_file(tf);
@@ -210,14 +293,13 @@ struct timidity_file *try_to_open(char *name, int decompress)
        {
            if(!check_file_extension(name, *dec, 0))
                continue;
-           tmpname = make_temp_filename(*dec);
-           unlink(tmpname); /* For security */
-           tf->tmpname = safe_strdup(tmpname);
-           if(url_copyfile(tf->url, tmpname) == -1)
-           {
+
+           tf->tmpname = url_dumpfile(tf->url, *dec);
+           if (tf->tmpname == NULL) {
                close_file(tf);
                return NULL;
            }
+
            url_close(tf->url);
            sprintf(tmp, *(dec+1), tf->tmpname);
            if((tf->url = url_pipe_open(tmp)) == NULL)
index d9e4c45..916adb5 100644 (file)
@@ -92,113 +92,98 @@ static void voice_ran_out(int v)
 /* Returns 1 if envelope runs out */
 int recompute_envelope(int v)
 {
-    int stage, ch;
-    int32 rate, offset;
+    int stage,ch;
+    int32 rate,offset,ch_rate;
     Voice *vp = &voice[v];
 
     stage = vp->envelope_stage;
-    if(stage > 5)
-    {
-       voice_ran_out(v);
-       return 1;
+    if(stage > 5) {
+               voice_ran_out(v);
+               return 1;
     }
 
-    if(stage > 2 && vp->envelope_volume <= 0)
-    {
-       /* Remove silent voice in the release stage */
-       voice_ran_out(v);
-       return 1;
+    if(stage > 2 && vp->envelope_volume <= 0) {
+               voice_ran_out(v);       /* Remove silent voice in the release stage */
+               return 1;
     }
-
-    if(stage == 3 &&
-       (vp->sample->modes & MODES_ENVELOPE) &&
-       (vp->status & (VOICE_ON | VOICE_SUSTAINED)))
-    {
-       /* EAW -- Routine to decay the sustain envelope
-        *
-        * Disabled if !min_sustain_time or if there is no loop.
-        * If calculated decay rate is larger than the regular
-        *  stage 3 rate, use the stage 3 rate instead.
-        * min_sustain_time is given in msec, and is the time
-        *  it will take to decay a note at maximum volume.
-        * 2000-3000 msec seem to be decent values to use.
-        *
-        * 08/24/00 changed behavior to not begin the decay until
-        *  after the sample plays past it's loop start
-        *
-        */
-
-       if(min_sustain_time <= 0)       /* Default behavior */
-       {
-           /* Freeze envelope until note turns off */
-           vp->envelope_increment = 0;
-       }
-       else if((vp->status & VOICE_SUSTAINED) &&
-               (vp->sample->modes & MODES_LOOPING) &&
-               (vp->sample_offset - vp->sample->loop_start >= 0))
-       {
-           if(min_sustain_time == 1)
-               goto next_stage; /* Go to next stage.
-                                 * The sustain stage is ignored.
-                                 */
-
-           /* Set envelope volume target to zero.
-            * This cause to be vp->envelope_volume <= 0, then the
-            * voice will be removed.  The next stage never come.
-            */
-           vp->envelope_target = 0;
-
-           /* Calculate the release phase speed.
-            * (1073741823000 == (2^(15+15)-1) * 1000)
-            */
-           rate = (int32)(-1073741823000.0 * control_ratio /
-                          (min_sustain_time * play_mode->rate));
-           vp->envelope_increment = -vp->sample->envelope_rate[3];
-           /* use the slower of the two rates */
-           if(vp->envelope_increment < rate)
-               vp->envelope_increment = rate;
-           if(!vp->envelope_increment)
-               vp->envelope_increment = -1; /* Avoid freezing */
-       }
-       else /* it's not decaying, so freeze it */
-       {
-           /* tiny value to make other functions happy, freeze note */
-           vp->envelope_increment = 1;
-
-           /* this will cause update_envelope(v) to undo the +1 inc. */
-           vp->envelope_target = vp->envelope_volume;
-       }
-       return 0;
+  
+       if(stage == 3 &&
+       (vp->sample->modes & MODES_ENVELOPE) &&
+       (vp->status & (VOICE_ON | VOICE_SUSTAINED))) {
+                /* EAW -- Routine to decay the sustain envelope
+                *
+                * Disabled if !min_sustain_time or if there is no loop.
+                * If calculated decay rate is larger than the regular
+                *  stage 3 rate, use the stage 3 rate instead.
+                * min_sustain_time is given in msec, and is the time
+                *  it will take to decay a note at maximum volume.
+                * 2000-3000 msec seem to be decent values to use.
+                *
+                * 08/24/00 changed behavior to not begin the decay until
+                *  after the sample plays past it's loop start
+                *
+                */
+               if(min_sustain_time <= 0) {     /* Default behavior */
+                       vp->envelope_increment = 0;     /* Freeze envelope until note turns off */
+               } else if((vp->status & VOICE_SUSTAINED) &&
+                       (vp->sample->modes & MODES_LOOPING) &&
+                       (vp->sample_offset - vp->sample->loop_start >= 0)) {
+                       if(min_sustain_time == 1) {goto next_stage;} /* The sustain stage is ignored. */
+                       vp->envelope_target = 0;
+                       /* Calculate the release phase speed.
+                        * (1073741823000 == (2^(15+15)-1) * 1000) */
+                       rate = (int32)(-1073741823000.0 * control_ratio /
+                                  (min_sustain_time * play_mode->rate));
+                       ch = vp->channel;
+                       vp->envelope_increment = -vp->sample->envelope_rate[2];
+                       /* use the slower of the two rates */
+                       if(vp->envelope_increment < rate) {vp->envelope_increment = rate;}
+                       if(!vp->envelope_increment) {vp->envelope_increment = -1;} /* Avoid freezing */
+               } else { /* it's not decaying, so freeze it */
+                       /* tiny value to make other functions happy, freeze note */
+                       vp->envelope_increment = 1;
+                       /* this will cause update_envelope(v) to undo the +1 inc. */
+                       vp->envelope_target = vp->envelope_volume;
+               }
+               return 0;
     }
 
-  next_stage:
-    vp->envelope_stage = stage + 1;
-
-    offset = vp->sample->envelope_offset[stage];
-    if(vp->envelope_volume == offset ||
-       (stage > 2 && vp->envelope_volume < offset))
-       return recompute_envelope(v);
+next_stage:
+       vp->envelope_stage = stage + 1;
 
-    rate = 0;
-    ch = vp->channel;
-    if(ISDRUMCHANNEL(ch))
-    {
-       int note;
+       offset = vp->sample->envelope_offset[stage];
+       if(vp->envelope_volume == offset ||     (stage > 2 && vp->envelope_volume < offset)) {
+               return recompute_envelope(v);
+       }
 
-       note = vp->note;
-       if(channel[ch].drums[note] != NULL)
-           rate = channel[ch].drums[note]->drum_envelope_rate[stage];
-    }
-    else
-       rate = channel[ch].envelope_rate[stage];
-    if(rate == 0)
+       rate = 0;
+       ch_rate = 0;
+       ch = vp->channel;
        rate = vp->sample->envelope_rate[stage];
+       if(ISDRUMCHANNEL(ch)) {
+               int note;
+               note = vp->note;
+               if(channel[ch].drums[note] != NULL) {
+                       ch_rate = channel[ch].drums[note]->drum_envelope_rate[stage];
+                       if(ch_rate > 0) {rate = rate * 63 / (63 + ch_rate);}
+                       else if(ch_rate < 0) {
+                               if(ch_rate == -64) {return recompute_envelope(v);}
+                               rate = rate * 64 / (64 + ch_rate);
+                       }
+               }
+       } else {
+               ch_rate = channel[ch].envelope_rate[stage];
+               if(ch_rate > 0) {rate = rate * 63 / (63 + ch_rate);}
+               else if(channel[ch].envelope_rate[stage] < 0) {
+                       if(channel[ch].envelope_rate[stage] == -64) {return recompute_envelope(v);}
+                       rate = rate * 64 / (64 + ch_rate);
+               }
+       }
 
-    vp->envelope_target    = offset;
-    vp->envelope_increment = rate;
-    if(vp->envelope_target < vp->envelope_volume)
-       vp->envelope_increment = -vp->envelope_increment;
-    return 0;
+       vp->envelope_target    = offset;
+       vp->envelope_increment = rate;
+       if(vp->envelope_target < vp->envelope_volume) {vp->envelope_increment = -vp->envelope_increment;}
+       return 0;
 }
 
 int apply_envelope_to_amp(int v)
@@ -215,12 +200,16 @@ int apply_envelope_to_amp(int v)
        }
       if (voice[v].sample->modes & MODES_ENVELOPE)
        {
-         lamp *= vol_table[voice[v].envelope_volume>>23];
-         ramp *= vol_table[voice[v].envelope_volume>>23];
+         if(voice[v].envelope_stage > 1) {
+                 lamp *= vol_table[voice[v].envelope_volume>>23];
+                 ramp *= vol_table[voice[v].envelope_volume>>23];
+         } else {
+                 lamp *= attack_vol_table[voice[v].envelope_volume>>23];
+                 ramp *= attack_vol_table[voice[v].envelope_volume>>23];
+         }
        }
 
       la = (int32)TIM_FSCALE(lamp,AMP_BITS);
-
       if (la>MAX_AMP_VALUE)
        la=MAX_AMP_VALUE;
 
@@ -242,11 +231,15 @@ int apply_envelope_to_amp(int v)
     {
       if (voice[v].tremolo_phase_increment)
        lamp *= voice[v].tremolo_volume;
-      if (voice[v].sample->modes & MODES_ENVELOPE)
-       lamp *= vol_table[voice[v].envelope_volume>>23];
+         if (voice[v].sample->modes & MODES_ENVELOPE) {
+                 if(voice[v].envelope_stage > 1) {
+                         lamp *= vol_table[voice[v].envelope_volume>>23];
+                 } else {
+                         lamp *= attack_vol_table[voice[v].envelope_volume>>23];
+                 }
+         }
 
       la = (int32)TIM_FSCALE(lamp,AMP_BITS);
-
       if (la>MAX_AMP_VALUE)
        la=MAX_AMP_VALUE;
       if((voice[v].status & (VOICE_OFF | VOICE_SUSTAINED)) &&
index 378aaba..d8af37c 100644 (file)
@@ -53,6 +53,7 @@ extern long int random (void);
 #include "output.h"
 #include "controls.h"
 #include "unimod.h"
+#include "unimod_priv.h"
 #include "mod2midi.h"
 
 static BOOL mod_do_play (MODULE *);
@@ -1720,13 +1721,29 @@ DoMEDSpeed (void)
 static void 
 pt_playeffects (void)
 {
-  UBYTE dat, c;
+  UBYTE dat, c, oldc = 0;
 
   while ((c = UniGetByte ()))
     {
       int oldsliding = a->sliding;
 
       a->sliding = 0;
+
+      /* libunimod doesn't *quite* do Ultimate Soundtracker portas correctly */
+      if (strcmp(of.modtype, "Ultimate Soundtracker") == 0)
+        {
+      if (c == 5 && oldc == 4)
+        {
+          oldc = 5;
+          a->sliding = oldsliding;
+          UniSkipOpcode (c);
+          continue;
+        }
+        oldc = c;
+        if (c == 3 || c == 4)
+            c++;
+      }
+
       switch (c)
        {
        case UNI_PTEFFECT0:
index baf9e37..bfc6887 100644 (file)
 #include "reverb.h"
 #include "wrd.h"
 #include "aq.h"
+#include "freq.h"
+
+#define ABORT_AT_FATAL 1 /*#################*/
+#define MYCHECK(s) do { if(s == 0) { printf("## L %d\n", __LINE__); abort(); } } while(0)
 
 extern VOLATILE int intr;
 
@@ -70,11 +74,15 @@ int usleep(unsigned int useconds);
 #define PLAY_INTERLEAVE_SEC            1.0
 #define PORTAMENTO_TIME_TUNING         (1.0 / 5000.0)
 #define PORTAMENTO_CONTROL_RATIO       256     /* controls per sec */
-#define DEFAULT_CHORUS_DELAY1          0.02
-#define DEFAULT_CHORUS_DELAY2          0.003
+/*#define DEFAULT_CHORUS_DELAY1                0.02
+#define DEFAULT_CHORUS_DELAY2          0.003*/
+double DEFAULT_CHORUS_DELAY1 = 0.02;
+double DEFAULT_CHORUS_DELAY2 = 0.003;
 #define CHORUS_OPPOSITE_THRESHOLD      32
-#define CHORUS_VELOCITY_TUNING1                0.7
-#define CHORUS_VELOCITY_TUNING2                0.6
+/*#define CHORUS_VELOCITY_TUNING1              0.7
+#define CHORUS_VELOCITY_TUNING2                0.6*/
+double CHORUS_VELOCITY_TUNING1 = 0.7;
+double CHORUS_VELOCITY_TUNING2 = 0.6;
 #define EOT_PRESEARCH_LEN              32
 #define SPEED_CHANGE_RATE              1.0594630943592953  /* 2^(1/12) */
 
@@ -136,11 +144,11 @@ int opt_reverb_control = 0;
 #endif /* REVERB_CONTROL_ALLOW */
 
 #ifdef CHORUS_CONTROL_ALLOW
-int opt_chorus_control = 2;
+int opt_chorus_control = 1;
 #else
 int opt_chorus_control = 0;
 #endif /* CHORUS_CONTROL_ALLOW */
-int opt_surround_chorus = 0;
+int opt_surround_chorus = 1;
 
 #ifdef GM_CHANNEL_PRESSURE_ALLOW
 int opt_channel_pressure = 1;
@@ -154,6 +162,15 @@ int opt_overlap_voice_allow = 1;
 int opt_overlap_voice_allow = 0;
 #endif /* OVERLAP_VOICE_ALLOW */
 
+/* TVA Env. Attack,Decay,Release... */
+int opt_tva_attack = 0;
+int opt_tva_decay = 0;
+int opt_tva_release = 0;
+int opt_delay_control = 0;
+int opt_resonance = 0;
+int opt_env_attack = 0;        /* 0:linear, 1:exponential1, 2:exponential2, 3:logarithmic */
+
+
 int voices=DEFAULT_VOICES, upper_voices;
 
 int32
@@ -363,6 +380,11 @@ static void reset_drum_controllers(struct DrumParts *d[], int note)
                d[i]->drum_panning = NO_PANNING;
                memset(d[i]->drum_envelope_rate, 0,
                       sizeof(d[i]->drum_envelope_rate));
+               d[i]->drum_level = 1;
+               d[i]->note = 0;
+               d[i]->delay_level = 0;
+               d[i]->chorus_level = 0;
+               d[i]->reverb_level = 0;
            }
     }
     else
@@ -370,6 +392,11 @@ static void reset_drum_controllers(struct DrumParts *d[], int note)
        d[note]->drum_panning = NO_PANNING;
        memset(d[note]->drum_envelope_rate, 0,
               sizeof(d[note]->drum_envelope_rate));
+       d[note]->drum_level = 1;
+       d[note]->note = 0;
+       d[note]->delay_level = 0;
+       d[note]->chorus_level = 0;
+       d[note]->reverb_level = 0;
     }
 }
 
@@ -406,6 +433,8 @@ static void reset_controllers(int c)
   else
       channel[c].chorus_level = -opt_chorus_control;
   channel[c].mono = 0;
+  channel[c].delay_level = 0;
+  channel[c].resonance_level = 0;
 }
 
 static void redraw_controllers(int c)
@@ -482,13 +511,14 @@ static void reset_midi(int playing)
 
 void recompute_freq(int v)
 {
-  int ch=voice[v].channel;
+  int ch=voice[v].channel,note=voice[v].note;
   int
     sign=(voice[v].sample_increment < 0), /* for bidirectional loops */
     pb=channel[ch].pitchbend;
   double a;
   int32 tuning = 0;
 
+
   if(!voice[v].sample->sample_rate)
       return;
 
@@ -524,8 +554,9 @@ void recompute_freq(int v)
 
   if(!voice[v].porta_control_ratio)
   {
-      if(tuning == 0 && pb == 0x2000)
-         voice[v].frequency = voice[v].orig_frequency;
+      if(tuning == 0 && pb == 0x2000) {
+       voice[v].frequency = voice[v].orig_frequency;
+      }
       else
       {
          pb -= 0x2000;
@@ -569,12 +600,17 @@ void recompute_freq(int v)
       voice[v].cache = NULL;
   }
 
+
   a = TIM_FSCALE(((double)voice[v].sample->sample_rate * voice[v].frequency) /
                 ((double)voice[v].sample->root_freq * play_mode->rate),
                 FRACTION_BITS) + 0.5;
+
+  if(sign)
+      a = -a; /* need to preserve the loop direction */
+
+  voice[v].sample_increment = (int32)a;
 #ifdef ABORT_AT_FATAL
-  if((int32)a == 0)
-  {
+  if (voice[v].sample_increment == 0) {
       fprintf(stderr, "Invalid sample increment a=%e %ld %ld %ld %ld%s\n",
              a, (long)voice[v].sample->sample_rate, (long)voice[v].frequency,
              (long)voice[v].sample->root_freq, (long)play_mode->rate,
@@ -582,22 +618,24 @@ void recompute_freq(int v)
       abort();
   }
 #endif /* ABORT_AT_FATAL */
-
-  if(sign)
-      a = -a; /* need to preserve the loop direction */
-
-  voice[v].sample_increment = (int32)a;
 }
 
 static void recompute_amp(int v)
 {
     FLOAT_T tempamp;
 
-    tempamp = ((FLOAT_T)master_volume *
-              voice[v].velocity *
-              voice[v].sample->volume *
-              channel[voice[v].channel].volume *
-              channel[voice[v].channel].expression); /* 21 bits */
+       tempamp = ((FLOAT_T)master_volume *
+                  velocity_table[voice[v].velocity] *
+                  voice[v].sample->volume *
+                  channel[voice[v].channel].volume *
+                  channel[voice[v].channel].expression); /* 21 bits */
+
+       /* Level of Drum */
+       if(ISDRUMCHANNEL(voice[v].channel)
+               && channel[voice[v].channel].drums[voice[v].note] != NULL
+               && channel[voice[v].channel].drums[voice[v].note]->drum_level != 1) {
+               tempamp *= channel[voice[v].channel].drums[voice[v].note]->drum_level;
+       }
 
     if(!(play_mode->encoding & PE_MONO))
     {
@@ -1250,6 +1288,7 @@ static int select_play_sample(Sample *splist, int nsp,
     {
        j = vlist[0] = find_voice(e);
        voice[j].orig_frequency = f;
+       MYCHECK(voice[j].orig_frequency);
        voice[j].sample = splist;
        voice[j].status = VOICE_ON;
        return 1;
@@ -1264,6 +1303,7 @@ static int select_play_sample(Sample *splist, int nsp,
        {
            j = vlist[nv] = find_voice(e);
            voice[j].orig_frequency = f;
+           MYCHECK(voice[j].orig_frequency);
            voice[j].sample = sp;
            voice[j].status = VOICE_ON;
            nv++;
@@ -1333,6 +1373,12 @@ static int find_samples(MidiEvent *e, int *vlist)
                note = ip->sample->note_to_use;
            i = vlist[0] = find_voice(e);
            voice[i].orig_frequency = freq_table[note];
+        /* NRPN Coarse Pitch of Drum (GS) */
+               if(ISDRUMCHANNEL(ch) &&
+                   channel[ch].drums[note] != NULL &&
+                       channel[ch].drums[note]->note) {
+               voice[i].orig_frequency = freq_table[channel[ch].drums[note]->note];
+               }
            voice[i].sample = ip->sample;
            voice[i].status = VOICE_ON;
            return 1;
@@ -1381,7 +1427,6 @@ static int find_samples(MidiEvent *e, int *vlist)
                    voice[j].cache = NULL;
            }
        }
-
        return nv;
 }
 
@@ -1541,10 +1586,208 @@ static void finish_note(int i)
     }
 }
 
+static void set_envelope_time(int ch,int val,int stage)
+{
+       val = val & 0x7F;
+       if(play_system_mode != GS_SYSTEM_MODE) {
+               val = val / 2 + 32;
+       }
+       val -= 64;
+       if(channel[ch].mapID == SC_55_TONE_MAP) {
+               val *= 1.23;
+               if(val > 63) {val = 63;}
+               else if(val < -64) {val = -64;}
+       }
+       switch(stage) {
+       case 0: // Attack
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Attack Time (CH:%d VALUE:%d)",ch,val);
+               break;
+       case 1: // Decay
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Decay Time (CH:%d VALUE:%d)",ch,val);
+               break;
+       case 3: // Release
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Release Time (CH:%d VALUE:%d)",ch,val);
+               break;
+       default:
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"? Time (CH:%d VALUE:%d)",ch,val);
+       }
+       channel[ch].envelope_rate[stage] = val;
+}
+
+static void new_flanger_voice(int v1, int level1,int level2)
+{
+    int v2,i,fb_loop,level,ch,pan;
+       double delay,width;
+       int32 orig_frequency;
+
+       ch = voice[v1].channel;
+       fb_loop = abs(level2) / 16;
+       level = (level2 + 64) >> 2;
+       level1 += rand() % 64 - 32;
+       width = 1.0 - level1 * 0.01;
+
+       delay = 0;
+       if((v2 = find_free_voice()) == -1) {return;}
+       delay += width;
+       voice[v2] = voice[v1];  /* copy all parameters */
+       voice[v2].delay += (int)(play_mode->rate * delay / 1000);
+       pan = rand() % 8 - 4;
+       voice[v2].panning += pan;
+       orig_frequency = voice[v1].orig_frequency;
+       orig_frequency *= bend_fine[level];
+       voice[v2].orig_frequency = orig_frequency;
+       voice[v2].cache = NULL;
+       recompute_amp(v2);
+       apply_envelope_to_amp(v2);
+       recompute_freq(v2);
+       for(i=0;i<fb_loop;i++) {
+               delay += width;
+               if((v2 = find_free_voice()) == -1) {return;}
+               voice[v2] = voice[v1];
+               voice[v2].delay += (int)(play_mode->rate * delay / 1000);
+               pan = rand() % 8 - 4;
+               voice[v2].panning += pan;
+               orig_frequency *= bend_fine[level];
+               voice[v2].orig_frequency = orig_frequency;
+               voice[v2].cache = NULL;
+               recompute_amp(v2);
+               apply_envelope_to_amp(v2);
+               recompute_freq(v2);
+       }
+}
+
+
+static void new_delay_voice(int v1, int level)
+{
+    int v2,i,fb_loop,ch=voice[v1].channel;
+       int32 orig_frequency;
+       double delay,vol,fb_ratio;
+       uint8 pan;
+       struct delay_status_t *status = get_delay_status();
+       double threshold = 1.0;
+
+       /* NRPN Delay Send Level of Drum */
+       if(ISDRUMCHANNEL(ch) && channel[ch].drums[voice[v1].note] != NULL) {
+               level *= (FLOAT_T)channel[ch].drums[voice[v1].note]->delay_level / 127.0;
+       }
+
+       fb_loop = status->fb_loop;
+       fb_ratio = status->fb_ratio;
+
+       vol = voice[v1].velocity * level * status->level_ratio_center;
+       if (vol > threshold) {  /* First Delay */
+               delay = 0;
+               if((v2 = find_free_voice()) == -1) {return;}
+               orig_frequency = voice[v1].orig_frequency;
+               orig_frequency *= bend_fine[level >> 2];
+               voice[v2].orig_frequency = orig_frequency;
+               voice[v2].cache = NULL;
+               delay += status->time_center;
+               voice[v2] = voice[v1];  /* copy all parameters */
+               voice[v2].velocity = (uint8)vol;
+               voice[v2].delay += (int)(play_mode->rate * delay / 1000);
+               recompute_amp(v2);
+               apply_envelope_to_amp(v2);
+               recompute_freq(v2);
+               for(i=0;i<fb_loop;i++) {        /* Feedback */
+                       vol *= fb_ratio;
+                       delay += status->time_center;
+                       if(vol < threshold) {break;}
+                       if((v2 = find_free_voice()) == -1) {return;}
+                       orig_frequency *= bend_fine[level >> 2];
+                       voice[v2].orig_frequency = orig_frequency;
+                       voice[v2].cache = NULL;
+                       voice[v2] = voice[v1];  /* copy all parameters */
+                       voice[v2].velocity = (uint8)vol;
+                       voice[v2].delay += (int)(play_mode->rate * delay / 1000);
+                       recompute_amp(v2);
+                       apply_envelope_to_amp(v2);
+                       recompute_freq(v2);
+               }
+       }
+
+       if(status->level_left) {
+               vol = voice[v1].velocity * level * status->level_ratio_left;
+               if (vol > threshold) {  /* First Delay */
+                       delay = 0;
+                       pan = voice[v1].panning - 64;
+                       if((v2 = find_free_voice()) == -1) {return;}
+                       orig_frequency = voice[v1].orig_frequency;
+                       orig_frequency *= bend_fine[level >> 2];
+                       voice[v2].orig_frequency = orig_frequency;
+                       voice[v2].cache = NULL;
+                       delay += status->time_left;
+                       voice[v2] = voice[v1];  /* copy all parameters */
+                       voice[v2].velocity = (uint8)vol;
+                       voice[v2].delay += (int)(play_mode->rate * delay / 1000);       
+                       voice[v2].panning = pan;
+                       recompute_amp(v2);
+                       apply_envelope_to_amp(v2);
+                       recompute_freq(v2);
+                       for(i=0;i<fb_loop;i++) {        /* Feedback */
+                               vol *= fb_ratio;
+                               delay += status->time_left;
+                               if(vol < threshold) {break;}
+                               if((v2 = find_free_voice()) == -1) {return;}
+                               orig_frequency *= bend_fine[level >> 2];
+                               voice[v2].orig_frequency = orig_frequency;
+                               voice[v2].cache = NULL;
+                               voice[v2] = voice[v1];  /* copy all parameters */
+                               voice[v2].velocity = (uint8)vol;
+                               voice[v2].delay += (int)(play_mode->rate * delay / 1000);
+                               voice[v2].panning = pan;
+                               recompute_amp(v2);
+                               apply_envelope_to_amp(v2);
+                               recompute_freq(v2);
+                       }
+               }
+       }
+
+       if(status->level_right) {
+               vol = voice[v1].velocity * level * status->level_ratio_right;
+               if (vol > threshold) {  /* First Delay */
+                       delay = 0;
+                       pan = voice[v1].panning - 64;
+                       if((v2 = find_free_voice()) == -1) {return;}
+                       orig_frequency = voice[v1].orig_frequency;
+                       orig_frequency *= bend_fine[level >> 2];
+                       voice[v2].orig_frequency = orig_frequency;
+                       voice[v2].cache = NULL;
+                       delay += status->time_right;
+                       voice[v2] = voice[v1];  /* copy all parameters */
+                       voice[v2].velocity = (uint8)vol;
+                       voice[v2].delay += (int)(play_mode->rate * delay / 1000);       
+                       voice[v2].panning = pan;
+                       recompute_amp(v2);
+                       apply_envelope_to_amp(v2);
+                       recompute_freq(v2);
+                       for(i=0;i<fb_loop;i++) {        /* Feedback */
+                               vol *= fb_ratio;
+                               delay += status->time_right;
+                               if(vol < threshold) {break;}
+                               if((v2 = find_free_voice()) == -1) {return;}
+                               orig_frequency *= bend_fine[level >> 2];
+                               voice[v2].orig_frequency = orig_frequency;
+                               voice[v2].cache = NULL;
+                               voice[v2] = voice[v1];  /* copy all parameters */
+                               voice[v2].velocity = (uint8)vol;
+                               voice[v2].delay += (int)(play_mode->rate * delay / 1000);
+                               voice[v2].panning = pan;
+                               recompute_amp(v2);
+                               apply_envelope_to_amp(v2);
+                               recompute_freq(v2);
+                       }
+               }
+       }
+}
+
 static void new_chorus_voice(int v1, int level)
 {
     int v2, ch;
     uint8 vol;
+    struct chorus_status_t *status = get_chorus_status();
+
+    printf("## level %d\n", level);
 
     if((v2 = find_free_voice()) == -1)
        return;
@@ -1552,6 +1795,11 @@ static void new_chorus_voice(int v1, int level)
     vol = voice[v1].velocity;
     voice[v2] = voice[v1];     /* copy all parameters */
 
+       /* NRPN Chorus Send Level of Drum */
+       if(ISDRUMCHANNEL(ch) && channel[ch].drums[voice[v1].note] != NULL) {
+               level *= (FLOAT_T)channel[ch].drums[voice[v1].note]->chorus_level / 127.0;
+       }
+
     /* Choose lower voice index for base voice (v1) */
     if(v1 > v2)
     {
@@ -1577,6 +1825,9 @@ static void new_chorus_voice(int v1, int level)
         voice[v2].orig_frequency *= bend_fine[level];
     else
        voice[v2].orig_frequency /= bend_fine[level];
+
+    MYCHECK(voice[v2].orig_frequency);
+
     voice[v2].cache = NULL;
 
     /* set panning & delay */
@@ -1631,12 +1882,22 @@ static void new_chorus_voice_alternate(int v1, int level)
     int v2, ch, panlevel;
     uint8 vol, pan;
     double delay;
+       struct chorus_status_t *status = get_chorus_status();
 
     if((v2 = find_free_voice()) == -1)
        return;
     ch = voice[v1].channel;
     voice[v2] = voice[v1];
 
+       /* NRPN Chorus Send Level of Drum */
+       if(ISDRUMCHANNEL(ch) && channel[ch].drums[voice[v1].note] != NULL) {
+               level *= (FLOAT_T)channel[ch].drums[voice[v1].note]->chorus_level / 127.0;
+       }
+
+    /* for our purposes, hard left will be equal to 1 instead of 0 */
+    pan = voice[v1].panning;
+    if (!pan) pan = 1;
+
     /* Choose lower voice index for base voice (v1) */
     if(v1 > v2)
     {
@@ -1666,20 +1927,51 @@ static void new_chorus_voice_alternate(int v1, int level)
         voice[v2].cache = NULL;
     }
 
+    MYCHECK(voice[v2].orig_frequency);
+
+    /* Try to keep the delayed voice from cancelling out the other voice */
+    /* Don't bother with trying to figure out drum pitches... */
+    /* Don't bother with mod files for the same reason... */
+    /* Drums and mods could be fixed, but pitch detection is too expensive */
+    delay = DEFAULT_CHORUS_DELAY2;
+    if (!ISDRUMCHANNEL(voice[v1].channel) &&
+       current_file_info->file_type != IS_MOD_FILE &&
+       current_file_info->file_type != IS_S3M_FILE)
+    {
+       double freq, frac;
+    
+       freq = pitch_freq_table[voice[v1].note];
+       delay = DEFAULT_CHORUS_DELAY2 * freq;
+       frac = delay - floor(delay);
+
+       /* force the delay away from 0.5 period */
+       if (frac < 0.5 && frac > 0.40)
+       {
+           delay = (floor(delay) + 0.40) / freq;
+           if (play_mode->encoding & ~PE_MONO)
+               delay += (0.5 - frac) * (1.0 - labs(64 - pan) / 63.0) / freq;
+       }
+       else if (frac >= 0.5 && frac < 0.60)
+       {
+           delay = (floor(delay) + 0.60) / freq;
+           if (play_mode->encoding & ~PE_MONO)
+               delay += (0.5 - frac) * (1.0 - labs(64 - pan) / 63.0) / freq;
+       }
+       else
+           delay = DEFAULT_CHORUS_DELAY2;
+    }
+
     /* set panning & delay for pseudo-surround effect */
-    if(play_mode->encoding & PE_MONO)
-        voice[v2].delay += DEFAULT_CHORUS_DELAY2;   /* delay sounds good */
+    if(play_mode->encoding & PE_MONO)    /* delay sounds good */
+        voice[v2].delay += (int)(play_mode->rate * delay);
     else
     {
-        pan = voice[v1].panning;
         panlevel = 63;
         if (pan - panlevel < 1) panlevel = pan - 1;
         if (pan + panlevel > 127) panlevel = 127 - pan;
         voice[v1].panning -= panlevel;
         voice[v2].panning += panlevel;
 
-        delay = DEFAULT_CHORUS_DELAY2;
-
         /* choose which voice is delayed based on panning */
         if (voice[v1].panned == PANNED_CENTER) {
             /* randomly choose which voice is delayed */
@@ -1734,12 +2026,20 @@ static void note_on(MidiEvent *e)
 #endif
        if((channel[ch].chorus_level || opt_surround_chorus))
        {
-           if(opt_surround_chorus)
+               if(opt_surround_chorus)
                new_chorus_voice_alternate(v, channel[ch].chorus_level);
-           else
+               else
                new_chorus_voice(v, channel[ch].chorus_level);
        }
-    }
+       if(channel[ch].delay_level)
+       {
+               new_delay_voice(v, channel[ch].delay_level);
+       }
+       if(channel[ch].resonance_level)
+       {
+               new_flanger_voice(v, channel[ch].cutoff_freq,channel[ch].resonance_level);
+       }
+       }
 }
 
 static void set_voice_timeout(Voice *vp, int ch, int note)
@@ -1913,6 +2213,7 @@ static void adjust_panning(int c)
                {
                    int panlevel;
 
+                   if (!pan) pan = 1;  /* make hard left be 1 instead of 0 */
                    panlevel = 63;
                    if (pan - panlevel < 1) panlevel = pan - 1;
                    if (pan + panlevel > 127) panlevel = 127 - pan;
@@ -2409,41 +2710,80 @@ static void update_rpn_map(int ch, int addr, int update_now)
            update_channel_freq(ch);
        break;
       case NRPN_ADDR_0120:     /* Filter cutoff frequency */
+       if(opt_resonance) {
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Pseudo Cutoff Freq (CH:%d VALUE:%d)",ch,val);
+               channel[ch].cutoff_freq = val - 64;
+       }
        break;
       case NRPN_ADDR_0121:     /* Filter Resonance */
+       if(opt_resonance) {
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Pseudo Resonance (CH:%d VALUE:%d)",ch,val);
+               channel[ch].resonance_level = val - 64;
+       }
        break;
       case NRPN_ADDR_0163:     /* Attack Time */
+       if(!opt_tva_attack) {break;}
+       set_envelope_time(ch,val,0);
        break;
       case NRPN_ADDR_0164:     /* EG Decay Time */
+       if(!opt_tva_decay) { break; }
+       set_envelope_time(ch,val,1);
        break;
       case NRPN_ADDR_0166:     /* EG Release Time */
+       if(!opt_tva_release) { break; }
+       set_envelope_time(ch,val,3);
        break;
       case NRPN_ADDR_1400:     /* Drum Filter Cutoff (XG) */
        if(play_system_mode != GS_SYSTEM_MODE)
-           drumflag = 1;
+       drumflag = 1;
        break;
       case NRPN_ADDR_1500:     /* Drum Filter Resonance (XG) */
        if(play_system_mode != GS_SYSTEM_MODE)
-           drumflag = 1;
+       drumflag = 1;
        break;
       case NRPN_ADDR_1600:     /* Drum EG Attack Time (XG) */
        if(play_system_mode != GS_SYSTEM_MODE)
-           drumflag = 1;
+       drumflag = 1;
+       if(!opt_tva_attack) { break; }
+       val = val & 0x7F;
+       note = channel[ch].lastlrpn;
+       val     -= 64;
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"XG Drum Attack Time (CH:%d NOTE:%d VALUE:%d)",ch,note,val);
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       channel[ch].drums[note]->drum_envelope_rate[0] = val / 2;
        break;
       case NRPN_ADDR_1700:     /* Drum EG Decay Time (XG) */
        if(play_system_mode != GS_SYSTEM_MODE)
-           drumflag = 1;
+    drumflag = 1;
+       if(!opt_tva_decay) { break; }
+       val = val & 0x7F;
+       note = channel[ch].lastlrpn;
+       val     -= 64;
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"XG Drum Decay Time (CH:%d NOTE:%d VALUE:%d)",ch,note,val);
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       channel[ch].drums[note]->drum_envelope_rate[1] = val / 2;
        break;
-      case NRPN_ADDR_1800:     /* Coarse Pitch of Drum (GS)
-                                  Fine Pitch of Drum (XG) */
+      case NRPN_ADDR_1800:     /* Coarse Pitch of Drum (GS) */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Coarse Pitch of Drum (CH:%d VALUE:%d)",ch,val);
        drumflag = 1;
+       note = channel[ch].lastlrpn;            
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       val = val - 64 + note;
+       val = val & 0x7F;
+       channel[ch].drums[note]->note = val;
        break;
-      case NRPN_ADDR_1900:     /* Coarse Pitch of Drum (XG) */
-       if(play_system_mode != GS_SYSTEM_MODE)
-           drumflag = 1;
+      case NRPN_ADDR_1900:     /* Fine Pitch of Drum (XG) */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Fine Pitch of Drum (CH:%d VALUE:%d)",ch,val);
+       drumflag = 1;
        break;
-      case NRPN_ADDR_1A00:     /* Level of Drum */
+      case NRPN_ADDR_1A00:     /* Level of Drum */      
        drumflag = 1;
+       note = channel[ch].lastlrpn;
+       if(val > 127) {val = 127;}
+       else if(val < 0) {val = 0;}
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Drum Instrument TVA Level (CH:%d NOTE:%d VALUE:%d)",ch,note,val);
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       channel[ch].drums[note]->drum_level = (double)val / 127;
        break;
       case NRPN_ADDR_1C00:     /* Panpot of Drum */
        drumflag = 1;
@@ -2462,21 +2802,36 @@ static void update_rpn_map(int ch, int addr, int update_now)
            adjust_drum_panning(ch, note);
        break;
       case NRPN_ADDR_1D00:     /* Reverb Send Level of Drum */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Reverb Send Level of Drum (CH:%d VALUE:%d)",ch,val);
        drumflag = 1;
+       note = channel[ch].lastlrpn;            
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       channel[ch].drums[note]->reverb_level = val;
        break;
       case NRPN_ADDR_1E00:     /* Chorus Send Level of Drum */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Chorus Send Level of Drum (CH:%d VALUE:%d)",ch,val);
        drumflag = 1;
+       note = channel[ch].lastlrpn;            
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       channel[ch].drums[note]->chorus_level = val;
        break;
       case NRPN_ADDR_1F00:     /* Variation Send Level of Drum */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Variation Send Level of Drum (CH:%d VALUE:%d)",ch,val);
        drumflag = 1;
+       note = channel[ch].lastlrpn;            
+       if(channel[ch].drums[note] == NULL) {play_midi_setup_drums(ch, note);}
+       channel[ch].drums[note]->delay_level = val;
        break;
       case RPN_ADDR_0000: /* Pitch bend sensitivity */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Pitch Bend Sensitivity (CH:%d VALUE:%d)",ch,val);
        channel[ch].pitchfactor = 0;
        break;
-      case RPN_ADDR_0001:
+      case RPN_ADDR_0001: /* Master Fine Tuning */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Master Fine Tuning (CH:%d VALUE:%d)",ch,val);
        channel[ch].pitchfactor = 0;
        break;
-      case RPN_ADDR_0002:
+      case RPN_ADDR_0002: /* Master Coarse Tuning */
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Master Coarse Tuning (CH:%d VALUE:%d)",ch,val);
        channel[ch].pitchfactor = 0;
        break;
       case RPN_ADDR_7F7F: /* RPN reset */
@@ -2560,6 +2915,11 @@ static void seek_forward(int32 until_time)
            break;
 
          case ME_MODULATION_WHEEL:
+               if(play_system_mode == XG_SYSTEM_MODE) {
+                       current_event->a *= 1.2;
+               } else if(channel[ch].mapID == SC_55_TONE_MAP) {
+                       current_event->a *= 0.7;
+               }
            channel[ch].modulation_wheel =
                midi_cnv_vib_depth(current_event->a);
            break;
@@ -2648,6 +3008,31 @@ static void seek_forward(int32 until_time)
                channel[ch].chorus_level = -opt_chorus_control;
            break;
 
+         case ME_TREMOLO_EFFECT:
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Tremolo Send (CH:%d LEVEL:%d)",ch,current_event->a);
+               break;
+
+         case ME_CELESTE_EFFECT:
+               if(opt_chorus_control) {
+                       channel[ch].delay_level = current_event->a;
+                       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Delay Send (CH:%d LEVEL:%d)",ch,current_event->a);
+               }
+           break;
+
+         case ME_ATTACK_TIME:
+               if(!opt_tva_attack) { break; }
+               set_envelope_time(ch,current_event->a,0);
+               break;
+
+         case ME_RELEASE_TIME:
+               if(!opt_tva_release) { break; }
+               set_envelope_time(ch,current_event->a,3);
+               break;
+
+         case ME_PHASER_EFFECT:
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Phaser Send (CH:%d LEVEL:%d)",ch,current_event->a);
+               break;
+
          case ME_RANDOM_PAN:
            channel[ch].panning = int_rand(128);
            channel[ch].pan_random = 1;
@@ -3084,7 +3469,7 @@ static int apply_controls(void)
            skip_to(0);
            ctl_updatetime(0);
            jump_flag = 1;
-           midi_restart_time = 0;
+               midi_restart_time = 0;
            continue;
 
          case RC_JUMP:
@@ -3981,6 +4366,11 @@ int play_event(MidiEvent *ev)
        break;
 
       case ME_MODULATION_WHEEL:
+       if(play_system_mode == XG_SYSTEM_MODE) {
+               ev->a *= 1.2;
+       } else if(channel[ch].mapID == SC_55_TONE_MAP) {
+               ev->a *= 0.7;
+       }
        channel[ch].modulation_wheel =
            midi_cnv_vib_depth(ev->a);
        update_modulation_wheel(ch, channel[ch].modulation_wheel);
@@ -4066,6 +4456,31 @@ int play_event(MidiEvent *ev)
        }
        break;
 
+      case ME_TREMOLO_EFFECT:
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Tremolo Send (CH:%d LEVEL:%d)",ch,ev->a);
+       break;
+
+      case ME_CELESTE_EFFECT:
+       if(opt_chorus_control) {
+               channel[ch].delay_level = ev->a;
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Delay Send (CH:%d LEVEL:%d)",ch,ev->a);
+       }
+       break;
+
+         case ME_ATTACK_TIME:
+       if(!opt_tva_attack) { break; }
+       set_envelope_time(ch,ev->a,0);
+       break;
+
+         case ME_RELEASE_TIME:
+       if(!opt_tva_release) { break; }
+       set_envelope_time(ch,ev->a,3);
+       break;
+
+      case ME_PHASER_EFFECT:
+       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Phaser Send (CH:%d LEVEL:%d)",ch,ev->a);
+       break;
+
       case ME_RPN_INC:
        if(channel[ch].rpn_7f7f_flag) /* disable */
            break;
@@ -4275,7 +4690,7 @@ static int play_midi(MidiEvent *eventlist, int32 samples)
     rc = RC_NONE;
     for(;;)
     {
-        midi_restart_time = 1;
+       midi_restart_time = 1;
        rc = play_event(current_event);
        if(rc != RC_NONE)
            break;
index 0e22503..135631f 100644 (file)
@@ -164,18 +164,20 @@ enum rpn_data_address_t /* NRPN/RPN */
 struct DrumParts
 {
     int drum_panning;
-    int32 drum_envelope_rate[6]; /* Not supported */
+    int32 drum_envelope_rate[6]; /* Drum Attack,Delay Time */
 
     /* flag for drum random pan */
     int pan_random;
+       
+       /* Level of Drum (0~127[Level of Drum] / 100[GS default]) */
+       double drum_level;
+
+       int8 chorus_level, reverb_level, delay_level, note;
 
 /* Not supported:
  * Drum Filter Cutoff
  * Drum Filter Resonance
- * Drum Attack Time
- * Drum Decay Time
  * Coarse Pitch of Drum/Fine Pitch of Drum
- * Level of Drum
  * Reverb Send Level of Drum
  * Chorus Send Level of Drum
  * Variation Send Level of Drum
@@ -195,6 +197,7 @@ typedef struct {
                           >=0 reverb_level
                           -1: DEFAULT_REVERB_SEND_LEVEL
                           */
+  int8 delay_level;    /* Delay Send Level */
 
   /* Special sample ID. (0 means Normal sample) */
   uint8 special_sample;
@@ -235,6 +238,11 @@ typedef struct {
 
   /* flag for random pan */
   int pan_random;
+
+  /* for Cutoff,Resonance */
+  int cutoff_freq;
+  int resonance_level;
+
 } Channel;
 
 /* Causes the instrument's default panning to be used. */
@@ -318,6 +326,12 @@ extern int opt_chorus_control;
 extern int opt_surround_chorus;
 extern int opt_channel_pressure;
 extern int opt_overlap_voice_allow;
+extern int opt_tva_attack;
+extern int opt_tva_decay;
+extern int opt_tva_release;
+extern int opt_delay_control;
+extern int opt_resonance;
+extern int opt_env_attack;
 extern int noise_sharp_type;
 extern int32 current_play_tempo;
 extern int opt_realtime_playing;
index 69fc17f..4cf647f 100644 (file)
@@ -55,19 +55,7 @@ int read_rcp_file(struct timidity_file *tf, char *magic0, char *fn);
 #define MARKER_END_CHAR                ')'
 #define REDUCE_CHANNELS                16
 
-struct chorus_status_t
-{
-    int status;
-    uint8 voice_reserve[18];
-    uint8 macro[3];
-    uint8 pre_lpf[3];
-    uint8 level[3];
-    uint8 feed_back[3];
-    uint8 delay[3];
-    uint8 rate[3];
-    uint8 depth[3];
-    uint8 send_level[3];
-};
+
 enum
 {
     CHORUS_ST_NOT_OK = 0,
@@ -97,11 +85,22 @@ static StringTable string_event_strtab;
 static int current_read_track;
 static int karaoke_format, karaoke_title_flag;
 static struct chorus_status_t chorus_status;
+static struct delay_status_t delay_status;
+static struct reverb_status_t reverb_status;
+static struct insertion_effect_t insertion_effect;
 static struct midi_file_info *midi_file_info = NULL;
 static char **string_event_table = NULL;
 static int    string_event_table_size = 0;
 int    default_channel_program[256];
 
+void init_delay_status();
+void set_delay_macro(int macro);
+void recompute_delay_status();
+void init_reverb_status();
+void set_reverb_macro(int macro);
+void set_chorus_macro(int macro);
+void init_chorus_status();
+
 /* MIDI ports will be merged in several channels in the future. */
 static int midi_port_number;
 
@@ -131,6 +130,9 @@ int32 readmidi_set_track(int trackno, int rewindp)
 {
     current_read_track = trackno;
     memset(&chorus_status, 0, sizeof(chorus_status));
+       init_reverb_status();
+       init_delay_status();
+       init_chorus_status();
     if(karaoke_format == 1 && current_read_track == 2)
        karaoke_format = 2; /* Start karaoke lyric */
     else if(karaoke_format == 2 && current_read_track == 3)
@@ -665,31 +667,303 @@ int parse_sysex_event_multi(uint8 *val, int32 len, MidiEvent *ev, int32 at)
        num_events++;
     }
 
-    /* GS bank+program change */
-    /* I could not find any documentation on this, so I reverse engineered
-       which bytes do what from midi I have.  It appears to work correctly. */
-    else if(len == 11 &&
-       val[0] == 0x41 && /* Roland ID */
+    /* parsing GS System Exclusive Message... */
+       /* val[4] == Parameter Address(High)
+          val[5] == Parameter Address(Middle)
+          val[6] == Parameter Address(Low)
+          val[7]... == Data...
+          val[last] == Checksum(== 128 - (sum of addresses&data bytes % 128)) 
+       */
+    else if(len >= 9 &&
+          val[0] == 0x41 && /* Roland ID */
        val[1] == 0x10 && /* Device ID */
        val[2] == 0x42 && /* GS Model ID */
-       val[3] == 0x12 && /* Data Set Command */
-       val[4] == 0x40 && /* I wish I knew what this was... */
-       (val[5] >= 0x10 && val[5] < 0x20))   /* channel command */
-    {
-       uint8 p;                                /* Channel part number [0..15] */
-
-       p = val[5] & 0x0F;
-       if(p == 0)
-           p = 9;
-       else if(p <= 9)
-           p--;
-       p = MERGE_CHANNEL_PORT(p);
-
-       MIDIEVENT(at, ME_TONE_BANK_MSB, p, val[7], 0);
-       MIDIEVENT(at, ME_TONE_BANK_LSB, p, 1, 0);     /* assume SC-55 ??? */
-       MIDIEVENT(at, ME_PROGRAM, p, val[8], 0);
-
-       num_events = 3;
+       val[3] == 0x12) /* Data Set Command */
+    {
+               static uint8 userdrum_prog,userdrum_map;
+               uint8 p,dp,udn;
+               int i,addr,addr_h,addr_m,addr_l;
+               p = val[5] & 0x0F;
+               if(p == 0) {p = 9;}
+               else if(p <= 9) {p--;}
+               p = MERGE_CHANNEL_PORT(p);
+
+               dp = (val[5] & 0xF0) >> 4;
+               for(i=0;i<16;i++) {
+                       if(ISDRUMCHANNEL(i)) {
+                               if(dp == 0) {
+                                       dp = i;
+                                       break;
+                               }
+                               dp = 0;
+                       }
+               }
+               if(dp == 0) {dp = 9;}
+
+               udn = (val[5] & 0xF0) >> 4;
+
+               addr = (((int32)val[4])<<16 | ((int32)val[5])<<8 | (int32)val[6]);
+               addr_h = val[4];
+               addr_m = val[5];
+               addr_l = val[6];
+
+               switch(addr_h) {        
+               case 0x40:
+                       if((addr & 0xFFF000) == 0x401000) {
+                               switch(addr & 0xFF) {
+                               case 0x00:
+                                       MIDIEVENT(at, ME_TONE_BANK_MSB,p,val[7],0);
+                                       MIDIEVENT(at, ME_TONE_BANK_LSB,p,3,0);
+                                       MIDIEVENT(at, ME_PROGRAM,p,val[8],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x19:
+                                       MIDIEVENT(at,ME_MAINVOLUME,p,val[7],0);
+                                       num_events++;
+                                       break;
+                               case 0x1A:
+                                       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Velocity Sense Depth: %02X",val[7]);
+                                       break;
+                               case 0x1B:
+                                       ctl->cmsg(CMSG_INFO,VERB_NOISY,"Velocity Sense Offset: %02X",val[7]);
+                                       break;
+                               case 0x1C:
+                                       MIDIEVENT(at,ME_PAN,p,val[7],0);
+                                       num_events++;
+                                       break;
+                               case 0x21:
+                                       MIDIEVENT(at,ME_CHORUS_EFFECT,p,val[7],0);
+                                       num_events++;
+                                       break;
+                               case 0x22:
+                                       MIDIEVENT(at,ME_REVERB_EFFECT,p,val[7],0);
+                                       num_events++;
+                                       break;
+                               case 0x2C:
+                                       MIDIEVENT(at,ME_CELESTE_EFFECT,p,val[7],0);
+                                       num_events++;
+                                       break;
+                               case 0x2A:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x00,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_LSB,p,val[8],0);
+                                       num_events += 4;
+                                       break;
+                               case 0x30:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x08,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x31:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x09,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x32:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x20,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x33:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x21,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x34:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x63,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x35:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x64,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x36:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x66,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x37:
+                                       MIDIEVENT(at,ME_NRPN_MSB,p,0x01,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,p,0x0A,0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,p,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               }
+                       } else if((addr & 0xFFFF00) == 0x400100) {
+                               switch(addr & 0xFF) {
+                               case 0x30:
+                                       set_reverb_macro(val[7]);
+                                       break;
+                               case 0x31:
+                                       reverb_status.character = val[7];
+                                       break;
+                               case 0x32:
+                                       reverb_status.pre_lpf = val[7];
+                                       break;
+                               case 0x33:
+                                       reverb_status.level = val[7];
+                                       break;
+                               case 0x34:
+                                       reverb_status.time = val[7];
+                                       break;
+                               case 0x35:
+                                       reverb_status.delay_feedback = val[7];
+                                       break;
+                               case 0x36:
+                                       reverb_status.pre_delay_time = val[7];
+                                       break;
+                               case 0x50:
+                                       set_delay_macro(val[7]);
+                                       recompute_delay_status();
+                                       break;
+                               case 0x52:
+                                       delay_status.time_center = delay_time_center_table[val[7]];
+                                       recompute_delay_status();
+                                       break;
+                               case 0x53:
+                                       delay_status.time_ratio_left = (double)val[7] / 24;
+                                       recompute_delay_status();
+                                       break;
+                               case 0x54:
+                                       delay_status.time_ratio_right = (double)val[7] / 24;
+                                       recompute_delay_status();
+                                       break;
+                               case 0x55:
+                                       delay_status.level_center = val[7];
+                                       recompute_delay_status();
+                                       break;
+                               case 0x56:
+                                       delay_status.level_left = val[7];
+                                       recompute_delay_status();
+                                       break;
+                               case 0x57:
+                                       delay_status.level_right = val[7];
+                                       recompute_delay_status();
+                                       break;
+                               case 0x58:
+                                       delay_status.level = val[7];
+                                       recompute_delay_status();
+                                       break;
+                               }
+                       }
+                       break;
+               case 0x41:
+                       switch(addr & 0xF00) {
+                       case 0x100:
+                               MIDIEVENT(at,ME_NRPN_MSB,dp,0x18,0);
+                               MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                               MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                               num_events += 3;
+                               break;
+                       case 0x200:
+                               MIDIEVENT(at,ME_NRPN_MSB,dp,0x1A,0);
+                               MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                               MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                               num_events += 3;
+                               break;
+                       case 0x400:
+                               MIDIEVENT(at,ME_NRPN_MSB,dp,0x1C,0);
+                               MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                               MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                               num_events += 3;
+                               break;
+                       case 0x500:
+                               MIDIEVENT(at,ME_NRPN_MSB,dp,0x1D,0);
+                               MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                               MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                               num_events += 3;
+                               break;
+                       case 0x600:
+                               MIDIEVENT(at,ME_NRPN_MSB,dp,0x1E,0);
+                               MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                               MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                               num_events += 3;
+                               break;
+                       case 0x900:
+                               MIDIEVENT(at,ME_NRPN_MSB,dp,0x1F,0);
+                               MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                               MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                               num_events += 3;
+                               break;
+                       }
+                       break;
+               case 0x21:      /* User Drumset */
+                       switch(addr & 0xF00) {
+                               case 0x100:     /* Pitch Coarse */
+                                       MIDIEVENT(at,ME_NRPN_MSB,dp,0x18,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x200:     /* Level */
+                                       MIDIEVENT(at,ME_NRPN_MSB,dp,0x1A,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x400:     /* Panpot */
+                                       MIDIEVENT(at,ME_NRPN_MSB,dp,0x1C,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x500:     /* Reverb Send Level */
+                                       MIDIEVENT(at,ME_NRPN_MSB,dp,0x1D,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x600:     /* Chorus Send Level */
+                                       MIDIEVENT(at,ME_NRPN_MSB,dp,0x1E,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0x900:     /* Delay Send Level */
+                                       MIDIEVENT(at,ME_NRPN_MSB,dp,0x1F,0);
+                                       MIDIEVENT(at,ME_NRPN_LSB,dp,val[6],0);
+                                       MIDIEVENT(at,ME_DATA_ENTRY_MSB,dp,val[7],0);
+                                       num_events += 3;
+                                       break;
+                               case 0xA00:     /* Source Map */
+                                       userdrum_map = val[7];
+                                       break;
+                               case 0xB00:     /* Source Prog */
+                                       userdrum_prog = val[7];
+                                       break;
+                               case 0xC00:     /* Source Note */
+                                       alloc_instrument_bank(1,64+udn);
+                                       if(drumset[userdrum_prog]) {
+                                               if(drumset[userdrum_prog]->tone[val[6]].name) {
+                                                       drumset[64+udn]->tone[val[6]].instrument = load_instrument(1, userdrum_prog, val[7]);
+                                               } else {
+                                                       drumset[64+udn]->tone[val[6]].instrument = load_instrument(1, 0, val[7]);
+                                               }
+                                       } else {
+                                               drumset[64+udn]->tone[val[6]].instrument = load_instrument(1, 0, val[7]);
+                                       }
+                                       ctl->cmsg(CMSG_INFO,VERB_NOISY,"User Drumset (%d %d -> %d %d)",userdrum_prog,val[7],udn+64,val[6]);
+                                       userdrum_prog = 0;
+                                       userdrum_map = 0;
+                                       break;
+                       }
+                       break;
+               }
+               if(!num_events) {
+                       if((addr & 0xFFF0F0) == 0x401040) { 
+                               ctl->cmsg(CMSG_INFO,VERB_NOISY,"GS SysEx Scale Tuning: Not Supported");
+                       }
+               }
     }
 
     return(num_events);
@@ -792,6 +1066,7 @@ int parse_sysex_event(uint8 *val, int32 len, MidiEvent *ev)
            {
              case 0x8: /* macro */
                memcpy(chorus_status.macro, body, 3);
+               set_chorus_macro(val[7]);
                break;
              case 0x9: /* PRE-LPF */
                memcpy(chorus_status.pre_lpf, body, 3);
@@ -1613,6 +1888,25 @@ void change_system_mode(int mode)
 {
     int mid;
 
+       switch(opt_env_attack) {
+       case 1:
+               attack_vol_table = def_vol_table;
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Attack Type: Exponential1");
+               break;
+       case 2:
+               attack_vol_table = gs_vol_table;
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Attack Type: Exponential2");
+               break;
+       case 3:
+               attack_vol_table = log_vol_table;
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Attack Type: Logarithmic");
+               break;
+       default:
+               attack_vol_table = linear_vol_table;
+               ctl->cmsg(CMSG_INFO,VERB_NOISY,"Attack Type: Linear");
+               break;
+       }
+
     if(opt_system_mid)
     {
        mid = opt_system_mid;
@@ -1620,7 +1914,6 @@ void change_system_mode(int mode)
     }
     else
        mid = current_file_info->mid;
-
     switch(mode)
     {
       case GM_SYSTEM_MODE:
@@ -1655,7 +1948,7 @@ void change_system_mode(int mode)
            break;
          default:
            play_system_mode = DEFAULT_SYSTEM_MODE;
-           vol_table = def_vol_table;
+               vol_table = def_vol_table;
            break;
        }
        break;
@@ -1959,7 +2252,7 @@ static MidiEvent *groom_list(int32 divisions, int32 *eventsp, int32 *samplesp)
            bank_lsb[ch] = meep->event.a;
            break;
 
-         case ME_CHORUS_TEXT:
+         case ME_CHORUS_TEXT:                            
          case ME_LYRIC:
          case ME_MARKER:
          case ME_INSERT_TEXT:
@@ -3011,3 +3304,108 @@ char *event2string(int id)
        return NULL;
     return string_event_table[id];
 }
+
+void init_delay_status()
+{
+       delay_status.level = 0x40;
+       delay_status.level_center = 0x7F;
+       delay_status.level_left = 0;
+       delay_status.level_right = 0;
+       delay_status.time_center = 340.0;
+       delay_status.time_ratio_left = 1 / 24;
+       delay_status.time_ratio_right = 1 / 24;
+       delay_status.feed_back = 0x40;
+       delay_status.fb_loop = 0;
+       if(play_system_mode == XG_SYSTEM_MODE) {
+               delay_status.level_left = 0x7F;
+               delay_status.level_right = 0x7F;
+       }
+}
+
+void recompute_delay_status()
+{
+       delay_status.level_ratio_center = delay_status.level * delay_status.level_center / 2048383;
+       delay_status.level_ratio_left = delay_status.level * delay_status.level_left / 2048383;
+       delay_status.level_ratio_right = delay_status.level * delay_status.level_right / 2048383;
+       delay_status.time_left = delay_status.time_center * delay_status.time_ratio_left;
+       delay_status.time_right = delay_status.time_center * delay_status.time_ratio_right;
+       delay_status.time_left = delay_status.time_left & 1000;
+       delay_status.time_right = delay_status.time_right & 1000;
+       delay_status.fb_loop = delay_status.feed_back - 64;
+       if(delay_status.fb_loop < 0) {delay_status.fb_loop = -delay_status.fb_loop;}
+       delay_status.fb_ratio = 0.5 + (double)delay_status.fb_loop / 128.0;
+       delay_status.fb_loop = delay_status.fb_loop / 8;
+}
+
+void set_delay_macro(int macro)
+{
+       macro *= 10;
+       delay_status.time_center = delay_time_center_table[delay_macro_presets[macro+1]];
+       delay_status.time_ratio_left = delay_macro_presets[macro+2] / 24;
+       delay_status.time_ratio_right = delay_macro_presets[macro+3] / 24;
+       delay_status.level_center = delay_macro_presets[macro+4];
+       delay_status.level_left = delay_macro_presets[macro+5];
+       delay_status.level_right = delay_macro_presets[macro+6];
+       delay_status.level = delay_macro_presets[macro+7];
+       delay_status.feed_back = delay_macro_presets[macro+8];
+}
+
+struct delay_status_t *get_delay_status()
+{
+       return &delay_status;
+}
+
+void init_reverb_status()
+{
+       reverb_status.character = 0x04;
+       reverb_status.pre_lpf = 0;
+       reverb_status.level = 0x40;
+       reverb_status.time = 0x40;
+       reverb_status.delay_feedback = 0;
+       reverb_status.pre_delay_time = 0;
+}
+
+void set_reverb_macro(int macro)
+{
+       macro *= 6;
+       reverb_status.character = reverb_macro_presets[macro];
+       reverb_status.pre_lpf = reverb_macro_presets[macro+1];
+       reverb_status.level = reverb_macro_presets[macro+2];
+       reverb_status.time = reverb_macro_presets[macro+3];
+       reverb_status.delay_feedback = reverb_macro_presets[macro+4];
+       reverb_status.pre_delay_time = reverb_macro_presets[macro+5];
+}
+
+struct reverb_status_t *get_reverb_status()
+{
+       return &reverb_status;
+}
+
+void init_chorus_status()
+{
+       chorus_status.macro[0] = 0;
+       chorus_status.pre_lpf[0] = 0;
+       chorus_status.level[0] = 0x40;
+       chorus_status.feed_back[0] = 0x08;
+       chorus_status.delay[0] = 0x50;
+       chorus_status.rate[0] = 0x03;
+       chorus_status.depth[0] = 0x13;
+       chorus_status.send_level[0] = 0;
+}
+
+void set_chorus_macro(int macro)
+{
+       macro *= 8;
+       chorus_status.pre_lpf[0] = chorus_macro_presets[macro];
+       chorus_status.level[0] = chorus_macro_presets[macro+1];
+       chorus_status.feed_back[0] = chorus_macro_presets[macro+2];
+       chorus_status.delay[0] = chorus_macro_presets[macro+3];
+       chorus_status.rate[0] = chorus_macro_presets[macro+4];
+       chorus_status.depth[0] = chorus_macro_presets[macro+5];
+       chorus_status.send_level[0] = chorus_macro_presets[macro+6];
+}
+
+struct chorus_status_t *get_chorus_status()
+{
+       return &chorus_status;
+}
index d090cc0..c8d60a5 100644 (file)
@@ -109,6 +109,68 @@ struct midi_file_info
     struct timidity_file *pcm_tf;
 };
 
+struct delay_status_t
+{
+       uint8 level;            /* master level */
+    uint8 level_center;
+    uint8 level_left;
+    uint8 level_right;
+    int time_center;                   /* (ms) */
+    double time_ratio_left;            /* gs_val/24 */
+    double time_ratio_right;   /* gs_val/24 */
+       int time_left;
+       int time_right;
+    uint8 feed_back;   /* reserved. */
+       uint8 pre_lpf;          /* reserved. */
+       double level_ratio_center;
+       double level_ratio_left;
+       double level_ratio_right;
+       int fb_loop;
+       double fb_ratio;
+};
+
+struct reverb_status_t
+{
+       uint8 character;
+       uint8 pre_lpf;
+       uint8 level;
+       uint8 time;
+       uint8 delay_feedback;
+       uint8 pre_delay_time;   /* (ms) */
+};
+
+struct chorus_status_t
+{
+    int status;
+    uint8 voice_reserve[18];
+    uint8 macro[3];
+    uint8 pre_lpf[3];
+    uint8 level[3];
+    uint8 feed_back[3];
+    uint8 delay[3];
+    uint8 rate[3];
+    uint8 depth[3];
+    uint8 send_level[3];
+};
+
+struct insertion_effect_t
+{
+       uint8 type_lsb;
+       uint8 type_msb;
+       uint8 type;
+       uint8 channel[16];      /* 0:BYPASS, 1:EFX */
+       uint8 parameter[20];
+       uint8 send_reverb;
+       uint8 send_chorus;
+       uint8 send_delay;
+       uint8 control_source1;
+       uint8 control_depth1;
+       uint8 control_source2;
+       uint8 control_depth2;
+       uint8 send_eq_switch;
+};
+
+
 extern int32 readmidi_set_track(int trackno, int rewindp);
 extern void readmidi_add_event(MidiEvent *newev);
 extern void readmidi_add_ctl_event(int32 at, int ch, int control, int val);
@@ -142,4 +204,8 @@ extern int readmidi_wrd_mode;
 extern int play_system_mode;
 extern FLOAT_T tempo_adjust;
 
+extern struct delay_status_t *get_delay_status();
+extern struct reverb_status_t *get_reverb_status();
+extern struct chorus_status_t *get_chorus_status();
+
 #endif /* ___READMIDI_H_ */
index 80faea6..b8c6687 100644 (file)
@@ -30,7 +30,8 @@
 #ifndef ___REVERB_H_
 #define ___REVERB_H_
 
-#define DEFAULT_REVERB_SEND_LEVEL   54
+/* #define DEFAULT_REVERB_SEND_LEVEL   54 */
+#define DEFAULT_REVERB_SEND_LEVEL 40
 
 extern void do_reverb(int32 *, int32);
 extern void do_ch_reverb(int32 *, int32);
index 56b5d2c..778cc23 100644 (file)
@@ -79,7 +79,7 @@ typedef struct _SFSampleInfo {
        /* ver.2 additional info */
        int32 samplerate;
        uint8 originalPitch;
-       uint8 pitchCorrection;
+       int8 pitchCorrection;
        uint16 samplelink;
        uint16 sampletype;  /*1=mono, 2=right, 4=left, 8=linked, $8000=ROM*/
        /* optional info */
index 8c65087..e6f5730 100644 (file)
@@ -1484,6 +1484,8 @@ static void set_rootkey(SFInfo *sf, SampleList *vp, LayerTable *tbl)
        /* from sample info */
        vp->root = sp->originalPitch;
        vp->tune = sp->pitchCorrection;
+       if (vp->tune >= 0x80)
+               vp->tune -= 0x100; /* correct sign */
     }
 
     /* orverride root key */
@@ -1496,6 +1498,9 @@ static void set_rootkey(SFInfo *sf, SampleList *vp, LayerTable *tbl)
     /* correct too high pitch */
     if(vp->root >= vp->high + 60)
        vp->root -= 60;
+
+    /* correct tune with the sustain level of modulation envelope */
+    vp->tune += ((int)tbl->val[SF_env1ToPitch] * (1000 - (int)tbl->val[SF_sustainEnv1])) / 1000;
 }
 
 static void set_rootfreq(SampleList *vp)
@@ -1653,55 +1658,46 @@ static void convert_vibrato(SampleList *vp, LayerTable *tbl)
 #define MIN_DATAVAL -32768
 #endif
 
-/* ## FIXME */
 static void do_lowpass(Sample *sp, int32 freq, FLOAT_T resonance)
 {
-       double A, B, C;
-       sample_t *buf, pv1, pv2;
-       int32 i;
+       int32 i,length;
+       FLOAT_T f,k,p,r,scale;
+       sample_t *buf;
+       sample_t y1,y2,y3,y4,oldy1,oldy2,oldy3,oldx,x;
 
        if (freq > sp->sample_rate * 2) {
                ctl->cmsg(CMSG_WARNING, VERB_NORMAL,
-                         "Lowpass: center must be < data rate*2");
+                         "Lowpass: center freq must be < data rate * 2");
                return;
        }
-       A = 2.0 * M_PI * freq * 2.5 / sp->sample_rate;
-       B = exp(-A / sp->sample_rate);
-       A *= 0.8;
-       B *= 0.8;
-       C = 0;
-
-       if (resonance) {
-               double a, b, c;
-               int32 width;
-               width = freq / 5;
-               c = exp(-2.0 * M_PI * width / sp->sample_rate);
-               b = -4.0 * c / (1+c) * cos(2.0 * M_PI * freq / sp->sample_rate);
-               a = sqrt(1 - b * b / (4 * c)) * (1 - c);
-               b = -b; c = -c;
-
-               A += a * resonance;
-               B += b;
-               C = c;
-       }
 
-       pv1 = 0;
-       pv2 = 0;
        buf = sp->data;
+       length = sp->data_length;
 
-       for (i = 0; i < sp->data_length; i++) {
-               sample_t l = *buf;
-               double d = A * l + B * pv1 + C * pv2;
-               if (d > MAX_DATAVAL)
-                       d = MAX_DATAVAL;
-               else if (d < MIN_DATAVAL)
-                       d = MIN_DATAVAL;
-               pv2 = pv1;
-#ifndef CUTOFF_AMPTUNING
-               pv1 = *buf++ = (sample_t)d;
-#else
-               pv1 = (sample_t)d;
-               *buf++ = (sample_t)(d * CUTOFF_AMPTUNING);
-#endif
+       y1=y2=y3=y4=oldx=oldy1=oldy2=oldy3=0;
+
+       f = 2.0 * freq / sp->sample_rate;
+       k = 3.6*f - 1.6*f*f - 1;
+       p = (k+1)*0.5;
+       scale = exp((1-p)*1.386249);
+       r = resonance * scale;
+       r /= 4;
+       y4 = buf[0];
+
+       for(i=0;i<length;i++) {
+               buf[i] -= r * y4;
+               x = buf[i];
+
+               y1=(x+oldx)*p - k*y1;
+               y2=(y1+oldy1)*p - k*y2;
+               y3=(y2+oldy2)*p - k*y3;
+               y4=(y3+oldy3)*p - k*y4;
+
+               y4 -= y4 * y4 * y4 * 0.166667;
+
+               oldx = x;
+               oldy1 = y1;
+               oldy2 = y2;
+               oldy3 = y3;
        }
 }
index 76291d1..9fbb760 100644 (file)
@@ -136,14 +136,37 @@ static int open_output(void)
     int include_enc = 0, exclude_enc = PE_BYTESWAP;
     struct stat sb;
     audio_info_t auinfo;
+    char *audio_dev, *audio_ctl_dev, *tmp_audio;
+
+
+    /* See if the AUDIODEV environment variable is defined, and set the
+       audio device accordingly  - Lalit Chhabra 23/Oct/2001 */
+    if((audio_dev  = getenv("AUDIODEV")) != NULL)
+    {
+      dpm.id_name = malloc(strlen(audio_dev));
+      dpm.name = malloc(strlen(audio_dev));
+      strcpy(dpm.name, audio_dev);
+      strcpy(dpm.id_name, audio_dev);
+
+      tmp_audio = malloc(strlen(audio_dev) + 3);
+      audio_ctl_dev = malloc(strlen(audio_dev) + 3);
+
+      strcpy(tmp_audio, audio_dev);
+      strcpy(audio_ctl_dev, strcat(tmp_audio, "ctl"));
+    }
+    else
+    {
+      audio_ctl_dev = malloc(strlen(AUDIO_CTLDEV) + 3);
+      strcpy(audio_ctl_dev, AUDIO_CTLDEV);
+    }
 
     output_counter = play_samples_offset = 0;
 
     /* Open the audio device */
-    if((audioctl_fd = open(AUDIO_CTLDEV, O_RDWR)) < 0)
+    if((audioctl_fd = open(audio_ctl_dev, O_RDWR)) < 0)
     {
        ctl->cmsg(CMSG_ERROR, VERB_NORMAL,
-                 "%s: %s", AUDIO_CTLDEV, strerror(errno));
+                 "%s: %s", audio_ctl_dev, strerror(errno));
        return -1;
     }
 
index a4322fe..2d52959 100644 (file)
@@ -34,6 +34,7 @@
 #include "config.h"
 #endif /* HAVE_CONFIG_H */
 #include <stdio.h>
+#include <math.h>
 #include "timidity.h"
 #include "common.h"
 #include "tables.h"
@@ -460,8 +461,9 @@ int8 *iplookup;
 
 void init_tables(void)
 {
+  int i;
 #ifdef LOOKUP_HACK
-  int i,j,v;
+  int j,v;
   mixup = (int32 *)safe_malloc(1<<(7+8+2)); /* Give your cache a workout! */
 
   for (i=0; i<128; i++)
@@ -483,6 +485,32 @@ void init_tables(void)
 #endif
 
 #endif
+
+       for(i=0;i<128;i++)
+       {
+               linear_vol_table[i] = (FLOAT_T)i / 127.0;
+               log_vol_table[i] = log10((FLOAT_T)i * 9.0 / 127.0 + 1);
+       }
+       for(i=0;i<128;i++)
+       {
+               switch(opt_velocity_table) {
+               case 0:
+                       velocity_table[i] = i;
+                       break;
+               case 1:
+                       velocity_table[i] = ((sqrt((FLOAT_T)i/127) * 127) + i) / 2;
+                       break;
+               case 2:
+                       velocity_table[i] = sqrt((FLOAT_T)i/127) * 127;
+                       break;
+               case 3:
+                       velocity_table[i] = (((FLOAT_T)i * (FLOAT_T)i / 127) + i) / 2;
+                       break;
+               case 4:
+                       velocity_table[i] = (FLOAT_T)i * (FLOAT_T)i / 127;
+                       break;
+               }
+       }
 }
 
 #ifdef LOOKUP_HACK
@@ -1003,3 +1031,73 @@ uint8 _l2u_[] =
 };
 uint8 *_l2u = _l2u_ + 4096;
 #endif /* LOOKUP_HACK */
+
+uint8 reverb_macro_presets[] =
+{      /* CHARACTER,PRE-LPF,LEVEL,TIME,DELAY FEEDBACK,PREDELAY TIME */
+       0,3,64,80,0,0,          /* 00: Room1 */
+       1,4,64,56,0,0,          /* 01: Room2 */
+       2,0,64,64,0,0,          /* 02: Room3 */
+       3,4,64,72,0,0,          /* 03: Hall1 */
+       4,0,64,64,0,0,          /* 04: Hall2 */
+       5,0,64,88,0,0,          /* 05: Plate */
+       6,0,64,32,40,0,         /* 06: Delay */
+       7,0,64,64,32,0,         /* 07: Panning Delay */
+};
+
+uint8 chorus_macro_presets[] =
+{      /* PRE-LPF,LEVEL,FEEDBACK,DELAY,RATE,DEPTH,SEND TO REVERB,SEND TO DELAY */
+       0,64,0,112,3,5,0,0,             /* 00: Chorus1 */
+       0,64,5,80,9,19,0,0,             /* 01: Chorus2 */
+       0,64,8,80,3,19,0,0,             /* 02: Chorus3 */
+       0,64,16,64,9,16,0,0,    /* 03: Chorus4 */
+       0,64,64,127,2,24,0,0,   /* 04: Feedback Chorus */
+       0,64,112,127,1,5,0,0,   /* 05: Flanger */
+       0,64,0,127,0,127,0,0,   /* 06: Short Delay */
+       0,64,80,127,0,127,0,0,  /* 07: Short Delay(Feedback) */
+};
+
+uint8 delay_macro_presets[] = 
+{      /* PRE-LPF,TIME(C),RATIO(L),RATIO(R),LEVEL(C),LEVEL(L),LEVEL(R),LEVEL,FEEDBACK,LEVEL TO REVERB */
+       0,97,1,1,127,0,0,64,79,0,               /* 00: Delay1 */
+       0,106,1,1,127,0,0,64,79,0,              /* 01: Delay2 */
+       0,115,1,1,127,0,0,64,63,0,              /* 02: Delay3 */
+       0,83,1,1,127,0,0,64,71,0,               /* 03: Delay4 */
+       0,90,12,24,0,125,60,64,73,0,    /* 04: Pan Delay1 */
+       0,109,12,24,0,125,60,64,70,0,   /* 05: Pan Delay2 */
+       0,115,12,24,0,120,64,64,72,0,   /* 06: Pan Delay3 */
+       0,93,12,24,0,120,64,64,63,0,    /* 07: Pan Delay4 */
+       0,109,12,24,0,114,60,64,60,36,  /* 08: Delay to Reverb */
+       0,110,21,31,97,127,67,64,39,0,  /* 09: Pan Repeat */
+};
+
+FLOAT_T delay_time_center_table[] =
+{      /* 0x00~0x73, 0.1ms~1000ms */
+       0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
+       2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8,
+       5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5,
+       10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+       20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
+       50, 55, 60, 65, 70, 75, 80, 85, 90, 95,
+       100, 110, 120, 130, 140, 150, 160, 170, 180, 190,
+       200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480,
+       500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
+};
+
+FLOAT_T pre_delay_time_table[] =
+{
+       0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
+       2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9,
+       4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9,
+       5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5,
+       10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+       30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+       50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88,
+       90, 92, 94, 96, 98, 100, 100, 100,
+};
+
+uint8 velocity_table[128];
+
+FLOAT_T linear_vol_table[128];
+FLOAT_T log_vol_table[128];
+FLOAT_T *attack_vol_table;
+int opt_velocity_table = 0;
index 1ee922a..c7251d4 100644 (file)
@@ -48,6 +48,17 @@ extern int32 *mixup;
 extern int8 *iplookup;
 #endif
 #endif
+extern uint8 reverb_macro_presets[];
+extern uint8 chorus_macro_presets[];
+extern uint8 delay_macro_presets[];
+extern FLOAT_T delay_time_center_table[];
+extern FLOAT_T pre_delay_time_table[];
+extern uint8 velocity_table[];
+extern int opt_velocity_table;
+extern FLOAT_T linear_vol_table[];
+extern FLOAT_T log_vol_table[];
+extern FLOAT_T *attack_vol_table;
+
 
 extern void init_tables(void);
 
index 01f4e84..c82072d 100644 (file)
@@ -500,7 +500,7 @@ typedef struct _ChannelBitMask
 /* Greatly reduces popping due to large volume/pan changes.
  * This is definately worth the slight increase in CPU usage.
  */
-#define SMOOTH_MIXING
+/*#define SMOOTH_MIXING */
 
 #ifdef LOOKUP_HACK
    typedef int8 sample_t;
index c643c94..72482cc 100644 (file)
@@ -64,8 +64,11 @@ extern char *getcwd(char *buf, size_t size);
 #endif /* HAVE_STRSTR */
 
 #ifndef HAVE_STRNCASECMP
-int strncasecmp(char *s1, char *s2, unsigned int len);
+extern int strncasecmp(char *s1, char *s2, unsigned int len);
 #endif /* HAVE_STRNCASECMP */
 
+#ifndef HAVE_MKSTEMP
+extern int mkstemp(char *template);
+#endif /* HAVE_MKSTEMP */
 
 #endif /* ___SUPPORT_H_ */