Skip to content

Commit

Permalink
More work on RMS and SMAF
Browse files Browse the repository at this point in the history
  • Loading branch information
usernameak committed Dec 31, 2024
1 parent abd7b0b commit 243cdb0
Show file tree
Hide file tree
Showing 19 changed files with 359 additions and 26 deletions.
11 changes: 11 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/AudioPhrase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.jblend.media.smaf.phrase;

public class AudioPhrase extends PhraseBase {
public AudioPhrase(byte[] data) {
super(data);
}

public AudioPhrase(String url) {
super(url);
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/AudioPhraseTrack.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.jblend.media.smaf.phrase;

public class AudioPhraseTrack extends PhraseTrackBase {
private AudioPhrase phrase;

public AudioPhraseTrack(int id) {
super(id);
}

public void setPhrase(AudioPhrase p) {
phrase = p;
}

public AudioPhrase getPhrase() {
return phrase;
}

public void removePhrase() {
phrase = null;
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/Phrase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.jblend.media.smaf.phrase;

public class Phrase extends PhraseBase {
public Phrase(byte[] data) {
super(data);
}

public Phrase(String url) {
super(url);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/PhraseBase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.jblend.media.smaf.phrase;

public abstract class PhraseBase {
public PhraseBase(byte[] data) {

}

public PhraseBase(String url) {

}

public int getSize() {
return 0;
}

public int getUseTracks() {
return 1;
}
}
87 changes: 87 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/PhrasePlayer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.jblend.media.smaf.phrase;

public class PhrasePlayer {
private static final PhrasePlayer instance = new PhrasePlayer();

private static final int NUM_TRACKS = 8;
private static final int NUM_AUDIO_TRACKS = 8;

private static final PhraseTrack[] tracks = new PhraseTrack[NUM_TRACKS];
private static final AudioPhraseTrack[] audioTracks = new AudioPhraseTrack[NUM_AUDIO_TRACKS];

static {
for (int i = 0; i < NUM_TRACKS; i++) {
tracks[i] = new PhraseTrack(i);
}
for (int i = 0; i < NUM_AUDIO_TRACKS; i++) {
audioTracks[i] = new AudioPhraseTrack(i);
}
}

public static PhrasePlayer getPlayer() {
return instance;
}

public void disposePlayer() {
kill();
}

public PhraseTrack getTrack() {
for (int i = NUM_TRACKS - 1; i >= 0; i--) {
if (tracks[i].isClaimed()) continue;
return getTrack(i);
}
throw new IllegalStateException("no free tracks");
}

public AudioPhraseTrack getAudioTrack() {
for (int i = NUM_AUDIO_TRACKS - 1; i >= 0; i--) {
if (audioTracks[i].isClaimed()) continue;
return getAudioTrack(i);
}
throw new IllegalStateException("no free audio tracks");
}

public int getTrackCount() {
return NUM_TRACKS;
}

public int getAudioTrackCount() {
return NUM_AUDIO_TRACKS;
}

public PhraseTrack getTrack(int i) {
PhraseTrack track = tracks[i];
track.setClaimed(true);
return track;
}

public AudioPhraseTrack getAudioTrack(int i) {
AudioPhraseTrack audioTrack = audioTracks[i];
audioTrack.setClaimed(true);
return audioTrack;
}

public void disposeTrack(PhraseTrack t) {
t.setClaimed(false);
}

public void disposeAudioTrack(AudioPhraseTrack t) {
t.setClaimed(false);
}

public void kill() {
pause();
for (int i = 0; i < NUM_TRACKS; i++) {
tracks[i].setClaimed(false);
}
}

public void pause() {

}

public void resume() {

}
}
30 changes: 30 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/PhraseTrack.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.jblend.media.smaf.phrase;

public class PhraseTrack extends PhraseTrackBase {
private PhraseTrack syncMaster;
private Phrase phrase;

public PhraseTrack(int id) {
super(id);
}

public void setPhrase(Phrase p) {
phrase = p;
}

public Phrase getPhrase() {
return phrase;
}

public void removePhrase() {
phrase = null;
}

public void setSubjectTo(PhraseTrack master) {
syncMaster = master;
}

public PhraseTrack getSyncMaster() {
return syncMaster;
}
}
78 changes: 78 additions & 0 deletions src/main/java/com/jblend/media/smaf/phrase/PhraseTrackBase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.jblend.media.smaf.phrase;

public class PhraseTrackBase {
private final int id;
private boolean isClaimed = false;

private int volume = 127;
private int panpot = 64;
private boolean mute = false;

public PhraseTrackBase(int id) {
this.id = id;
}

public int getID() {
return id;
}

public void setClaimed(boolean value) {
isClaimed = value;
}

public boolean isClaimed() {
return isClaimed;
}

public void play() {

}

public void play(int loop) {

}

public void stop() {

}

public void pause() {

}

public void resume() {

}

public int getState() {
throw new UnsupportedOperationException("Not supported yet.");
}

public void setVolume(int value) {
volume = value;
}

public int getVolume() {
return volume;
}

public void setPanpot(int value) {
panpot = value;
}

public int getPanpot() {
return panpot;
}

public void mute(boolean mute) {
this.mute = mute;
}

public boolean isMute() {
return mute;
}

public void setEventListener(PhraseTrackListener l) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.jblend.media.smaf.phrase;

public interface PhraseTrackListener {
void eventOccurred(int event);
}
2 changes: 1 addition & 1 deletion src/main/java/javax/microedition/lcdui/Canvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public final void serviceRepaints() {
return;
}

paint(app.getMidpGraphics());
paint(new Graphics(app.getBackbufferImage()));
app.blitGraphics();
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/javax/microedition/lcdui/Displayable.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ public abstract class Displayable {
public abstract boolean isShown();

public void addCommand(Command cmd) {
throw new FeatureNotImplementedError("Displayable::addCommand");
// throw new FeatureNotImplementedError("Displayable::addCommand");
}

public void removeCommand(Command cmd) {
throw new FeatureNotImplementedError("Displayable::removeCommand");
// throw new FeatureNotImplementedError("Displayable::removeCommand");
}

public void setCommandListener(CommandListener listener) {
throw new FeatureNotImplementedError("Displayable::setCommandListener");
// throw new FeatureNotImplementedError("Displayable::setCommandListener");
}
}
32 changes: 23 additions & 9 deletions src/main/java/javax/microedition/lcdui/Image.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,11 @@

public class Image {
private final BufferedImage image;
private final Graphics graphics;
private boolean mutable;

private Image(boolean mutable, BufferedImage bufferedImage) {
this.image = bufferedImage;
if (mutable) {
this.graphics = new Graphics(bufferedImage);
} else {
this.graphics = null;
}
this.mutable = mutable;
}

public static Image createImage(int width, int height) {
Expand All @@ -31,6 +27,24 @@ public static Image createImage(Image source) {
return new Image(false, copyImage(source.image));
}

public static Image createImage(Image image, int x, int y, int width, int height, int transform) {
if (transform != 0) {
throw new UnsupportedOperationException();
}
Image result = createImage(width, height);
java.awt.Graphics2D g = result.image.createGraphics();
g.drawImage(
image.image,
0, 0,
width, height,
x, y,
x + width, x + height,
null
);
result.mutable = false;
return image;
}

public static Image createImage(String name) throws IOException {
try {
try (InputStream stream = AmsResourceManager.getResourceAsStream(Image.class, name)) {
Expand Down Expand Up @@ -76,10 +90,10 @@ private static BufferedImage copyImage(BufferedImage bi) {
}

public Graphics getGraphics() {
if (graphics == null) {
if (!mutable) {
throw new IllegalStateException("Image::getGraphics() - image is immutable");
}
return graphics;
return new Graphics(image);
}

public int getWidth() {
Expand All @@ -91,7 +105,7 @@ public int getHeight() {
}

public boolean isMutable() {
return graphics != null;
return mutable;
}

public static BufferedImage getBufferedImage(Image image) {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/javax/microedition/rms/RecordStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ public void closeRecordStore() throws RecordStoreException {
isClosed = true;
}

public int getNumRecords() throws RecordStoreException {
if (isClosed) {
throw new RecordStoreNotOpenException();
}

SkvmAppInstance skvmAppInstance = (SkvmAppInstance) AppInstance.appInstance;
return skvmAppInstance.getRmsManager().getNumRecords(storeID);
}

public byte[] getRecord(int recordID) throws RecordStoreException {
if (isClosed) {
throw new RecordStoreNotOpenException();
Expand All @@ -54,4 +63,13 @@ public int addRecord(byte[] data, int offset, int numBytes) throws RecordStoreEx
SkvmAppInstance skvmAppInstance = (SkvmAppInstance) AppInstance.appInstance;
return skvmAppInstance.getRmsManager().addRecord(storeID, data, offset, numBytes);
}

public void setRecord(int index, byte[] data, int offset, int numBytes) throws RecordStoreException {
if (isClosed) {
throw new RecordStoreNotOpenException();
}

SkvmAppInstance skvmAppInstance = (SkvmAppInstance) AppInstance.appInstance;
skvmAppInstance.getRmsManager().setRecord(storeID, index, data, offset, numBytes);
}
}
Loading

0 comments on commit 243cdb0

Please sign in to comment.