2010-01-07. 3.0

This commit is contained in:
Victor 2018-11-14 15:51:01 +02:00
parent 217c9a30fc
commit 222434ff8e
18 changed files with 2460 additions and 126 deletions

83
build.xml Normal file
View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<project name="SEPlayerService_Lite" default="jar" basedir=".">
<description>Builds, tests, and runs the project .</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
pre-init: called before initialization of project properties
post-init: called after initialization of project properties
pre-preprocess: called before text preprocessing of sources
post-preprocess: called after text preprocessing of sources
pre-compile: called before source compilation
post-compile: called after source compilation
pre-obfuscate: called before obfuscation
post-obfuscate: called after obfuscation
pre-preverify: called before preverification
post-preverify: called after preverification
pre-jar: called before jar building
post-jar: called after jar building
pre-build: called before final distribution building
post-build: called after final distribution building
pre-clean: called before cleaning build products
post-clean: called after cleaning build products
Example of pluging a my-special-task after the compilation could look like
<target name="post-compile">
<my-special-task>
<fileset dir="${build.classes.dir}"/>
</my-special-task>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Other way how to customize the build is by overriding existing main targets.
The target of interest are:
preprocess: preprocessing
extract-libs: extraction of libraries and resources
compile: compilation
create-jad: construction of jad and jar manifest source
obfuscate: obfuscation
preverify: preverification
jar: jar archive building
run: execution
debug: execution in debug mode
build: building of the final distribution
javadoc: javadoc generation
Example of overriding the target for project execution could look like
<target name="run" depends="init,jar">
<my-special-exec jadfile="${dist.dir}/${dist.jad}"/>
</target>
Be careful about correct dependencies when overriding original target.
Again, for list of available properties which you can use check the target
you are overriding in nbproject/build-impl.xml file.
A special target for-all-configs can be used to run some specific targets for
all project configurations in a sequence. File nbproject/build-impl.xml
already contains some "for-all" targets:
jar-all
javadoc-all
clean-all
Example of definition of target iterating over all project configurations:
<target name="jar-all">
<property name="target.to.call" value="jar"/>
<antcall target="for-all-configs"/>
</target>
-->
</project>

1368
nbproject/build-impl.xml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
build.xml.data.CRC32=b8ca046e
build.xml.script.CRC32=518797bb
build.xml.stylesheet.CRC32=03eab09b
nbproject/build-impl.xml.data.CRC32=b8ca046e
nbproject/build-impl.xml.script.CRC32=a371a0b9
nbproject/build-impl.xml.stylesheet.CRC32=d670562e

View File

@ -0,0 +1,7 @@
#Thu Jan 07 23:51:00 EET 2010
netbeans.user=C\:\\Users\\aNNiMON\\.netbeans\\6.7
javadoc.preview=true
deployment.counter=3
config.active=
deployment.number=0.0.2
app-version.autoincrement=true

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
</project-private>

View File

