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)