maplay 1.2+ for Win32

What's New?

12/16/97: Version 1.A

Sorry for the delay on this version, I've had a hellish semester, and
I've made lots of changes. My roommate, CS partner, and friend Zibin
Yang helped me make lots of improvements to the list management.

- I am attempting to define a new multimedia standard based on
  playlists. Playlists can be made portable, so you can burn them
  on CD's or ZIP drives, and load them from any computer with
  maplay 1.2+. This is done with the expansion of "%BASE_DIR%" in
  the list, which is the directory the playlist file is in.

- Playlist items can have images and/or lyrics associated with them.
  Right now maplay 1.2+ uses 3rd party software to display them, but
  in the future, timed lyrics will be supported natively. These lists
  won't be opened correctly by other players, however.

- A graphical editor for playlists has been added with lots of
  features, like testing, moving, editing item properties, etc.
  Unfortunately, dragging a file into the list doesn't work
  correctly yet.

- Playlists can be saved.

- CD audio is now supported. You can either open .CDA files from
  your CD-ROM drive, or use the CD List command to create a
  playlist with the CD-ROM tracks. A hybrid type disc has data
  as track 1, so it won't be added to the playlist.

- A remote control mode has been added. You can use mouse movements
  or clicks to play, pause, stop, go to the next track, etc. So if
  you have some sort of wireless mouse, you can use it as a remote
  control. This works really well for a product whose manufacturer
  ignored my request for a donation, so I won't mention the product.
  To leave the remote control mode, click the right-mouse button,
  or hit the "R" key.

- Added an always on top option.

The following were done by Zibin Yang entirely:

- Move the mouse pointer over the Next and Previous button to see the
  name of the next and previous song via tool-tip, respetively

- Either hold down the Play button or choose Jump Window from the
  Playlist menu to get the currect list of songs; click on the song
  name to play.

07/06/97: Version 1.90

- MPEG-2 LSF streams can now be decoded!

- Added menu options to save files, delete files, and go to the
  maplay 1.2+ web site. Also added menu items for recent files and
  lists.

- Added the ability to decode an MPEG stream to a PCM Wave file.

- Added ability to play other types of multimedia files supported by
  ActiveMovie, including Sun AU, Apple AIFF, MPEG-1 and Quicktime
  movies (!)). ActiveMovie must be installed for this to work.

- Redid the options dialog box to be a property sheet. Also many more
  options were added: 

  * Playing immediately after opening a file
  * Exiting after playing a file from the command line
  * Minimizing into the systray
  * Changing the priority of the MPEG decoding thread
  * Using a custom scalefactor instead of the default

  These options are now stored in the registry, so they will remain
  constant between sessions if you save them.		

- Added a context menu that is displayed when the right mouse button
  is clicked. The context menu that is displayed if you right click
  on the systray icon doesn't go away correctly yet.

- Added the .M3U extension to list of acceptable playlist extensions.
  This will allow maplay to be used in place of Winplay3 when running 
  playlist managers.

- Changed the filename display when playing lists. The word "Track" 
  has been eliminated, allowing more the the filename to be shown.
  This is due to a suggestion from Nai-Chi Lee.

- Fixed the instance behavior. If "Allow multiple instances" is 
  off, running another instance of mp2win will simply bring up the
  first instance. If you try to play a file from the command-line
  (like opening a MP3 file from Explorer), the file will be sent
  to the first instance of mp2win.

- Fixed decoding of Layer I streams.

- Fixed a bug that caused the trackbar and playing to not be updated
  if a file was repeated.

- Fixed a bug that caused the program to crash after playing a list.

04/20/97 : Version 1.81

- Ported a Win32 console version, which must be downloaded separately
  from the normal GUI version and the source. The console version does
  not run on Win 3.1 systems with Win32s yet, and does not include
  playlist features or the ability to play WAV or MIDI files.

- Added drag-and-drop capability. Just drag any file that maplay 
  recognizes from Explorer, drop in in maplay, and it will begin 
  playing automatically.