@ -0,0 +1,141 @@
abilities=MMAPI=1.1,SATSAJCRMI=1.0,SATSACRYPTO=1.0,JSR82=1.1,NOKIAUI=1.0,JSR226=1.0,MIDP=2.1,JSR229=1.1.0,SATSAAPDU=1.0,CLDC=1.1,JSR177=1.0,JSR179=1.0.1,J2MEWS=1.0,VSCL=2.1,WMA=2.0,JSR172=1.0,SEMC_EXT_JP8=1.0,ColorScreen,OBEX=1.0,NokiaUI=1.0,JSR238=1.0,JSR239=1.0,JSR211=1.0,JSR234=1.0,ScreenWidth=240,lib/semc_ext_jp8.jar=1.0,MascotV3=1.0,JSR75=1.0,JSR184=1.1,SATSAPKI=1.0,ScreenHeight=321,ScreenColorDepth=8,JSR180=1.0.1,J2MEXMLRPC=1.0,
all.configurations=\
application.args=
application.description=
application.description.detail=
application.name=
application.vendor=Vendor
build.classes.dir=${build.dir}/compiled
build.classes.excludes=**/*.java,**/*.form,**/*.class,**/.nbintdb,**/*.mvd,**/*.wsclient,**/*.vmd
build.dir=build/${config.active}
build.root.dir=build
debug.level=debug
deployment.copy.target=deploy
deployment.instance=default
deployment.jarurl=${dist.jar}
deployment.method=NONE
deployment.override.jarurl=false
dist.dir=dist/${config.active}
dist.jad=SEPlayerService.jad
dist.jar=SEPlayerServiceLite.jar
dist.javadoc.dir=${dist.dir}/doc
dist.root.dir=dist
extra.classpath=${file.reference.MultimediaServices_API.jar}
file.reference.MultimediaServices_API.jar=../../NetBeans Libraries/MultimediaServices_API.jar
filter.exclude.tests=false
filter.excludes=newfile
filter.more.excludes=**/overview.html,**/package.html
filter.use.standard=true
jar.compress=true
javac.debug=true
javac.deprecation=false
javac.encoding=windows-1251
javac.optimize=false
javac.source=1.3
javac.target=1.3
javadoc.author=false
javadoc.encoding=
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
libs.classpath=${file.reference.MultimediaServices_API.jar}
main.class=
main.class.class=applet
manifest.apipermissions=
manifest.file=manifest.mf
manifest.jad=
manifest.manifest=
manifest.midlets=MIDlet-1: SEPSLite,/icon.png,SEPS\n
manifest.others=MIDlet-Vendor: aNNiMON\nMIDlet-Name: SEPlayerServiceLite\nMIDlet-Version: 3.0\n
manifest.pushregistry=
name=SEPlayerService
no.dependencies=false
nokiaS80.application.icon=
nsicom.application.monitorhost=
nsicom.application.runremote=
nsicom.application.runverbose=
nsicom.remoteapp.location=\\My Documents\\NetBeans Applications
nsicom.remotevm.location=\\Windows\\creme\\bin\\CrEme.exe
obfuscated.classes.dir=${build.dir}/obfuscated
obfuscation.custom=
obfuscation.level=9
obfuscator.destjar=${build.dir}/obfuscated.jar
obfuscator.srcjar=${build.dir}/before-obfuscation.jar
platform.active=Sony_Ericsson_SDK_2_5_0_4_for_the_Java_TM__ME_Platform_Emulator_
platform.active.description=Sony Ericsson SDK 2.5.0.4 for the Java(TM) ME Platform(Emulator)
platform.apis=JSR234-1.0,SATSA-APDU-1.0,JSR211-1.0,JSR75-1.0,J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR82-1.1,SATSA-JCRMI-1.0,SATSA-CRYPTO-1.0,JSR239-1.0,JSR179-1.0.1,MascotV3-1.0,JSR184-1.1,JSR238-1.0,MMAPI-1.1,NokiaUI-1.0,JSR229-1.1.0,SATSA-PKI-1.0,JSR180-1.0.1,JSR226-1.0,JSR177-1.0,SEMC_EXT_JP8-1.0,VSCL-2.0,VSCL-2.1,WMA-2.0,lib/semc_ext_jp8.jar
platform.bootclasspath=${platform.home}/lib/mascotv3.jar:${platform.home}/lib/jsr226.jar:${platform.home}/lib/jsr256.jar:${platform.home}/lib/satsa-crypto.jar:${platform.home}/lib/jsr229.jar:${platform.home}/lib/jsr238.jar:${platform.home}/lib/j2me-xmlrpc.jar:${platform.home}/lib/jsr211.jar:${platform.home}/lib/vscl21.jar:${platform.home}/lib/satsa-jcrmi.jar:${platform.home}/lib/jsr082.jar:${platform.home}/lib/satsa-apdu.jar:${platform.home}/lib/jsr184.jar:${platform.home}/lib/nokiaext.jar:${platform.home}/lib/jsr239.jar:${platform.home}/lib/jsr75.jar:${platform.home}/lib/jsr179.jar:${platform.home}/lib/satsa-pki.jar:${platform.home}/lib/jsr180.jar:${platform.home}/lib/vscl.jar:${platform.home}/lib/mmapi.jar:${platform.home}/lib/j2me-ws.jar:${platform.home}/lib/wma20.jar:${platform.home}/lib/jsr234.jar:${platform.home}/lib/semc_ext_jp8.jar:${platform.home}/lib/cldcapi11.jar:${platform.home}/lib/midpapi20.jar
platform.configuration=CLDC-1.1
platform.device=SonyEricsson_JP8_240x320_Emu
platform.fat.jar=true
platform.profile=MIDP-2.0
platform.trigger=CLDC
platform.type=UEI-1.0.1
preprocessed.dir=${build.dir}/preprocessed
preverify.classes.dir=${build.dir}/preverified
preverify.sources.dir=${build.dir}/preverifysrc
resources.dir=resources
ricoh.application.email=
ricoh.application.fax=
ricoh.application.icon=
ricoh.application.target-jar=
ricoh.application.telephone=
ricoh.application.uid=00489600
ricoh.application.version=
ricoh.dalp.application-desc.auto-run=false
ricoh.dalp.application-desc.energy-save=
ricoh.dalp.application-desc.exec-auth=
ricoh.dalp.application-desc.visible=true
ricoh.dalp.argument=
ricoh.dalp.codebase=
ricoh.dalp.display-mode.color=true
ricoh.dalp.display-mode.is-4line-support=false
ricoh.dalp.display-mode.is-hvga-support=true
ricoh.dalp.display-mode.is-vga-support=false
ricoh.dalp.display-mode.is-wvga-support=false
ricoh.dalp.information.abbreviation=
ricoh.dalp.information.icon.basepath=
ricoh.dalp.information.icon.location=
ricoh.dalp.information.is-icon-used=true
ricoh.dalp.install.destination=hdd
ricoh.dalp.install.mode.auto=true
ricoh.dalp.install.work-dir=hdd
ricoh.dalp.is-managed=true
ricoh.dalp.resources.dsdk.version=2.0
ricoh.dalp.resources.jar.basepath=
ricoh.dalp.resources.jar.version=
ricoh.dalp.version=
ricoh.icon.invert=false
ricoh.platform.target.version=
run.cmd.options=
run.jvmargs=
run.method=STANDARD
run.security.domain=trusted
run.use.security.domain=false
savaje.application.icon=
savaje.application.icon.focused=
savaje.application.icon.small=
savaje.application.uid=TBD
savaje.bundle.base=
savaje.bundle.debug=false
savaje.bundle.debug.port=
semc.application.caps=
semc.application.icon=
semc.application.icon.count=
semc.application.icon.splash=
semc.application.icon.splash.installonly=false
semc.application.uid=E0892899
semc.certificate.path=
semc.private.key.password=
semc.private.key.path=
sign.alias=
sign.enabled=false
sign.keystore=
src.dir=src
use.emptyapis=true
use.preprocessor=true

10
nbproject/project.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.kjava.j2meproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/j2me-project">
<name>SEPlayerService_Lite</name>
<minimum-ant-version>1.6</minimum-ant-version>
</data>
</configuration>
</project>

View File

