diff src/Input/console/gme_notes.txt @ 0:13389e613d67 trunk

[svn] - initial import of audacious-plugins tree (lots to do)
author nenolod
date Mon, 18 Sep 2006 01:11:49 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Input/console/gme_notes.txt	Mon Sep 18 01:11:49 2006 -0700
@@ -0,0 +1,181 @@
+Game_Music_Emu 0.3.0 Notes
+--------------------------
+Author : Shay Green <hotpop.com@blargg>
+Website: http://www.slack.net/~ant/
+Forum  : http://groups.google.com/group/blargg-sound-libs
+
+
+Overview
+--------
+This library is composed of several independent game music emulators
+derived from the common Music_Emu interface. Each emulator can load a
+game music file and play from any track. To play a game music file, do
+the following:
+
+- Determine file's type
+- Create appropriate emulator
+- Set sample rate
+- Load file into emulator
+- Start desired track
+- When samples are needed, call play()
+- When done, delete emulator
+
+See Music_Emu.h for reference.
+
+
+Information Fields
+------------------
+Game music files include text fields with information about the game and
+track. These are stored in the file's header or in an embedded block.
+Text fields in most game music formats do *not* have a nul terminator if
+the string completely fills the field. The simplest way to handle this
+is to copy the string out and manually add a nul terminator at the end.
+
+This library is currently focused only on actual emulation, so it
+doesn't provide a common interface to the different schemes each game
+music file format uses. Refer to the file's official specification for
+further information.
+
+
+Modular Construction
+--------------------
+The library is made of many fairly independent modules. If you're using
+only one music file emulator, you can eliminate many of the library
+sources from your program. Refer to the files list in readme.txt to get
+a general idea of what can be removed. Post to the forum if you'd like
+me to put together a smaller version for a particular use, as this only
+takes me a few minutes to do.
+
+If you want to use one of the individual sound chip emulators in your
+console emulator, first check the libraries page on my website since I
+have released several of them as standalone libraries with included
+documentation and examples on their use.
+
+The "classic" sound chips use my Blip_Buffer library, which greatly
+simplifies their implementation and efficiently handles band-limited
+synthesis. It is also available as a standalone library with
+documentation and many examples.
+
+
+Sound Parameters
+----------------
+All emulators support adjustable output sampling rate, set with
+Music_Emu::set_sample_rate(). A rate of 44100 should work well on most
+systems. Since band-limited synthesis is used, a sampling rate above
+48000 Hz is not necessary. 
+
+Some emulators support adjustable treble and bass frequency equalization
+(NSF, GBS, VGM) using Music_Emu::set_equalizer(). Parameters are
+specified using Music_Emu::equalizer_t eq = { treble_dB, bass_freq }.
+Treble_dB sets the treble level (in dB), where 0.0 dB gives normal
+treble; -200.0 dB is quite muffled, and 5.0 dB emphasizes treble for an
+extra crisp sound. Bass_freq sets the frequency where bass response
+starts to diminish; 15 Hz is normal, 0 Hz gives maximum bass, and 15000
+Hz removes all bass. For example, the following makes the sound
+extra-crisp but lacking bass:
+
+	Music_Emu::equalizer_t eq = { 5.0, 1000 };
+	music_emu->set_equalizer( eq );
+
+Each emulator's equalization defaults to a profile that approximates its
+particular console's sound quality; this default can be determined by
+calling Music_Emu::equalizer() just after creating the emulator. Some
+emulators include other profiles for different versions of the system.
+The Music_Emu::tv_eq profile gives sound as if coming from a TV speaker.
+For example, to use Famicom sound equalization with the NSF emulator, do
+the following:
+
+	nsf_emu->set_equalizer( Nsf_Emu::famicom_eq );
+
+
+VGM/GYM YM2413 & YM2612 FM Sound
+--------------------------------
+The library plays Sega Genesis/Mega Drive music using a YM2612 FM sound
+chip emulator based on Gens. Because this has some inaccuracies, other
+YM2612 emulators can be used in its place by reimplementing the
+interface in YM2612_Emu.h. Available on my website is a modified version
+of MAME's YM2612 emulator, which sounds better in some ways and whose
+author is still making improvements.
+
+VGM music files using the YM2413 FM sound chip are also supported, but a
+YM2413 emulator isn't included. Similar to above, I have put one of the
+available YM2413 emulators on my website that can be used directly.
+
+
+Misc
+----
+Some emulators have constructor parameters which can be specified when
+creating the object. For example, this creates a Vgm_Emu with
+oversampling off and a tempo of 83%:
+
+	Vgm_Emu* emu = new Vgm_Emu( false, 0.83 );
+
+For a full example of using Game_Music_Emu see the source code for Game
+Music Box, a full-featured game music player for Mac OS:
+
+	http://www.slack.net/~ant/game-music-box/dev.html
+
+
+Thanks
+------
+Big thanks to Chris Moeller (kode54) for help with library testing and
+feedback, for maintaining the Foobar2000 plugin foo_gep based on it, and
+for original work on openspc++ that was used when developing Spc_Emu.
+Brad Martin's excellent OpenSPC SNES DSP emulator worked well from the
+start. Also thanks to Richard Bannister, Mahendra Tallur, Shazz, and the
+Audacious team for testing and using the library in their game music
+players.
+
+
+Solving Problems
+----------------
+If you're having problems, try the following:
+
+- Enable debugging support in your environment. This enables assertions
+and other run-time checks.
+
+- Turn the compiler's optimizer is off. Sometimes an optimizer generates
+bad code.
+
+- If multiple threads are being used, ensure that only one at a time is
+accessing a given set of objects from the library. This library is not
+in general thread-safe, though independent objects can be used in
+separate threads.
+
+- If all else fails, see if the demos work.
+
+
+Error handling
+--------------
+Functions which can fail have a return type of blargg_err_t, which is a
+pointer to an error string (const char*). If the function is successful
+it returns blargg_success (NULL), otherwise it returns a pointer to an
+error string. Errors which the caller can easily detect are only checked
+with debug assertions; blargg_err_t returns values are only used for
+genuine run-time errors that can't be easily predicted in advance (out
+of memory, I/O errors, incompatible file data).
+
+To allow compatibility with older C++ compilers, no exceptions are
+thrown by any of the modules and code is generally exception-safe. Any
+exceptions thrown by the standard library or caller-supplied functions
+are allowed to propagate normally.
+
+
+Configuration
+-------------
+The header "blargg_common.h" is used to establish a common environment,
+and is #included at the beginning of all library headers and sources. It
+attempts to automatically determine the features of the environment, but
+might need help. Refer to "blargg_common.h" for descriptions of
+features.
+
+If defined HAVE_CONFIG_H in the compiler command-line, the user-provided
+"config.h" is included at the beginning of each library header file,
+allowing configuration options for the library to be set. I have
+attempted to design the library so that configuration can be done
+*without* modifying any of the library sources and header files. This
+makes it easy to upgrade to a new version without losing any
+customizations to its configuration.
+
+Post to the forum if you have problems or suggestions.
+