Programming infos: Q: I'm a student on University of XYZ. May I Get your source code for my own mp3 project? A: You can download it from my homepage. And the Watcom C compiler is on my Spaceports and tar.hu pages. Q: I would like to write my own MP3 Player. Do you have any tips, or know any sites where I can download sample codes or any mpeg documents? A: You can find some usable freeware mp3 decoder sources on the net: - Freeamp (www.freeamp.org) - MPG123 (www.mpg123.de) - OpenCP (www.cubic.org/player) - AMP11 (http://www.ph.tum.de/~nbeisert/amp11.html) Ogg Vorbis tools and sources: - www.xiph.org and some other usable sources on - www.programmersheaven.com Mpxplay won't start: Q: I get 'PMODE/W: not enough memory' error message, or other (XMS/conventional) memory allocation errors when I start Mpxplay. A: 1. In some cases (ie: DOS 7.x & SB Live) the PMODE/W extender cannot work. I made a DOS4G/W version too (commented with 'for MS-DOS 7.x users'), you can download it from my homepage. 2. You haven't gor enough free XMS memory. Mpxplay requires min. 3-4 Mb XMS and 200-300 kbyte conventional memory. Q: I get 'Soundcard init failed' message when I start Mpxplay. A: 1.Check the 'supported soundcards' list in the readme.txt, maybe your card is not there... 2.Try the -sct option to autodetect your card correctly. Sound quality problems: Q: Will your mp3 player give me the same sound quality as Winamp or another win32 product? A: I think so there isn't too much sound quality difference between Mpxplay and other players. (I know the Sonique is better, but try to use it on a 486 CPU ...) Maybe the problem is your sound card, my program supports some of them only. Mpxplay can handle SBpro compatible cards on 8 bit and 22khz only. You get the best quality (16 bit,44khz) with an original SB16, ESS, GUS, or WSS compatible card. LFN problems: Q: How can I use LFNs (long filenames) with your program? A: 1. Mpxplay can support LFNs under Win9x through a (windows) software interrupt (API). 2. Under DOS, you have to use an LFN emulator (witch emulates this API function). Only one program can do this: DOSLFN You can download it: http://www-user.tu-chemnitz.de/~heha/hs_freeware/freew.html Please don't ask about this program... I can't help... I know, this program has a limited functionality, but I hope the developer will implement the missing functions... (ie: it doesn't support some type of LFN-CDs (LFN CD modes), and it seems it doesn't work under DOS 6.xx (only under 7.xx)) 3. Don't forget to set the UseLFN=1 in the mpxplay.ini Q: I wrote a CD with long filenames and directories, I can use it under Windows, but I can't read (open) the directories and files under DOS (with Mpxplay nor with any other DOS programs). A: I think so you wrote the CD in JOLIET or in a similar LFN mode. If you use CDRWIN (cd writer software) and you enable 'DOS compatibility mode' in the program, you will able to use the CD under DOS too (of course you'll see the long filenames in LONGFI~1.MP3 format). Audio-CD problems: Q: Why don't you implement a normal CD player instead of real-time CD-ripper? A 1. It was easier to implement (I can handle a CD-track like a normal file) 2. On this way, you can use CROSSFADE, AUTOVOLUME, SPEED CONTROL and SURROUND on AUDIO CD tracks. You couldn't do these in a normal CD audio player. In fact, the CDW doesn't work on every CD-ROMs (especially on old ones). Speed problems: Q: I have a DX4-100, you wrote in the readme.txt, this CPU is enough to play MP3s, but Mpxplay can't play properly on it... A: 1. Of course it depends on the other parts of your computer too, maybe your hard disk or/and CD is slow. If you don't use SMARTDRV, NCACHE or other similar disk cache softwares, try to add this lines to your config.sys file: BUFFERS=63,8 FCBS=32 2. disable (don't use) the extra functions: autovolume, surround and spectrum analiser Q: 1. I have a 386-25 computer. Could you optimize your player that runs on my pc too? 2. I have a 386-DX40 and I use your program to convert mp3 files to wav. And sometimes it makes an empty (or zero-length) wav file. A: My program is optimized (compiled) for pentium processor, but it can run on a 486 CPU too. But it CAN'T on a 386, nor with external FPU. (sometimes it may works, but usually: NOT) And the speed... Maybe with full asm decoding I can reach that my program runs on a 486 DX2-66, but it never will be faster. Prebuffer problems on CD-ROMs: Q: I use the -bp option and my CD-ROM usually stops at the end of the songs, and there's too much pause between the songs or/and the crossfade is not perfect. (the program playing the sound from the buffer, and it doesn't read the CD, because of this some CD-ROMs automatically stops after 15-20 seconds). How can I solve this problem? A: Reduce the size of prebuffer with the -bbn option (ie: -bbn 10)(default:32) LCD-display: Q: I would like to use an LCD display for Mpxplay. How can I do this? A: You find some infos on my homepages (http://www.geocities.com/mpxplay/lcd_info.htm) about the hardware part (pin connections) and about the software part (LCD configuration variables in mpxplay.ini) Otherwise I haven't got LCD, because of this I can't help too much, if you can't make the hardware part or if your LCD doesn't want to work. Other: Q: Mpxplay sometimes cuts the end of the songs (losing 4-5 seconds). Is there any way to play the song completly? A: You can disable this function (cut) with the '-sl 0' command line option or with the SoundLimit=0 setting (in the mpxplay.ini). (or try a low value: 1-5) Q: I would like to use an external (TSR) program to control Mpxplay, but it doesn't work. Why? A: I don't use the 'normal' BIOS or DOS routines to read keyboard, I wrote my own low-level functions. You can find them bellow. If you write a TSR for Mpxplay, use this way to control my program. Q: I can copy CD tracks into a wav file, but how can I convert them directly into MP3s with Mpxplay? A: You cannot do this... Mpxplay is a player, not an encoder... Mpxplay's keyboard read functions: unsigned char *biosp=(unsigned char)(0); unsigned int mykbhit(void) { if(*((unsigned short *)&biosp[0x41a])==*((unsigned short *)&biosp[0x41c])) return 0; return 1; } unsigned int myextgetch(void) { unsigned int pointer; while(!mykbhit()); pointer=0x400+*((unsigned short *)&biosp[0x41a]); *((unsigned short *)&biosp[0x41a])+=2; if(*((unsigned short *)&biosp[0x41a])>=*((unsigned short *)&biosp[0x482])) *((unsigned short *)&biosp[0x41a])=*((unsigned short *)&biosp[0x480]); return *((unsigned short *)&biosp[pointer]); } void pushkey(unsigned short newkey) { unsigned int pointer=0x400+*((unsigned short *)&biosp[0x41c]); biosp[pointer] =newkey&0xff; biosp[pointer+1]=newkey>>8; *((unsigned short *)&biosp[0x41c])+=2; if(*((unsigned short *)&biosp[0x41c])>=*((unsigned short *)&biosp[0x482])) *((unsigned short *)&biosp[0x41c])=*((unsigned short *)&biosp[0x480]); }