@ -1,11 +1,8 @@
import com.nokia.mid.ui.DeviceControl;
import com.sonyericsson.multimedia.*;
import com.sonyericsson.multimedia.control.*;
import java.io.IOException;
import java.util.Calendar;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.*;
import javax.microedition.sensor.*;
/*
* To change this template, choose Tools | Templates
@ -18,10 +15,15 @@ import javax.microedition.sensor.*;
*/
public class Canv extends Canvas implements Runnable, MediaControlListener {
//public static int softUp1 = 0xFF242424, softUp2 = 0x87282828, softDn1 = 0x87151515, softDn2 = 0xFF181818, background = 0x00,
// line = 0x00BB00, text = 0x009900, valuet = 0x0000E6, inf = 0x992235;
public static int softUp1, softUp2, softDn1, softDn2, background, line, text, valuet, inf;
private int w,h;
private boolean lite, shift, axcel, vis;
private boolean lite, vis;
private int mode;
private int accelPrevDelta = 0;
private Lyrics lrc;
private Image I, album;
private Engine2 e2;
@ -34,23 +36,17 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
private MediaControl mediaControl = null;
private Media media = null;
private int[] channels = new int[3];
private String[] channelNames = new String[3];
private SensorConnection sensor;
private String URL;
public Canv() {
setFullScreenMode(true);
thr = new Thread(this);
thr.start();
shift = lite = false;
vis = axcel = true;
lite = false;
vis = true;
mode = 0; //Ðåæèì ïëåéåðà
w = getWidth();
h = getHeight();
I = Image.createImage(w, h);
G = I.getGraphics();
getInfo();
service = MultimediaServiceManager.getMultimediaService("MediaPlayer");
mediaControl = (MediaControl)service.getControl("MediaControl");
mediaControl.addMediaControlListener(this);
@ -59,17 +55,47 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
protected void paint(Graphics g) {
if(mode==0) drawPlayerCanvas(G);
else if(mode==1) drawVisual(G);
g.drawImage(I, 0, 0, 20);
}
private void drawVisual(Graphics g) {
g.setColor(background);
g.fillRect(0, 0, w, h);
g.setFont(medFont);
if (media != null) {
MetaData metaData = media.getMetaData();
if (metaData != null) {
Object data = metaData.getValue(MetaData.TITLE_KEY);
if (data != null) drawTitle(g, (String) data);
if (album != null) {
int ih = h-2*medFont.getHeight()-6;
if(album.getHeight()>ih) album = Effects.Resize(album, ih*album.getWidth()/album.getHeight(), ih);
g.drawImage(album, w/2, h/2, 3);
}else if(vis){
if(e2==null) {
int ih = h-(2*medFont.getHeight())-6;
e2 = new Engine2(w-6, ih);
e2.setRun(true);
}
g.drawImage(e2.MainCanvas(), w/2, h/2, 3);
}
if(Rms.isLyric && lrc!=null) {
drawCenter(g, lrc.get5Lines(media.getMediaTime()));
}
}
}
drawSoft(g, "Ìåíþ", "Âûõîä");
}
private void drawPlayerCanvas(Graphics g) {
g.setColor(0);
g.setColor(background);
g.fillRect(0, 0, w, h);
drawTitle(g, "SEPS by aNNiMON");
int fh = smallFont_b.getHeight()+2;
int py = fh+fh/2;
g.setFont(medFont);
g.setColor(0x227A6F);
if (media != null) {
MetaData metaData = media.getMetaData();
if (metaData != null) {
@ -81,9 +107,11 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
data = metaData.getValue(MetaData.ARTIST_KEY);
if (data != null) py = drawText(g, "Èñïîëíèòåëü: ", (String) data, py);
data = metaData.getValue("filename");
if (data != null) py = drawText(g, "Ôàéë: ", (String) data, py);
if(Rms.isLyric && lrc!=null) py = drawText(g, "", lrc.getLine(media.getMediaTime()), py);
//else if(lrc==null) py = drawText(g, String.valueOf(media.getMediaTime()), "", py);
//data = metaData.getValue(metaData.FILE_URI_KEY);
//if (data != null)
if (album != null) {
int ih = h-fh-2-py-20;
@ -98,23 +126,23 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
g.drawImage(e2.MainCanvas(), w/2, py+15, 17);
}
if(axcel) {
g.setColor(0x992235);
g.drawString("Accel", 2, py+15, 20);
}
if(vis) {
g.setColor(0x992235);
g.setColor(inf);
g.drawString("Visual", 2, py+15+(smallFont_b.getHeight()+2), 20);
}
if(Rms.isLyric) {
g.setColor(inf);
g.drawString("Lyrics", 2, py+15+2*(smallFont_b.getHeight()+2), 20);
}
float div = ((float)w - 10) / (float)media.getDuration();
g.setColor(0x0000E6);
g.setColor(valuet);
g.fillRect(5, py, (int)(media.getMediaTime() * div), 10);
g.setColor(0x009900);
g.setColor(text);
g.drawRect(5, py, w-10, 10);
}
}
drawSoft(g, "Ñâåðíóòü", "Âûõîä");
drawSoft(g, "Ìåíþ", "Âûõîä");
}
public void keyPressed(int key) {
@ -123,9 +151,11 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
pauseTrack();
SEPS.midlet.destroyApp(true);
}
if(key==-6) SEPS.midlet.dsp.setCurrent(null);
if(key==KEY_POUND) axcel=!axcel;
if(key==-6) new Menu();
if(key==KEY_STAR) vis=!vis;
if(key==KEY_NUM0) Rms.isLyric=!Rms.isLyric;
if(key==KEY_NUM1) rewind();
if(key==KEY_NUM3) fastForward();
switch(ga) {
case LEFT:
prevTrack();
@ -134,8 +164,10 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
nextTrack();
break;
case UP:
upMode();
break;
case DOWN:
downMode();
break;
case FIRE:
try {
@ -152,54 +184,10 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
keyPressed(key);
}
public int getDelta(int channel, int threshold) {
int delta = 0;
try {
Data[] data = sensor.getData(1, -1, false, false, false);
int drx = 0;
for (int i = 0; i < data.length; i++) {
if (data[i].getChannelInfo().getName().equals(channelNames[channel])) {
drx = data[i].getIntValues()[0];
}
}
delta = channels[channel] - drx;
channels[channel] = drx;
if (Math.abs(delta) < threshold) {
delta = 0;
}
} catch (Throwable t) {
}
return delta;
}
public void run() {
while (true) {
try {
final int delta = getDelta(0, 800);
if (delta != 0) {
if (accelPrevDelta != 0 && (delta * accelPrevDelta) < 0) {
accelPrevDelta = 0;
} else {
accelPrevDelta = delta;
Runnable runnable = new Runnable() {
public void run() {
if (delta > 0 && axcel) {
nextTrack();
} else if (delta < 0 && axcel) {
prevTrack();
}
}
};
(new Thread(runnable)).start();
}
}
if(Rms.light) DeviceControl.setLights(0, 100);
if(!vis) Thread.sleep(100);
if (service != null) {
repaint();
@ -210,21 +198,24 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
}
}
private void getInfo() {
SensorInfo[] info = SensorManager.findSensors("acceleration", null);
for (int i = 0; i < info.length; i++) {
SensorInfo s = info[i];
URL = s.getUrl();
ChannelInfo[] ci = s.getChannelInfos();
for (int r = 0; r < ci.length; r++) {
ChannelInfo c = ci[r];
channelNames[r] = c.getName();
}
}
try {
sensor = (SensorConnection) Connector.open(URL);
} catch (IOException ex) {
ex.printStackTrace();
private void initLyric(Media med) {
if (med == null) {return;}
lrc = null;
String at = "";
String fl = "";
MetaData metaData = med.getMetaData();
if (metaData != null) {
Object data = metaData.getValue(MetaData.ARTIST_KEY);
if (data != null) at=at +(String)(data) + " - ";
data = metaData.getValue(MetaData.TITLE_KEY);
if (data != null) at+=(String) data;
data = metaData.getValue(MetaData.FILE_URI_KEY);
if (data != null) {fl=(String) data;fl=fl.substring(fl.lastIndexOf('/')+1, fl.lastIndexOf('.'));}
if(Lyrics.isExists(at)) lrc = new Lyrics(at);
else if(Lyrics.isExists(fl)) lrc = new Lyrics(fl);
}
}
@ -244,7 +235,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
}
}
private void pauseTrack() {
public void pauseTrack() {
try {
mediaControl.pause();
} catch (ControlException ex) {
@ -260,32 +251,48 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
}
}
public static String getTime(int mode) {
String dd, mm, yy, _h, m, s;
Calendar cal = Calendar.getInstance ();
dd = String.valueOf (cal.get (Calendar.DAY_OF_MONTH));
if (dd.length () == 1)
dd = "0" + dd;
mm = String.valueOf (cal.get (Calendar.MONTH) + 1);
if (mm.length () == 1)
mm = "0" + mm;
yy = String.valueOf (cal.get (Calendar.YEAR));
_h = String.valueOf (cal.get (Calendar.HOUR_OF_DAY));
if (_h.length () == 1)
_h = "0" + _h;
m = String.valueOf (cal.get (Calendar.MINUTE));
if (m.length () == 1)
m = "0" + m;
s = String.valueOf (cal.get (Calendar.SECOND));
if (s.length () == 1)
s = "0" + s;
String time;
if(mode==1) time = _h+":"+m+":"+s;
else if(mode==2) time = (dd+"."+mm+"."+yy.substring(2));
else time = (dd+"."+mm+"."+yy.substring(2)+" "+_h+":"+m+":"+s);
return time;
private void fastForward() {
try {
mediaControl.skip(10);
} catch (ControlException ex) {
ex.printStackTrace();
}
}
private void rewind() {
try {
mediaControl.skip(-10);
} catch (ControlException ex) {
ex.printStackTrace();
}
}
// public static String getTime(int mode) {
// String dd, mm, yy, _h, m, s;
// Calendar cal = Calendar.getInstance ();
// dd = String.valueOf (cal.get (Calendar.DAY_OF_MONTH));
// if (dd.length () == 1)
// dd = "0" + dd;
// mm = String.valueOf (cal.get (Calendar.MONTH) + 1);
// if (mm.length () == 1)
// mm = "0" + mm;
// yy = String.valueOf (cal.get (Calendar.YEAR));
// _h = String.valueOf (cal.get (Calendar.HOUR_OF_DAY));
// if (_h.length () == 1)
// _h = "0" + _h;
// m = String.valueOf (cal.get (Calendar.MINUTE));
// if (m.length () == 1)
// m = "0" + m;
// s = String.valueOf (cal.get (Calendar.SECOND));
// if (s.length () == 1)
// s = "0" + s;
// String time;
// if(mode==1) time = _h+":"+m+":"+s;
// else if(mode==2) time = (dd+"."+mm+"."+yy.substring(2));
// else time = (dd+"."+mm+"."+yy.substring(2)+" "+_h+":"+m+":"+s);
// return time;
// }
public void mediaControlUpdate(int eventId, ControlEvent event) {
try {
switch (eventId) {
@ -314,6 +321,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
album = null;
}
}
if(Rms.isLyric) initLyric(this.media);
} catch (Throwable t) {
t.printStackTrace();
}
@ -322,11 +330,12 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
private void drawTitle(Graphics g, String text) {
int fh = medFont.getHeight()+4;
g.setColor(0x0000E6);
g.setColor(valuet);
g.setFont(medFont);
if(Rms.skinid==3) {text=toEmo(text);}
g.drawString(text, w/2, 2, 17);
drawRect(g, 0xFF242424, 0x87282828, 0, 0, w, fh/2);
drawRect(g, 0x87151515, 0xFF181818, 0, fh/2, w, fh/2);
drawRect(g, softUp1, softUp2, 0, 0, w, fh/2);
drawRect(g, softDn1, softDn2, 0, fh/2, w, fh/2);
}
public void drawRect(Graphics g, int color1, int color2, int x1, int y1, int w, int h) {
@ -370,24 +379,50 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
private void drawSoft(Graphics g, String lsoft, String rsoft) {
int fh = medFont.getHeight()+2;
g.setColor(0x009900);
g.setColor(text);
g.setFont(medFont);
g.drawString(lsoft, 2, h-2, 36);
g.drawString(rsoft, w-2, h-2, 40);
drawRect(g, 0xFF242424, 0x87282828, 0, h-fh, w, fh/2);
drawRect(g, 0x87151515, 0xFF181818, 0, h-fh/2, w, fh/2);
drawRect(g, softUp1, softUp2, 0, h-fh, w, fh/2);
drawRect(g, softDn1, softDn2, 0, h-fh/2, w, fh/2);
}
private void drawCenter(Graphics g, String[] lines) {
if(lines==null) return;
Font sm = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
int fh = sm.getHeight()+2;
g.setFont(sm);
String v;
drawRect(g, ((160<<24)| Canv.background),((160<<24)| Canv.background), 0, h/2-fh*2, w, fh*5);
for(int i=0; i<lines.length; i++) {
v=Rms.skinid==3 ? toEmo(lines[i]) : lines[i];
if(i==2) {
g.setColor(valuet);
g.drawString(v, w/2, h/2+(fh*(i-2)), 17);
g.setColor(text);
g.drawString(v, w/2-1, h/2+(fh*(i-2))-1, 17);
}else{
g.setColor(text);
g.drawString(v, w/2, h/2+(fh*(i-2)), 17);
g.setColor(valuet);
g.drawString(v, w/2-1, h/2+(fh*(i-2))-1, 17);
}
}
}
private int drawText(Graphics g, String name, String value, int y) {
g.setColor(0x00BB00);
g.setColor(line);
g.drawLine(3, y-1, w-3, y-1);
g.setColor(0x009900);
if(Rms.skinid==3) {value=toEmo(value); name=toEmo(name);}
g.setColor(text);
g.setFont(smallFont_b);
g.drawString(name, 5, y, 20);
int tw = 15+smallFont_b.stringWidth(name);
g.setColor(0x0000E6);
g.setColor(valuet);
if(smallFont_b.stringWidth(value)>tw) {
g.translate(tw-10, g.getTranslateY());
g.drawString(value, 2, y, 20);
@ -396,4 +431,31 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
return y+(smallFont_b.getHeight()+2);
}
private String toEmo(String s) {
StringBuffer sb = new StringBuffer();
int i = 0;
boolean up = true;
while(i<s.length()) {
String ch = s.substring(i, i+1);
if(up) ch = ch.toUpperCase();
else ch = ch.toLowerCase();
sb.append(ch);
i++;
up=!up;
}
return sb.toString();
}
private void downMode() {
mode = 1-mode;
e2=null;
album = null;
}
private void upMode() {
mode = 1-mode;
e2=null;
album = null;
}
}

View File

@ -220,14 +220,14 @@ public class Engine2 implements Runnable {
}
private void CLS(Graphics g) {
g.setColor(0x00);
g.setColor(Canv.background);
g.fillRect(0, 0, w, h);
}
private void ACLS(Graphics g) {
int[] pixelArray = new int[w * h];
for (int io = 0; io < pixelArray.length; io++) {
pixelArray[io] = (int) (100-K << 24) | (0 << 16) | (0 << 8) | 0;
pixelArray[io] = (int) (100-K << 24) | Canv.background;
}
g.drawRGB(pixelArray, 0, w, 0, 0, w, h, true);
}

55
src/Info.java Normal file
View File

@ -0,0 +1,55 @@
import java.io.DataInputStream;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.lcdui.*;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author aNNiMON
*/
public class Info extends Form implements CommandListener {
private Command back = new Command("Íàçàä", Command.BACK, 1);
private StringItem Text;
private Command site = new Command("Íà ñàéò", Command.HELP, 2);
public Info() {
super("Î ïðîãðàììå");
String str = getText("/about");
Text = new StringItem(null, str);
append(Text);
addCommand(site);
addCommand(back);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if(c==back) new Menu();
if(c==site) {
try {
String url = "http://annimon.wen.ru/";
if(url.length()!=22) return;
SEPS.midlet.platformRequest(url);
} catch (ConnectionNotFoundException ex) {
new Menu();
}
}
}
private String getText(String path) {
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream(path));
StringBuffer strBuff = new StringBuffer();
int ch = 0;
try {
while ((ch = dis.read()) != -1) {
strBuff.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
}
dis.close();
} catch (Exception e) {e.printStackTrace();}
return strBuff.toString();
}
}

233
src/Lyrics.java Normal file
View File

@ -0,0 +1,233 @@
import java.io.*;
import java.util.Vector;
import javax.microedition.io.*;
import javax.microedition.io.file.FileConnection;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author aNNiMON
*/
public class Lyrics {
private String[] lrc;
private int[] time;
/**
* Êîíñòðóêòîð êëàññà
* @param lyricsname - èìÿ [Èñïîëíèòåëü] - [Çàãîëîâîê]
* èëè [name]
*/
public Lyrics(String lyricsname) {
String all = openLirics(lyricsname);
lrc = threshold(all, false);
String[] tm = threshold(all, true);
all = null;
time = getIntTime(tm);
tm = null;
System.gc();
}
public String getLine(int t) {
for(int i=0; i<time.length; i++) {
try {
if (t < time[i]) return lrc[i - 1];
} catch (Exception e) {
return null;
}
}
return null;
}
public String[] get5Lines(int t) {
int idx = 0;
String[] l5 = new String[5];
for(int i=0; i<time.length; i++) {
try {
if (t < time[i]) {idx=i-1; break;}
} catch (Exception e) {
return null;
}
}
if(idx>=2 && idx<lrc.length-2) {
for(int i=0; i<5; i++) {
l5[i]=lrc[idx-2+i];
}
}
return l5;
}
public static final boolean isExists(String lyricsname) {
boolean r = false;
FileConnection fc;
try {
r = (fc = (FileConnection) Connector.open("file:///" + Rms.lrcpath + lyricsname + ".lrc", Connector.READ)).exists();
fc.close();
} catch (Exception e) {
r = false;
}
return r;
}
/**
* Îòêðûâàåò òåêñò èç ÔÑ
* @param lyricsname
*/
private String openLirics(String lyricsname) {
FileConnection fc;
StringBuffer sb = new StringBuffer();
try {
fc = (FileConnection) Connector.open("file:///" + Rms.lrcpath + lyricsname + ".lrc", Connector.READ);
InputStream is = fc.openInputStream();
int ch = 0;
while ((ch = is.read()) != -1) {
sb.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
}
is.close();
fc.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return sb.toString();
}
/**
* Ðàçáèåíèå òåêñòà íà ñòðîêè
* @param text - âåñü òåêñò
* @param time - ïîëó÷àòü âðåìÿ(true) èëè òåêñò ïåñíè(false)
* @return
*/
private String[] threshold(String text, boolean time)
{
Vector v = new Vector();
char c = '\n';
int j = text.length();
String s2 = "";
for(int k = 0; k < j; k++)
{
int i = text.charAt(k);
if(i == c)
{
if(s2.length() > 0)
{
if(time && isNumChar(s2.charAt(1))) v.addElement(s2.substring(0, s2.indexOf(']')+1).trim());
else if(isNumChar(s2.charAt(1))) v.addElement(s2.substring(s2.lastIndexOf(']')+1).trim());
s2 = "";
}
} else
{
s2 = s2 + String.valueOf((char)i);
}
}
if(s2.length() > 0) {
if(time && isNumChar(s2.charAt(1))) v.addElement(s2.substring(0, s2.indexOf(']')+1).trim());
else if(isNumChar(s2.charAt(1))) v.addElement(s2.substring(s2.lastIndexOf(']')+1).trim());
}
String[] m;
m = new String[v.size()];
v.copyInto(m);
return m;
}
/**
* Ïðîâåðêà íà ñèìâîë, ñîäåðæàùèé ÷èñëî.
* @param ch - ñèìâîë
* @return
*/
private boolean isNumChar(char ch) {
return ch >= '0' && ch <= '9';
}
/**
* Ïðåîáðàçîâûâàåò ñòðîêó âèäà [00:00.00] â ÷èñëî
* @param tm
* @return
*/
private int[] getIntTime(String[] tm) {
int[] out = new int[tm.length];
for(int i=0; i<tm.length; i++) {
out[i]=parseInt(tm[i]);
}
return out;
}
/**
* Ïðåîáðàçîâûâàåò ñòðîêó âèäà [00:00.00] â ÷èñëî
* @param in
* @return
*/
private int parseInt(String in) {
int mm = Integer.parseInt(in.substring(1, in.indexOf(':')));
int ss = Integer.parseInt(in.substring(in.indexOf(':')+1, in.indexOf('.')));
//int ms = Integer.parseInt(in.substring(in.indexOf('.')+1, in.indexOf(']')));
return ss+(mm*60);
}
/**
* Ïðåîáðàçîâûâàåò âñå íåèíòåðíåò ññûëêè â íîðìàëüíûå, íàïðèìåð óáèðàÿ ïðîáåëû èëè ëèøíèå ñèìâîëû.
* @param url - èñõîäíûé àäðåñ
* @return - ïðàâèëüíûé àäðåñ íà âûõîäå
*/
private String urlName(String url) {
if (url == null) return null;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < url.length(); i++) {
char ch = url.charAt(i);
switch (ch) {
default:
if (ch < '\200') {
sb.append(ch);
break;
}
if (ch > '\177' && ch < '\u0800') {
sb.append('%');
sb.append(Integer.toHexString((ch >> 6 | 0xc0) + 256).substring(1));
sb.append('%');
sb.append(Integer.toHexString((ch & 0x3f | 0x80) + 256).substring(1));
break;
}
if (ch > '\u07FF' && ch < '\0') {
sb.append('%');
sb.append(Integer.toHexString((ch >> 12 | 0xe0) + 256).substring(1));
sb.append('%');
sb.append(Integer.toHexString((ch >> 6 & 0x3f | 0x80) + 256).substring(1));
sb.append('%');
sb.append(Integer.toHexString((ch & 0x3f | 0x80) + 256).substring(1));
}
break;
case 0: //'\0'
case 32: sb.append("%20"); break;// ' '
case 61: sb.append("%3d"); break;// '='
case 43: sb.append("%2b"); break;// '+'
case 39: sb.append("%27"); break;// '\''
case 46: sb.append("%2E"); break;// '.'
case 60: sb.append("%3c"); break;// '<'
case 62: sb.append("%3e"); break;// '>'
case 35: sb.append("%23"); break;// '#'
case 37: sb.append("%25"); break;// '%'
case 38: sb.append("%26"); break;// '&'
case 123:sb.append("%7b"); break;// '{'
case 125:sb.append("%7d"); break;// '}'
case 92: sb.append("%5c"); break;// '\\'
case 94: sb.append("%5e"); break;// '^'
case 126:sb.append("%73"); break;// '~'
case 91: sb.append("%5b"); break;// '['
case 93: sb.append("%5d"); break;// ']'
case 58: sb.append("%3A"); break;// ':'
case 47: sb.append("%2F"); break;// '/'
case 63: sb.append("%3F"); break;// '?'
case 45: sb.append("%2D"); break;// '-'
case 33: sb.append("%21"); break;// '!'
case 59: sb.append("%3B"); break;// ';'
}
}
return sb.toString();
}
}

38
src/Menu.java Normal file
View File

@ -0,0 +1,38 @@
import javax.microedition.lcdui.*;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author aNNiMON
*/
public class Menu implements CommandListener {
private List ls;
private Display dsp;
public Menu() {
String[] m = new String[] {"Âåðíóòüñÿ", "Íàñòðîéêè", "Î ïðîãðàììå", "Ñâåðíóòü", "Âûõîä"};
ls = new List("Ìåíþ", List.IMPLICIT, m, null);
ls.setCommandListener(this);
dsp = SEPS.midlet.dsp;
dsp.setCurrent(ls);
}
public void commandAction(Command c, Displayable d) {
if(c.equals(List.SELECT_COMMAND)) {
int i = ls.getSelectedIndex();
switch(i) {
case 0: dsp.setCurrent(SEPS.midlet.cnv); break;
case 1: dsp.setCurrent(new Options()); break;
case 2: dsp.setCurrent(new Info()); break;
case 3: dsp.setCurrent(null); break;
case 4: SEPS.midlet.destroyApp(true); break;
}
}
}
}

90
src/Options.java Normal file
View File

@ -0,0 +1,90 @@
import javax.microedition.lcdui.*;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author aNNiMON
*/
public class Options extends Form implements CommandListener {
private Command back,ok;
private TextField az, un, cc, hp;
private ChoiceGroup skin, cRC;
public Options() {
super("Íàñòðîéêè");
back = new Command("Íàçàä", Command.BACK, 3);
ok = new Command("Ok", Command.OK, 1);
az = new TextField("Ïàïêà ñ òåêñòàìè:", Rms.lrcpath, 256, TextField.ANY);
// un = new TextField(L.str[L.noc]+":", String.valueOf(P.undo), 2, TextField.NUMERIC);
// cc = new TextField(L.str[L.cch]+":", "000000", 6, TextField.ANY);
// hp = new TextField(L.str[L.ach], String.valueOf(P.heap), 2, TextField.ANY);
skin = new ChoiceGroup ("Ñêèíû", ChoiceGroup.EXCLUSIVE);
cRC = new ChoiceGroup ("", ChoiceGroup.MULTIPLE);
appendOther();
StrokeStyle();
}
public void commandAction(Command c, Displayable d) {
if (c==back) {new Menu();}
if ((c==ok || c==List.SELECT_COMMAND)) {
new Skin(Rms.skinid = skin.getSelectedIndex());
Rms.lrcpath=az.getString();
// P.az=Integer.parseInt(az.getString());
// P.curcolor = getHexValue(cc.getString());
// P.heap = Integer.parseInt(hp.getString());
Rms.light = cRC.isSelected(0);
// P.dsI = cRC.isSelected(1);
// P.isUndo = cRC.isSelected(2);
// P.isEfView = cRC.isSelected(3);
// P.isLight = cRC.isSelected(4);
// P.BOC = cRC.isSelected(5);
// P.undo=Integer.parseInt(un.getString());
// Editor.isteps = new Image[P.undo];
// Editor.ist=0;
new Menu();
}
}
private void StrokeStyle() {
append(skin);
append(az);
// append(cc);
// append(hp);
append(cRC);
// append(un);
addCommand(ok);
addCommand(back);
setCommandListener(this);
SEPS.midlet.dsp.setCurrent(this);
}
private void appendOther() {
skin.append("Ñòàíäàðòíûé SEPS", null);
skin.append("ProPaintMobile", null);
skin.append("Ãîòè÷åñêèé", null);
skin.append("Ýìî", null);
skin.append("SEclub.ORG", null);
skin.append("aNNiMON Forum", null);
skin.setSelectedIndex(Rms.skinid, true);
cRC.append("Ïîñòîÿííàÿ ïîäñâåòêà", null);
// cRC.append(L.str[L.stias], null);
// cRC.append(L.str[L.aplca], null);
// cRC.append(L.str[L.prwef], null);
// cRC.append(L.str[120], null);
// cRC.append(L.str[123], null);
cRC.setSelectedIndex(0, Rms.light);
// cRC.setSelectedIndex(1, P.dsI);
// cRC.setSelectedIndex(2, P.isUndo);
// cRC.setSelectedIndex(3, P.isEfView);
// cRC.setSelectedIndex(4, P.isLight);
// cRC.setSelectedIndex(5, P.BOC);
}
}

76
src/Rms.java Normal file
View File

@ -0,0 +1,76 @@
import java.io.*;
import javax.microedition.rms.*;
/**
*
* @author aNNiMON
*/
public class Rms {
private static final String rmsName = "SEPSLite";
private static RecordStore rmsStore;
public static boolean firstStart = true; // ïåðâûé ñòàðò
public static int skinid = 0;
public static boolean isLyric = true;
public static String lrcpath = "c:/music/Lyrics/";
public static boolean light = false;
/**
* Ñîõðàíåíèå íàñòðîåê
*/
public static void saveOptions() {
if (rmsStore != null) {
byte[] options = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeBoolean(firstStart);
dos.writeInt(skinid);
dos.writeBoolean(isLyric);
dos.writeUTF(lrcpath);
dos.writeBoolean(light);
dos.flush();
options = baos.toByteArray();
dos.close();
rmsStore.setRecord(1, options, 0, options.length);
} catch (InvalidRecordIDException ridex) {
try {
rmsStore.addRecord(options, 0, options.length);
} catch (RecordStoreException ex) {
}
} catch (Exception ex) {
}
}
if (rmsStore != null) {
try {
rmsStore.closeRecordStore();
rmsStore = null;
} catch (RecordStoreException ex) {
}
}
}
/**
* Âîññòàíîâèòü íàñòðîéêè
*/
public static void restoreOptions() {
try {
rmsStore = RecordStore.openRecordStore(rmsName, true);
} catch (RecordStoreException ex) {
rmsStore = null;
}
if (rmsStore != null) {
try {
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));
firstStart = dis.readBoolean();
skinid = dis.readInt();
isLyric = dis.readBoolean();
lrcpath = dis.readUTF();
light = dis.readBoolean();
dis.close();
} catch (Exception ex) {
}
}
}
}

View File

@ -13,20 +13,27 @@ public class SEPS extends MIDlet {
public static SEPS midlet;
public Display dsp;
public Canv cnv;
public SEPS() {
midlet = this;
Rms.restoreOptions();
new Skin(Rms.skinid);
cnv = new Canv();
dsp = Display.getDisplay(this);
}
public void startApp() {
dsp.setCurrent(new Canv());
dsp.setCurrent(cnv);
}
public void pauseApp() {
}
public void destroyApp(boolean unco) {
if(Rms.firstStart) Rms.firstStart=false;
Rms.saveOptions();
cnv.pauseTrack();
notifyDestroyed();
}
}

106
src/Skin.java Normal file
View File

@ -0,0 +1,106 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author aNNiMON
*/
public class Skin {
public Skin(int skin) {
switch(skin) {
case 0: //default
setSEPS();
break;
case 1: //PPM
setPPM();
break;
case 2: //Gothic
setGothic();
break;
case 3: //Emo
setEmo();
break;
case 4: //SEclub
setSEclub();
break;
case 5: //SEclub
setaNM();
break;
}
}
private void setSEPS() {
Canv.softUp1 = 0xFF242424;
Canv.softUp2 = 0x87282828;
Canv.softDn1 = 0x87151515;
Canv.softDn2 = 0xFF181818;
Canv.background = 0x00;
Canv.line = 0x00BB00;
Canv.text = 0x009900;
Canv.valuet = 0x0000E6;
Canv.inf = 0x992235;
}
private void setPPM() {
Canv.softUp1 = 0xFF3477d5;
Canv.softUp2 = 0x883477d5;
Canv.softDn1 = 0x8812396f;
Canv.softDn2 = 0xFF12396f;
Canv.background = 0xFFFFFF;
Canv.line = 0x0064A8;
Canv.text = 0x282828;
Canv.valuet = 0x296321;
Canv.inf = 0xA2DBF9;
}
private void setGothic() {
Canv.softUp1 = 0xFF141414;
Canv.softUp2 = 0x87181818;
Canv.softDn1 = 0x87151515;
Canv.softDn2 = 0xFF181818;
Canv.background = 0x00;
Canv.line = 0x6D6D6D;
Canv.text = 0x595959;
Canv.valuet = 0x666666;
Canv.inf = 0x474747;
}
private void setEmo() {
Canv.softUp1 = 0xFF1E1012;
Canv.softUp2 = 0x8887466D;
Canv.softDn1 = 0x88512C31;
Canv.softDn2 = 0xFFCE6BA6;
Canv.background = 0xFF879B;
Canv.line = 0xFF28A9;
Canv.text = 0x00;
Canv.valuet = 0x60204A;
Canv.inf = 0xD17DDB;
}
private void setSEclub() {
Canv.softUp1 = 0xFF295723;
Canv.softUp2 = 0x88295723;
Canv.softDn1 = 0x8834EB5E;
Canv.softDn2 = 0xFF34EB5E;
Canv.background = 0x295723;
Canv.line = 0xDFFFFF;
Canv.text = 0x2ED45E;
Canv.valuet = 0x34EB5E;
Canv.inf = 0xCAC410;
}
private void setaNM() {
Canv.softUp1 = 0xFF99AACC;
Canv.softUp2 = 0x7599AACC;
Canv.softDn1 = 0x75CCFF99;
Canv.softDn2 = 0xFFCCFF99;
Canv.background = 0xFFFF99;
Canv.line = 0x002B55;
Canv.text = 0x333399;
Canv.valuet = 0x640022;
Canv.inf = 0x008000;
}
}

45
src/about Normal file
View File

@ -0,0 +1,45 @@
Sony Ericsson Player Service 3.0
Автор: Виктор aNNiMON Мельник
Сайт разработчика: http://annimon.wen.ru/
Программа - управление родным плейером для телефонов Sony Ericsson с поддержкой MultimediaService API и датчиком движения.
Управление:
Влево/Вправо/Движение акселерометром - Переключение песен.
Вверх/Вниз - переключение режимов: Всё/Визуализация/Текст.
1/3 - Перемотка назад/вперед.
5/Огонь - Пауза.
0 - Включение/Отключение текстов песен.
* - Включение/Отключение визуализации.
# - Включение/Отключение акселерометра.
Изменения:
Версия 3.0
- Исправлен показ обложки в полноэкранном режиме.
- Добавил поддержку текстов песен (lrc). Файлы кидаем в папку Lyrics. Например c:/music/Lyrics/Bullet For My Valentine - Hand of Blood.lrc
- Сделал настройку пути к папке хранения .lrc текстов.
- Добавил постоянную подсветку и её настройку.
- Добавил 2 новых скина.
Версия 2.0
- Добавлена настройка чувствительности акселерометра,
- Добавлены скины: ProPaintMobile, Готический, Эмо(в котором все английские буквы ПрЫгАюТ),
- Режим визуализации. Переключается клавишами Вверх/Вниз,
- Добавил перемотку клавишами 1 и 3.
Поддержка lrc:
Lyrics-файл (.lrc) должен быть записан в кодировке WIN-1251, иначе возможны ошибки при чтении.
Имя lrc-файла должно быть либо "[Название группы] - [Название песни].lrc", либо "[Название исходного фудиофайла].ltc".
Примеры: "Three Days Grace - Someone Who Cares.lrc", "08 - Someone Who Cares.lrc", "Аудиодорожка_8_3373656326.lrc"
-= Помощь автору =-
Web-Money:
E254903540273
R347617663674
U299970747663
Z393537409230
- - - - - - - - - - - - - - - - - -
© aNNiMON (Melnik Software)
Украина, 2010

1
src/newfile Normal file
View File

@ -0,0 +1 @@
aNNiMON, Ну Вот юин эсприта, основной плагмэйкер... 2542902 Вот LocID