Short: V1.3, a mpega.library frontend w/ cyclic buffering Author: tumu@kempele.fi (Tuomas Lukinmaa) Uploader: tumu kempele fi (Tuomas Lukinmaa) Type: mus/play Version: 1.3 Requires: dev/c/AsyncIO.lha, KS 39+ Architecture: m68k-amigaos Introduction and legal mush: ---------------------------- Finnpeg is an highly optimized assembly written frontend for mpega.library using cyclic buffering, asyncio.library and AHI audio system. Finnpeg uses the device-interface in AHI. Please look notes section below. Finnpeg is a postcardware product. Postcardware is a form of freeware where you should send me a postcard if you are using finnpeg regularly. Finnpeg has been tested with Enforcer, Mungwall and Segtracker. Finnpeg is Copyrighted © 1998 by Tuomas Lukinmaa. All rights reserved. mpega.library is Copyrighted © Stephane Tavenard. AHI audio system is Copyrighted © by Martin Blom. AsyncIO library is Copyrighted © by Magnus Holmgren and Martin Taillefer. All rights reserved by their respective authors. THERE IS NO WARRANTY FOR THE PROGRAMS, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAMS "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAMS IS WITH YOU. SHOULD THE PROGRAMS PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY REDISTRIBUTE THE PROGRAMS AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAMS (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAMS TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Requirements: ------------- AmigaOS 3.0 (KS39) or better. (Actually finnpeg requires only 2.04 (KS37) but mpega.library requires KS39.) MC68020 or better with or without a FPU. (This is again a mpega.library requirement, finnpeg requires only MC68000 or better.) Any version of AsyncIO.library but newest recommended. AHI audio system version 4 or better. Usage: ------ NAME/A,DIV=DIVISOR/N,QTY=QUALITY/N,MONO/S,UNIT/N/K,BUF=BUFFERS/N, FPB=FRAMESPERBUFFER/N,IOBUF=IOBUFFERS/N,QUIET/S NAME is abbreviation for filename to be played. No defaults here. =) DIV or DIVISOR is divisor value given to mpega.library which is one of the following: 1=play with full sampling rate, 2=play with half sampling rate and 4=play with quarter sampling rate. Default is playing with full sampling rate. Examples: You have a layer 3-file with sampling rate of 44100 khz and you give DIV=2 parameter to finnpeg, so finnpeg plays it with 22050 khz. You have a layer 3-file with sampling rate of 22050 khz and you give DIV=2 parameter to finnpeg, so finnpeg plays it with 11025 khz. QTY or QUALITY is quality value gigen to mpega.library. Ranges from 0 (worst) to 2 (best). Default is best quality. MONO activates force mono switch in mpega.library which causes it to decode stream in mono (only left channel decoded). Finnpeg also plays the stream with mono from both speakers. Playing in mono also divides the buffer memory requirements in half. Default is to decode and play in stereo. Please look notes section below. UNIT is an AHI option to give the unit number which to open. In theory you could play upto 4 streams at the same time (if your Amiga has CPU power). =) Ranges from 0 (default) to 3. BUF or BUFFERS specify how many cyclic buffer slots to reserve. BUFFERS is multiplied with FRAMESPERBUFFER value. Default is 16. FPB or FRAMESPERBUFFER specify how many mpega.library frames are allocated for play in one go. One full frame is 1152 words. FPB number of full frames are filled before playing buffer with AHI. Default is 8. If using 060/PPC, try 4 or even 2 to have better sync. Total memory usage formula in bytes: for tables: BUFFERS*(4*2+4)+4 for buffers: 1152*2*FPB*BUFFERS [*2 if playing in stereo] IOBUF or IOBUFFERS is an AsyncIO library option which specifies how many kilobytes to use in IO buffers. AsyncIO divides this value in half to make use of double buffered reads. QUIET instructs finnpeg not to print startup banner. Default is to print the banner. =) Examples: Plays stream with DIV=2, QUALITY=1 and MONO. Also plays 16 frames in one go. I use these options playing streams with my machine which is 030/50. finnpeg "CD0:mp3/Windows95 Sucks.mp3" 2 1 mono fpb=16 Plays stream with DIV=2, QUALITY=2 and STEREO. (suitable for 040s) finnpeg "CD0:mp3/Queen - Bohemian Rhapsody" 2 2 Plays stream with full quality, no divisor and stereo. Also uses about 5MB total cyclic buffer with 36KB audio buffers for each channel. finnpeg "CD0:mp3/Ren&Stimpy/happyjoy.mp3" FPB=32 BUF=32 Notes: ------ AHI's 8 bit modes seem to cause lot of background static because of mixing 16 bit audio data to 8 bits. Use 14 bit or better modes (like calibrated ones) for best quality. Remember to set the channels slider at least to 2 in AHI settings if playing in stereo, otherwise audio will loop strangely. It is a restriction caused by AHI. If using DIV=2 or even DIV=4 parameter, using appropriate mixing rate (22050 Hz or 11025 Hz) in AHI prefs should reduce CPU load caused by mixing routines in AHI. Device-interface of AHI does NOT use the "music unit" but the units 0-3. Note this when changing AHI settings. There may be a bug in UNIT allocation in AHI because opening ahi.device with different UNIT-number to play many streams at same time seems to return a error. I have checked paula-driver sources and it always opens audio.device with unit 0. Maybe this is only a restriction of paula-driver. Someone owning an audio card could try to play many streams at same time to see if this is only a problem with paula-driver. Also noted that you can play many streams at the same time if using the same UNIT. Weird. =) If playing stereo streams with PPC, try value 4 or even 2 for FPB to have better sync with channels. 060 owners can also try this method if channels are not played in sync. And for the question why I don't use the library interface of AHI. That's because one of my friends got a PPC and I would like to see a PPC decoding and playing many streams together. Also it would be a nice real-life stress test to compare PPC speeds. (Also it would be fun to show PPC power to lame PeeCee users. =D) Maybe I will code the library-interface routines in finnpeg. And why use two channels instead of one mixed stereo sample? That's because it would need a mixing routine which would slow things. Using library-interface in AHI would be much better solution. Todo list: ---------- -Loading full stream in memory before playing. -GUI with support for WinAMP skins and equalizators. -audio.device support (needs own mixing routines). -Option to use normal io. -Playlist files. -Library-interface routines. -ARexx server -Commodity Hi's to: -------- People in IRCnet channel #AmigaFIN. Stefane Tavenard for making mpega.library. Keep doing optimizations! =) Martin Blom for making AHI. Pity I don't own an audio card. =( All Amiga-users who are using this frontend. Enjoy even faster mpeg audio. =) Author's contact information: ----------------------------- For bugreports, gifts, postcards (no digital ones) and other stuff (excluding trading copyrighted mpeg-files), use one of following addresses: (All mail will be read) Snail-mail: Tuomas Lukinmaa Einarintie 27 FI-90440 KEMPELE Finland, EU E-mail: tumu@kempele.fi (preferred) For latest stable and beta releases of finnpeg can also be found from my www-site at: http://come.to/tumu/