# HG changeset patch # User Robert McIntyre # Date 1340501654 18000 # Node ID d00096b6bf17908558a8c7ba5ae0527f4a7244ad # Parent 5596cd4a3fc69dd49ac1c1a42aa0d519639dd204 added sound introspection abilities. diff -r 5596cd4a3fc6 -r d00096b6bf17 clojure/com/aurellem/gb/gb_driver.clj --- a/clojure/com/aurellem/gb/gb_driver.clj Sat Jun 23 19:12:26 2012 -0500 +++ b/clojure/com/aurellem/gb/gb_driver.clj Sat Jun 23 20:34:14 2012 -0500 @@ -193,6 +193,12 @@ ([new-data] (store-data @current-state new-data)))) +(def sound-data + (cpu-data Gb/SOUND_SIZE + (fn [arr] + (Gb/getFrameSound arr) + (Gb/setSoundFrameWritten 0)))) + (def memory (cpu-data Gb/GB_MEMORY #(Gb/getMemory %))) diff -r 5596cd4a3fc6 -r d00096b6bf17 clojure/com/aurellem/run/sound.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clojure/com/aurellem/run/sound.clj Sat Jun 23 20:34:14 2012 -0500 @@ -0,0 +1,20 @@ +(ns com.aurellem.run.sound + (:use (com.aurellem.gb saves gb-driver util constants + items vbm characters money + rlm-assembly)) + (:use (com.aurellem.run util music title save-corruption + bootstrap-0 bootstrap-1)) + (:require clojure.string) + (:import [com.aurellem.gb.gb_driver SaveState]) + (:import java.awt.image.BufferedImage) + (:import java.io.File)) + + +(defn sound-test [] + (step (mid-game)) + (println (frequencies (sound-data))) + (run-moves @current-state (repeat 10 [])) + (println (frequencies (sound-data)))) + + + \ No newline at end of file diff -r 5596cd4a3fc6 -r d00096b6bf17 java/src/com/aurellem/gb/Gb.java --- a/java/src/com/aurellem/gb/Gb.java Sat Jun 23 19:12:26 2012 -0500 +++ b/java/src/com/aurellem/gb/Gb.java Sat Jun 23 20:34:14 2012 -0500 @@ -101,6 +101,8 @@ public static final int GB_MEMORY = 0x10000; + public static final int SOUND_SIZE = 735 * 30 * 2; + public static native void getMemory(int[] store); public static native void writeMemory(int[] newMemory); @@ -127,7 +129,14 @@ public static native void getPixels(int[] store); + public static native void getFrameSound(int[] store); + public static native void nwritePNG(String filename); public static native int readMemory(int address); + + public static native int getSoundFrameWritten(); + + public static native void setSoundFrameWritten(int frames); + } diff -r 5596cd4a3fc6 -r d00096b6bf17 src/VisualBoyAdvance.cfg --- a/src/VisualBoyAdvance.cfg Sat Jun 23 19:12:26 2012 -0500 +++ b/src/VisualBoyAdvance.cfg Sat Jun 23 20:34:14 2012 -0500 @@ -182,7 +182,7 @@ # Sound OFF flag # 0=sound on, anything else turns off sound -soundOff=1 +soundOff=0 # Sound Enable # Controls which channels are enabled: (add values) diff -r 5596cd4a3fc6 -r d00096b6bf17 src/clojure/clojure.cpp --- a/src/clojure/clojure.cpp Sat Jun 23 19:12:26 2012 -0500 +++ b/src/clojure/clojure.cpp Sat Jun 23 20:34:14 2012 -0500 @@ -347,3 +347,41 @@ (JNIEnv *env, jclass clazz, jint address){ return (jint) gbReadMemory((u16) address); } + + +/* + * Class: com_aurellem_gb_Gb + * Method: getFrameSound + * Signature: ([I)V + */ +JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_getFrameSound +(JNIEnv *env, jclass clazz, jintArray arr){ + jint *sound_store = env->GetIntArrayElements(arr, 0); + int i; + for (i = 0; i < 44100; i++){ + sound_store[i] = (jint) soundFrameSound[i]; + } + env->ReleaseIntArrayElements(arr, sound_store, 0); +} + + +/* + * Class: com_aurellem_gb_Gb + * Method: getSoundFrameWritten + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_aurellem_gb_Gb_getSoundFrameWritten + (JNIEnv *env, jclass clazz){ + return soundFrameSoundWritten; +} + +/* + * Class: com_aurellem_gb_Gb + * Method: setSoundFrameWritten + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_setSoundFrameWritten +(JNIEnv *env, jclass clazz , jint newSoundFrameWritten){ + soundFrameSoundWritten = newSoundFrameWritten; +} + diff -r 5596cd4a3fc6 -r d00096b6bf17 src/gb/GB.h --- a/src/gb/GB.h Sat Jun 23 19:12:26 2012 -0500 +++ b/src/gb/GB.h Sat Jun 23 20:34:14 2012 -0500 @@ -65,6 +65,9 @@ extern u8 gbReadMemory(u16 address); +extern u16 soundFrameSound[735 * 30 * 2]; +extern int32 soundFrameSoundWritten; + extern struct EmulatedSystem GBSystem; extern struct EmulatedSystemCounters &GBSystemCounters;