@Override
	public InputStream getInputStream() {
		try {
			boolean spawn=true;
			if(!this.downloading) {
				this.downloading=true;
				if(song.delay()==-1)
					spawn=false;
				if(song.save()) {
					OutputStream[] os=new OutputStream[2];
					os[0]=this.out;
					os[1]=new FileOutputStream(song.fileName());
					this.song.download(os,spawn);
				}
				else {
					this.song.download(this.out,spawn);
				}
			}
			
			if(spawn)
				Thread.sleep(song.delay());
			return new GmByteInputStream(out,(int)song.getLength());
			//return Gs.cache.getInputStream(song.getId());
		}
		catch (Exception e) {
			PMS.debug("GSPMSSong exception occured "+e.toString());
			return null;
		}
	}