- For slower computers, decoding a single channel of a stereo layer 
  III stream has now been implemented. Also, a downmixing option has 
  been added. This will reduce the CPU time by downmixing the 
  channels before fully decoding them. Right now, downmixing works
  for layer III only. Finally, a Cancel button has been added to
  the dialog box that lets you select which channels you want. 
  (The pre-decode bar has been disabled, because the feature _still_
  has not been implemented.)

- Fixed a bug that caused "beeps" to be played when decoding some 
  layer III streams.

- Performance improvements of almost 25% due to optimized
  SynthesisFilter routines by Conrad Song, a fast 9 point
  IDCT by Mikko Tommila, and some of my own optimizations.

- Better syncing allows for many corrupt streams to be decoded, and
  should cause less problems with streams with ancillary data.

- An error message will be displayed if and MPEG-2 stream is opened,
  since these streams are not supported yet.

- Fixed the window so that it is no longer resizable.

- Multithreading is now perfect, as far as I know, so no more 
  waiting for the decoder thread to be killed.

- WAV and MIDI files with spaces in their filenames can now be played. 
  Thanks to Alexander Grigoriev for his suggestion on how to fix the
  problem.

- New icon used as the application icon (replaces my beautiful, 
  hand-drawn "m"), created by David Low. Also I fixed my file
  folder icon and the weird colors of the pause button.

- Eliminated the need for the external file "huffdec". Timo Jantunen
  wrote a program to write out the huffman tables, which are now
  included in the code. If you still have the file "huffdec" in 
  your windows directory, you can delete it.	

- Empty playlists no longer crash maplay, and playlists are checked
  more carefully.

- Code is much nicer and more portable now. Support for MPEG-2 LSF is 
  not finished yet, so an error message will be displayed when opening
  these files.

02/01/97 : Version 1.80

- Layer III files can now be decoded! However, more optimization needs          
  to be done, as decoding a stereo stream takes 75% of the CPU time on 
  a Pentium-100. Also I have not implemented mono playback of a stereo     
  stream or the Low Frequency Extensions of MPEG-2.

- Threading cleanups are much better, but still have problems. This     
  causes memory leaks.

11/29/96 : Version 1.72 (not officially released)

- Added syncword detection. If the stream does not sync, maplay
  skips a byte and attempts to sync again. This is an Intel specific 
  change due to the stupid byte order. The change makes it possible 
  to playback Layer II files produced by DALET.

10/10/96 : Version 1.71

- Installation is now through an InstallShield application. If you 
  want the source files, choose the custom installation. Otherwise, 
  just choose the typical installation. Also, the MP2 extension is
  automatically associated to maplay, so you don't have to do this   
  yourself.

- Discovered that memory leaks as waveform audio is being played in
  Windows 95. This is not a bug in maplay, but in Windows 95 itself.
  The result is that the allocated memory slowly rises as MPEG and 
  WAV files are being played.

- Received Borland C++ 5.01 courtesy of Borland International through
  Mike Weisert. The program now reports that it is a 32-bit 4.0     
  application instead of 32-bit 3.1 application. The MPEG..Options     
  dialog box looks much better with 4.0's color scheme. Also there is     
  real Pentium optimization.

- Fixed the MPEG..Options dialog box which did not allow the user to
  decode only one channel of stereo streams. This option works as
  before but displays a warning if a stream is being decoded in the
  background.

- Added the capability to take playlists from the command line. The
  file extension LST is now interpreted as a playlist also. (Before
  playlists had to have the extension TXT.) Now you can have your 
  lists play by double-clicking the LST file in Explorer. 
  (InstallShield will automatically associate LST files for you.) 
  Also the batch file "makelist.bat" creates a file called 
  "playlist.lst" instead of "playlist.txt".

- Made the application window larger to accommodate larger fonts.

- Fixed the time per frame for Layer I files. The playback time
  should now be accurate for all layers.

- Memory for the playlists and mpeg objects is now freed correctly. 
  Also the current track is now reset when loading new playlists.

08/01/96 : Version 1.70

