PM123 User's Manual
Welcome to PM123! PM123 User Interface Skin Utility and WinAmp skins Troubleshooting How to create your own MP3s (MP3 encoders) Remote control Registration and support Copyright, credits and greetings
This is PM123's main window on startup. The window has several controls and lots of status information. The main playing controls are these:
From left to right: play, pause, rewind, fast forward, open/close palylist, repeat mode, randomize playlist, next song, previous song and power off. Volume can be controlled clicking and dragging the volume bar:
While playing there are some status indicators such as:
![]() Stereo/mono indicator and bitrate |
![]() Playlist index/total |
You can right click the player to open up the main menu.
Keyboard shortcuts: We have defined some keyboard shortcuts to be used from the main window:
![]() |
Open playlist: Opens the playlist window. Load file: Opens a single file. Open URL: Opens a file from the Internet for streaming. Recall: Displays shortcuts to 10 last used files. Edit ID3 tag: Edits the ID3 tag of the currently loaded file. Properties: Displays PM123's configuration dialog. Load skin: Load a new skin into the player. Equalizer: Displays the Graphical Equalizer. Playlist Manager: Displays the Playlist Manager. Font: A submenu which allows you to select from two fonts. Size: A submenu which allows you to select the size of the player from 3 predefined sizes. Float on top: Toggles 'float on top' option, which allows PM123 to float above all windows. Hide window: Hides the player window. PM123 can be restored by selecting it from the window list. |
Keyboard shortcuts: You can use any of the commands in the main menu by giving focus to the PM123 window (by clicking it, for example) and pressing Alt and any character underlined in the main menu. For example, you can edit the ID3 tag by pressing Alt+3.
![]() |
Use this playlist: Activates this playlist. Add to list: Add file(s) to the playlist. Add URL: Add HTTP files or playlists (M3Us). Clear list: Clear the whole list. Save list: Saves the list. Load list: Loads a saved list. Recall: This submenu has shortcuts to 10 last loaded playlists. Sort: This submenu has options to sort the playlist by size, playing time, filename or songname. |
![]() |
Load: Loads this file into the player. Remove from list: Removes this file from the playlist. Edit tag: Edits this file's ID3 tag. Delete tag: Removes the ID3 tag from this file. |
Keyboard shortcuts: You can use any of the commands in the playlist menu by giving focus to the playlist (by clicking it, for example) and pressing Alt and any character underlined in the playlist menu. For example, you can edit the ID3 tag by pressing Alt+E or load a new playlist by pressing Alt+L.
The properties dialog can be accessed from the main menu. In the dialog you can configure PM123's audio engine and interface.
"ID3 tag editor? What's that?", you might ask. ID3 tags are way of appending some information to each MP3 file. The information contains song title, artist's name, album's name, music's style, release year and a comment. ID3 tags don't belong to the MPEG standard, but it has already become a widely spread standard among MP3 listeners. It's a good idea to add this tag to your MP3 files (if your filenames get mangled, you'll always know the songname).
PM123's tag editor is quite simpled. It can be invoked for the current file from the main menu or by pressing Alt+3 on the player window. You can also edit the tags of the files in the playlist by right clicking a file in the playlist and selecting Edit tag or by pressing Alt+E in the playlist. You can also remote a tag by selecting Delete tag.
PM123 sound visualization plugin
Note that because the spectrum analyzer is visual plugin, it is skin specific and will not display on older PM123 skins. But you can add them easily to any skin by editing the skin's .SKN file and adding this to it:
1=visplug/analyzer.dll,x,y,size-x,size-yReplace x, y, size-x and size-y with suitable coordinates (a easy way to find out the coordinates for a certain area is to load up PMView, take a Window capture of the skin and use the 'Track info' feature). You can also use WinAmp-compatible viscolor.txt files like this:
1=visplug/analyzer.dll,x,y,size-x,size-y,viscolor.txtThe plugin will then read viscolor.txt and adapt to colors specified in it!
PM123 graphical sound equalizer
PM123 users can enjoy and play with the graphical sound equalizer provided.
To enable the equalizer, click on "Equalizer enabled". Now you can adjust the bands by dragging the sliders. Preamplifier slider does software amplification (useful if your soundcards amplifier is broken). You can also mute bands by clicking on the checkboxes below sliders. To restore everything back to normal, click "Default". You can also save and load equalizer profiles.
If you don't think this equalizer suits your needs well enough, you can use Samuel's Real Equalizer plugin, which provides excellent sound quality and more bands to manipulate. The plugin is provided with PM123 and is located in file realeq.dll. Install it via PM123's Properties dialog (Add filter plugin -button). You can display the configuration window by pressing the Configure button in the same dialog.
Adjust FIR Order to suit your machine (at least P150 recommended for FIR order 64).
Playlist Manager will remember the playlist added to it next time you open it. Right click on an empty space (the title, for example) to get the main menu:
Add a playlist: Adds a new playlist to the Playlist Manager.
Statistics: Shows statistics for all playlists and files in Playlist Manager.
Right click on a playlist to get the list menu:
Load this playlist: Loads this playlist into PM123 playlist.
Statistics: Shows statistics for this playlist only.
Right click on a file to get the file menu:
Load this file: Loads this playlist into PM123.
PM123 playlist files
PM123 accepts a couple commandline parameters:
-cmd [host] command If `host' is omitted, send commands to local PM123, otherwise send commands to PM123 running on `host'. For a command listing, see PM123 Remote control. -proxy url Sets a HTTP proxy. -auth authorization Sets HTTP authorization. -48as44 Plays 48kHz files as 44kHz.PM123 also accepts MP3 files, URLs and playlists as commandline parameters.
PM123 Skin Utility and WinAmp skins
[c:\pm123] md skin [c:\pm123] cd skin [c:\pm123\skin] unzip -j c:\files\skin.zip Archive: c:/files/skin.zip inflating: Viscolor.txt inflating: Position.bmp inflating: Main.BMP inflating: Text.BMP inflating: option.bmp inflating: Cbuttons.bmp inflating: Titlebar.BMP inflating: Monoster.bmp inflating: Posbar.bmp inflating: Shufrep.bmp inflating: Volume.BMP inflating: Numbers.BMP inflating: Playpaus.bmp [c:\pm123\skin] cd .. [c:\pm123] skinutil convert skin PM123 Skin Utility (c) 1998 Taneli Leppä <rosmo@kalja.com> Processing skin/cbuttons.bmp....... Processing skin/titlebar.bmp.......... Processing skin/text.bmp: abcdefghijklmnopqrstuvwxyz_-()&.:0123456789öä ,+%[] Processing skin/posbar.bmp.. Processing skin/volume.bmp... Processing skin/shufrep.bmp:.... Processing skin/monoster.bmp:.. Processing skin/numbers.bmp:............ Processing skin/main.bmp:. Creating skin.dat... Creating skin.pak Bundling... 124 images, total 212444 bytes (207 kB). Creating skin.skn Cleaning up...
There you go. You can now load skin.skn from PM123. The skin utility also created files skin.pak and skin.dat that are required if you use the skin. You can also bundle your old skins with lots of small files into two files. Run skinutil.exe without any parameters to see help.
There might be multiple reasons if you encounter this problem. Some of them are listed here. First of all, check your MP3 file. It may be broken. It might play succesfully on another player, but mpg123 may not necessarily like it. If you think it's not related to the input stream, maybe the problem is one of these:Extra effort has been put in creating a priority system that stops skipping. Samuel, who did the priority system, convinces us by saying: "I have played 2 MP3s on my P150 and watched a "dir /s" smooothly and happily scrolling in the foreground without either MP3 skipping... I think that's pretty convincing."
- You have a polling device driver (for example, a very old 2x CD-ROM or PRINT01.SYS without /IRQ switch)
- Bad CD-ROMs tend to seek the disk often. This usually takes 100% CPU and halts I/O operation until the drive completes the seek. You can try cleaning the CD.
- You have a video card that supports "automatic PCI bus retry", but your motherboard stops processing during those retries. Disable the feature (video driver).
- You have an ATI Mach64 and you are experiencing a bug in the video driver using software mouse pointers (ie. colored mouse pointers).
- You have a process that hogs all the CPU. Get a CPU monitor (we recommend CPUMon) and a process killer from hobbes.nmsu.edu.
- You have Full Window Drag enabled. It sucks 100% CPU power when you use it. On Warp 4, disable it from System / User Interface / Window Manipulation / Full Window Dragging.
- Your CPU is too slow (or overheated). We recommend you have at least a Pentium machine.
- You have outdated, old or buggy sound drivers. This is a common problem. Many sound drivers out there for OS/2 just plain suck. We have tried to test PM123 on as many drivers as we can, but some drivers are incomplete and/or buggy.
- You have a very old or just generally bad motherboard, video card or IO controller card. This is a rare problem, though.
- You have an old MPG123.DLL (or some other DLL PM123 comes with) in your LIBPATH.
- Your system doesn't support DIVE (Direct Video Extensions). Try renaming visplug\analyzer.dll to something else.
- Something is very wrong, send us a bug report.
How to create your own MP3s (MP3 encoders and utilities)
There hasn't been many CD-DA or MP3 encoders for OS/2, but recently
this situation has improved mainly because of the
Win32-OS/2 project. To help you to create your own MP3s, Samuel has assembled
a small review on MP3 encoders/decoders, CD-DA utilities and other useful
software.
I have tried five MP3 encoders by encoding CD quality WAVs (yes, even Classical Music) in MP3s at 128kb/s in stereo (not joint stereo, when possible) and tested them with some $40 headphones and pm123's spectrum analyzer. I have benchmarked the speed of the different encoders by comparing it with L3Enc 1.0 for OS/2's since probably all MP3 OS/2 users tried it at one time or an other. (You can also jump right to my conclusion)
ToMPG 3.0 for Win32 (http://www.kiss.uni-lj.si/~k4fe0470/tompg.zip)
This is a Win32 console EXE, but it converts NUMBER ONE with Win32-OS/2 Alpha 0.02!! (http://www.os2ss.com/win32-os2)
ToMPG is fast. I mean astoundingly fast, light speed fast. WARNING!! it's going to blow your socks off!! It's seven (7) times faster (no joke) than L3Enc 1.0 for OS/2 here.
Use the following options though. The default values aren't terrific. -B64 -M0
This program presumably looks free. I see it on many unofficial sites, that means excluding Xing's, and it never comes with any license or shareware restrictions. It seems to be the predecessor of the commercial Win32 GUI Xing encoder (http://www.xingtech.com).
8hz's MP3 Encoder 0.2 (http://www.8hz.com)
This is a free MP3 encoder based on the public ISO MPEG code (the famous dist10.tar.gz). Eventhough it is at least 3 times slower than L3Enc 1.0 for OS/2, the source codes are available for free!! It is beta at the moment, it might not always work properly.
The hearing test was good. I didn't hear a difference between the original WAV and the MP3, although it practically cuts any frequency over 16kHz.
8Hz-mp3 0.2 does not support MPEG 2 Layer III (lower sampling rate MP3s).
L3Enc 1.0 for OS/2 (http://hobbes.nmsu.edu/pub/os2/apps/mmedia/sound/convert/l3en4os2.zip)
This is actually the well known L3Enc from Fraunhofer-IIS version 1.0. It looks like they used EMX to compile this version of L3Enc for DOS, and it had the side effect to make it also run in OS/2. Somebody, somewhere, had that old copy and made it reappear in public. The new versions of L3Enc now use DJGPP and that doesn't make any OS/2 binaries. Send shit to Fraunhofer-IIS!!
It's reasonably fast, but it hogs the CPU. You should get SPE (http://hobbes.nmsu.edu/pub/os2/util/system/spe.zip) to reduce its priority to idle 0 if you want to do something else when it's encoding.
It encodes in Joint Stereo only and the hearing test was bad, even if it only cuts any frequencies over 16kHz. The sound seems centered, probably that the Joint Stereo is too wide.
The -wav parameter doesn't work properly, so you need to feed it RAW files or you'll hear a pop at the beginning of your MP3s. L3Enc 1.0 for OS/2 does not support MPEG 2 Layer III (lower sampling rate MP3s).
L3Enc 2.72 for DOS (ftp://ftp.cdrom.com/.27/sac/sound/l3v272d1.zip)
This one is so forsaken demoralizingly slow, about 3 times slower than L3Enc for OS/2 without -hq. With it, you're better off running it over night, but I haven't figured out what -hq actually does (is it just eating CPU cycles for the fun of it or what?). But this is the last (and obsolete) official version.
It encodes only in Joint Stereo, but the hearing test was good and the spectrym analyzer shows a cut off at 20kHz. So if you are sensitive to high frequencies, use this encoder.
Note, since this is a DOS program, it only supports 8.3 style filenames. L3Enc 2.72 for DOS supports MPEG 2 Layer III (lower sampling rate MP3s).
It requires a registration for encoding over 112kb/s.
MP3Enc 3.0 for Win32 (http://www.iis.fhg.de/amm/download/mp3enc/)
This is a new face of L3Enc. A Win32 EXE is available, but no DOS EXE. It also converts fine with Win32-OS/2. Nonetheless, I was very disapointed by its performance.
By default, it cuts off all frequencies over 11kHz. This makes the sound very muffled. So I tried to use -bw 22050 (to set the frequency bandwidth we want) and it still only goes up to 16kHz. The resulting MP3s also have small "drop outs" and chops in sound not found in the original WAV. Against all expectation, the highest quality (which is the default) seems to make them worse while making the encoding process very very very slow. In addition, we can only use Joint Stereo.
At lowest quality, it's about the same speed as L3Enc 1.0 for OS/2.
This encoder has some nice features like allowing pipes to be used instead of files (this can be useful for realtime encoding and transfer), and some other not so nice options like -l3wav which deliberately sticks a RIFF wav header at the beginning the MP3 file.
I don't know what happened in Fraunhofer labs, maybe a visit from Microsoft?
You should get SP to reduce its priority as it hogs the CPU. (http://hobbes.nmsu.edu/pub/os2/util/system/sp103.zip)
MP3Enc 3.0 for Win32 supports MPEG 2 Layer III (lower sampling rate MP3s). This requires a registration for more than 30 seconds of MP3 encoding.
os2enc01.zip
I didn't get it to work at all. Gives garbage.
AMPEG 4.3 (http://hobbes.nmsu.edu/pub/os2/apps/mmedia/sound/convert/ampeg43.zip)
Good free package with source codes available to encode mp2 files, but they need to be a bit larger (192kb/s instead of 128kb/s) than mp3 to achieve the same quality. I can hear the difference with my headphones.
Decoders
mpg123 for OS/2 0.20 (http://www.cam.org/~guardia/archives/mpg123_020.zip)
This is my port of mpg123 (which I used to make mpg123.dll). I included a WAV routine to include a RIFF WAVE header output mode. So basically, anything that pm123 or mpg123 can play can be dumped to WAV files that can then be used for editing, CD burning or reencoding with ToMPG.
CD-DA utilities
Leech 1.20 (http://hobbes.nmsu.edu/pub/os2/apps/mmedia/sound/editors/leech120.zip)
This is a CD grabber with dijittering capabilities. There is a very good reason that you want to prevent any jittering. Not only does it insert clicks in your PCM sample, it can also switch the left and right channel!!
Nonetheless, I get loads of "jitter correction failed" even though Alfons, for example, has no problem reading it. Must be my Goldstar CD-ROM drive that doesn't like to jump all over the place to correct jittering. I heard Panasonic CD-ROM drive do 0 jitter all the way, now that's neat. Anyway, if your CD-ROM drive hates CD-DA like mine, try to use -s10 and -j100. It might be slow, but at least you get everything.
Make sure you use the options to dump the audio track into a RAW file if you intend to encode it with L3Enc. If you don't do so, L3Enc will encode the WAV header (it doesn't recognize it), and you will get a click at the beginning of your MP3 files.
Alfons 0.96 (ftp://ftp.leo.org/pub/comp/os/os2/sound/alf096b.zip)
This is the best CD-DA utility after Leech. It's very easy to use, and because Leech can take quite a while reading a track on my CD-ROM drive, I use Alfons for "quick and dirty grabs".
Front Ends
MP3 PM 0.54 (http://hobbes.nmsu.edu/pub/os2/apps/mmedia/sound/convert/mp3pm053.zip)
Looks like a promising control interface for L3Enc, ToMPG, Leech, and Alfons, but it is pretty useless at the moment without CD-DA utility support.
CD2MP3 1.10 (http://www.cam.org/~guardia/archives/cd2mp3110.zip)
This is a utility I also programmed that uses ToMPG (or MP3Enc) and Leech to easily grab portions of a CD to MP3s. It reportebly works very well, so try it out. :)
PM123 can be remotely controlled via a named pipe, \PIPE\PM123. Named pipes were chosen because of their excellent features. Quoting from the Control Program Programming Guide and Reference: "Named pipes enable related or unrelated processes on either the same computer system or different systems to communicate with each other. Any process that knows the name of a pipe can open and use a named pipe. In addition, named pipe data can be transparently redirected across a network, such as a local area network (LAN)".
To remote control PM123 on the same computer, you can use either the built-in "echo" command, or the PM123 executable itself. PM123 understands a set of commands that are written to the pipe. For example,
[c:\usr\pm123] pm123 -cmd volume 80 [c:\usr\pm123] echo *volume 80 > \pipe\pm123These commands will set the volume to 80%.
[c:\usr\pm123] pm123 -cmd add d:\music\test.mp3 [c:\usr\pm123] echo *add d:\music\test.mp3 > \pipe\pm123These commands will add the file d:\music\test.mp3 to the playlist.
If you use echo, remember to prepend any commands sent to it with a * character. PM123 currently understands the following commands (optional parameters are enclosed in parenthesis):
play {file} | Starts playing. If file was specified, it will be first loaded and playback will be started. |
stop | Stop playback. |
pause on|off | Pauses or unpauses the playback. |
next | Selects the next song in playlist. |
previous | Selects the previous song in playlist. |
rewind | Toggles rewind of the currently playing file. |
forward | Toggles fast forward of the currently playing file. |
jump n | Jump to n seconds in the currently playing file. |
volume n | Sets volume to n% (scale 0-100, of course). |
load file | Loads a file into. Plays it too, if 'auto play on load' is set. |
shuffle | Toggles shuffling. |
repeat | Toggles repeat. |
mono on|off | Toggles mono mode on. |
downmix on|off | Toggles downmixing 2 to 1. |
autouse on|off | Toggles 'auto use playlist on add'. |
playonload on|off | Toggles 'auto play on load'. |
playonuse on|off | Toggles 'auto play on playlist use'. |
float on|off | Toggles 'float on top'. |
font 1|2 | Selects font 1 or font 2. |
size regular|small|tiny | Selects the player size. |
hide | Hides the player window. |
add file1;file2;file3 | Adds file(s) to playlist. Multiple files must be separated with ';' characters. |
use | Use the playlist. |
clear | Clears the playlist. |
dir directory | Add directory to the playlist (non-recursive). |
rdir directory | Add directory to the playlist (recursive). |
Now for the cool part. You can control PM123 over your OS/2 Local Area Network. Just use \\SERVER\PIPE\PM123. \\SERVER is the name of the computer PM123 runs on. For example,
[c:\usr\pm123] pm123 -cmd \\mycomputer volume 80 [c:\usr\pm123] echo *volume 80 > \\mycomputer\pipe\pm123 [c:\usr\pm123] pm123 -cmd \\mycomputer add d:\music\test.mp3 [c:\usr\pm123] echo *add d:\music\test.mp3 > \\mycomputer\pipe\pm123Will do the same as examples above, but from a different computer. Easy, isn't it?
Why to register?
Yes, why to register shareware applications? There are numerous reasons. One of the most important reasons is that registering ensures that you'll get new versions, support, bugs fixed and most of all, a good feeling that you've supported OS/2 and software developers. We won't abandon OS/2 as long as you keep supporting us. We won't do the same as Colorworks authors did.
Register! Where?
To serve users the best way, we are handling registrations via BMT Micro (http://www.bmtmicro.com). The price is just $15, which will get you a key that will work in all future releases of PM123. You can also use the secure ordering server at BMT Micro for instant purchases! Purchase PM123 online by clicking this.
Mail Orders To: BMT Micro PO Box 15016 Wilmington, NC 28408 U.S.A. Voice Orders: 8:00am - 7:00pm EST (-5 GMT) (800) 414-4268 (orders only) (910) 791-7052 Fax Orders: (910) 350-2937 24 hours / 7 Days (800) 346-1672 24 hours / 7 Days Online Orders via modem: (910) 350-8061 10 lines, all 14.4K (910) 799-0923 Direct 28.8K line via Internet: orders@bmtmicro.com telnet@bmtmicro.com http://www.bmtmicro.com Secure Ordering: https://www.bmtmicro.com/info/placeorder.html Ordering and general ordering questions: Via AOL: bmtmicro Via MSN: bmtmicro Via Prodigy: HNGP66D Via Compuserve: 74031,307 We accept Visa, Mastercard, Discover, American Express, Diners Club, Carte Blanche, Cashiers Check, Personal Check. Personal checks are subject to clearance. Eurochecks in DM are welcome. DM, Sterling, and US Currency is welcome but send only by registered mail, return receipt requested. We cannot be liable for lost cash sent through the mail. If you reside in a country with an unconvertible currency please contact us for alternatives. Purchase orders are welcome, subject to approval. The minimum amount is $250.00. Information for our German customers is explained in the last paragraph of this order form. _____________________________________________________________________ Company:_____________________________________________________________ Name:________________________________________________________________ Address:_____________________________________________________________ _____________________________________________________________ City: _______________________________State/Province: ________________ Postal/ZIP Code: ____________________Country:________________________ Phone:_______________________________________________________________ Fax: _______________________________________________________________ E-Mail #1____________________________________________________________ E-Mail #2____________________________________________________________ Product Quantity Price Number of copies _________________________ ______________ ________________ _PM123___________________ ____$15.00____ x ____________ = + $ _______ _________________________ ______________ x ____________ = + $ _______ _________________________ ______________ x ____________ = + $ _______ Latest Version on Diskette _____$3.00____ x ____________ = + $ _______ North Carolina Residents add 6% Sales Tax $ _______ Shipping and Handling (no quantity limit / see below) $ _______ Email - Subject to Credit Card Verification Free Fax (USA/Canada)........................... 1.00 US Fax (Non-North America).................... 2.00 US Worldwide 1st Class ....................... Free 2nd Day Priority, USA Only ................ $ 4.00 US US Postal Service International Express (Including Canada and Mexico), allow up to 7-10 days ............................... $ 25.00 US Airborne Select Delivery (USA Only) $ 8.00 US FedEx Overnight, USA Only (delivery by 3:00 pm the following day) .............. $ 15.00 US FedEx Europe/Japan (guaranteed delivery within 3 days) .......................... $ 35.00 US Total: $ _______ For credit card payment only Circle one: VISA / Master / Discover / American Express / Diners Credit card number: _____________________________________________ Expiration date: ________________________________________________ Authorization signature: ________________________________________
Support
Support is provided for registered users by following means (feel free to send bug reports, suggestions and other cool stuff):
Email: pm123@bmtmicro.com
Web: http://www.teamos2.sci.fi/pm123
Voice: +358505485242 (Taneli's cellfone, remember Finnish timezone GMT-2!)
Copyright, credits and greetings
MPG123.DLL was created with help and code from following people:
Original mpg123 decoder written/modified by: Michael Hipp <Michael.Hipp@student.uni-tuebingen.de> Oliver Fromme <oliver.fromme@heim3.tu-clausthal.de> with help and code from: Samuel Audet <guardia@cam.org>: OS/2 port MPEG Software Simulation Group: reference decoder package Tobias Bading: idea for DCT64 in subband synthesis from maplay package Jeff Tsay and Mikko Tommila: MDCT36 from maplay package Philipp Knirsch <phil@mpik-tueb.mpg.de>: DCT36/manual unroll idea Thomas Woerner <..> (SGI Audio) Damien Clermonte <..> (HP-UX audio fixes) Stefan Bieschewski <stb@acm.org>: Pentium optimizations, decode_i586.s Martin Denn <mdenn@unix-ag.uni-kl.de>: NAS port Niklas Beisert <nbeisert@physik.tu-muenchen.de> MPEG 2.5 tables <mycroft@NetBSD.ORG> and <augustss@cs.chalmers.se>: NetBSD Kevin Brintnall <kbrint@visi.com> BSD patch Tony Million: win32 port Steven Tiger Lang: advanced shuffle Henrik P Johnson: HTTP auth patch and more ....
MPG123.DLL special features were created by Samuel Audet and the graphical user interface was created by Taneli Leppä. Also code from following people was used:
Generalized Bitmap Module by: Andy Key <nyangau@interalpha.co.uk> Ooura Fourier Transformation library: Takuya OOURA <ooura@kurims.kyoto-u.ac.jp> or <ooura@mmm.t.u-tokyo.ac.jp>
OOURA1D.DLL contains code found in the 1 dimension DFT / DCT / DST package
by Takuya OOURA
I have replaced all double precision floats to single precision. It gives
an awful e-07 precision instead of e-17, but it's faster and e-07 is by far
enough for my needs.