- Interface changes:

  * Replaced the scrollbar with a trackbar.
  * Added status bar for current action, current file in playlist, 
    current playtime, and if Repeat is enabled (an "R" will appear in
    the rightmost pane).
  * Removed the repeat button for playlists, and placed the previous 
    track and next track buttons next to the rewind and fast foward 
    buttons, respectively. The rewind and fast forward look like this:
    << and >>. The previous track and next track buttons look like 
    this: |< and >|.
  * Added rewind and fast forward to the Audio menu.
  * The MPEG...Decoding Options dialog box has been changed. The 
    background is now light gray, but the text is still black on white. 
    Right now the dialog box looks quite ugly, but once I figure out
    how to get black on light gray text, it will look much better.
  * Colored in the play and stop buttons. Added 3D look to disabled 
    buttons.

- Fixed MIDI playback so that MIDI files can also be seeked.

- Widened the application window so that Large Fonts at 1024x768 don't 
  make the menu bar wrap around to the next line.

- Included a batch file to make playlists from the command line. Type
  "makelist /?" for instructions.

- Layer III code is already in maplay, but it needs to be debugged.
  Attempting to decode Layer III streams will result in memory access 
  violations. I will not include the buggy code for the Layer III 
  stuff in the source code version.


07/09/96 (version 1.61)

- Changed the default extension of MPEG audio files from "MP2" to 
  "MP*". This will allow more MPEG audio files to be opened easily, and 
  prepares for Layer III (MP3) files.

- Fixed a bug which sometimes caused the scroll bar to not be reset 
  after playing.

- Changed the MPEG...Decoding Options dialog box back to the ugly 
  default Windows dialog box. The Borland style one cannot load unless
  BWCC.DLL is loaded before the application is run, so I took it out.

- Made the libararies link statically, which increases the code size, 
  but reduces the possibility that the application will fail to work 
  due to missing DLL files. (I think)

- Started work on layer III. Some layer III stuff has been added in the
  source code, but of course, it doesn't work yet.

06/26/96 (version 1.60)

- Added a scroll bar that updates as sounds play. You can also use it 
  to seek anywhere in the sound. Fast forward and rewind also have been
  implemented.

- Reduced the buffer size by one half again, to reduce latency when 
  seeking. Again, if you had version 1.51 or earlier working correctly, 
  and version 1.60 messes up, just let me know.

- A couple more cosmetic changes, and additions to the maplay classes 
  that allow seeks.

- The output buffer now uses fixed memory which is more likely to be
  available.

- Reduced the size of the executable (from 180 KB to 83 KB) by not
  including debug information.

03/31/96 : Version 1.51

- Added the ability to play MIDI files. Wow, I'm a genius (NOT). Still,
  it's cool that you can just use maplay to play everything. You can 
  also put MIDI files in the playlists.

03/28/96 : Version 1.50

- Replaced buttons with neat looking icons. 3D too!

- Added ability to stop after pausing playback.

- Added a dialog box to play files in stereo or in mono. This function 
  works but the pre-decode feature has not been implemented yet. 
  Selecting mono will take half as much CPU time, and may be 
  necessary for 486 or lower CPUs.

- Fixed a minor bug with play lists, but lists still do not play 
  perfectly.

- Made all the buffers of all versions (386, 486, Pentium) the same
  size. I don't think the size of the buffer makes much difference 
  anyway. If you had a version that worked before, but doesn't work 
  now, please contact me.

- Discovered a minor "bug" - Wave files will not play if you have 
  spaces in the filename or the directory that the WAV file is in.

03/11/96 : Version 1.30

- Added play list functionality. To play a list of files, create a text
  file with a filenames (MP2 or WAV) separated by newlines (hit enter 
  after each filename). Make sure you include the full path in the 
  filename, and that the name of the list file ends with a TXT
  extension. Here is a sample list (arg.txt):

sucky_american_music.mp2
grunge_bites.wav
anime_rules.mp2
send_donations_to_Jeff-san.wav

The play list is far from perfect, as it frequently freezes in the 
middle of files. I'll work on fixing it.

- Fixed lack of stereo playback. The previous version only played the 
first file in stereo, but after loading a mono file, the playback 
remained in mono for stereo streams. This has been completely fixed.


I'll continue to try to improve maplay until it is perfect. Timed lyrics,
MOD format support, and DirectSound output are in the plans.


Jeff Tsay (ctsay@pasteur.eecs.berkeley.edu)
