[DEV] continue integration of audio interface

This commit is contained in:
Edouard DUPIN 2015-06-22 23:11:04 +02:00
parent 7d0a38e087
commit fbd6eceee6
5 changed files with 95 additions and 14 deletions

View File

@ -52,6 +52,7 @@ public class InterfaceOutput extends Thread implements Constants {
while (!m_stopAudioThreads) { while (!m_stopAudioThreads) {
// Fill buffer with PCM data from C++ // Fill buffer with PCM data from C++
// TODO : Set if back ... ORCHESTRA.audioPlayback(streamBuffer, BUFFER_SIZE, nbChannels); // TODO : Set if back ... ORCHESTRA.audioPlayback(streamBuffer, BUFFER_SIZE, nbChannels);
Log.i("audioEWOL", "new data ... ");
int xxx = BUFFER_SIZE; int xxx = BUFFER_SIZE;
/* /*
while (xxx>0) { while (xxx>0) {

View File

@ -24,6 +24,7 @@ import org.musicdsp.orchestra.InterfaceInput;
public class Manager implements ManagerCallback, Constants { public class Manager implements ManagerCallback, Constants {
private Orchestra orchestraHandle; private Orchestra orchestraHandle;
private int uid = 0; private int uid = 0;
private InterfaceOutput test;
private Vector<InterfaceOutput> outputList; private Vector<InterfaceOutput> outputList;
private Vector<InterfaceInput> inputList; private Vector<InterfaceInput> inputList;
@ -57,7 +58,9 @@ public class Manager implements ManagerCallback, Constants {
InterfaceOutput iface = new InterfaceOutput(uid, orchestraHandle, idDevice, freq, nbChannel, format); InterfaceOutput iface = new InterfaceOutput(uid, orchestraHandle, idDevice, freq, nbChannel, format);
uid++; uid++;
if (iface != null) { if (iface != null) {
outputList.add(iface); //outputList.add(iface);
test = iface;
return true;
} }
return false; return false;
/* /*
@ -97,5 +100,31 @@ public class Manager implements ManagerCallback, Constants {
*/ */
return false; return false;
} }
public boolean start(int idDevice) {
if (idDevice == 0) {
if (test != null) {
test.start();
return true;
}
}
return false;
}
public boolean stop(int idDevice) {
if (idDevice == 0) {
if (test != null) {
// request audio stop
test.AutoStop();
try {
test.join();
} catch(InterruptedException e) { }
test = null;
return true;
}
}
return false;
}
} }

View File

@ -13,4 +13,6 @@ public interface ManagerCallback {
public String getDeviceProperty(int idDevice); public String getDeviceProperty(int idDevice);
public boolean openDevice(int idDevice, int sampleRate, int nbChannel, int format); public boolean openDevice(int idDevice, int sampleRate, int nbChannel, int format);
public boolean closeDevice(int idDevice); public boolean closeDevice(int idDevice);
public boolean start(int idDevice);
public boolean stop(int idDevice);
} }

View File

@ -52,7 +52,7 @@ enum audio::orchestra::error audio::orchestra::api::Android::startStream() {
// TODO : Check return ... // TODO : Check return ...
audio::orchestra::Api::startStream(); audio::orchestra::Api::startStream();
// Can not close the stream now... // Can not close the stream now...
return audio::orchestra::error_none; return audio::orchestra::api::android::startStream(0);
} }
enum audio::orchestra::error audio::orchestra::api::Android::stopStream() { enum audio::orchestra::error audio::orchestra::api::Android::stopStream() {
@ -62,7 +62,7 @@ enum audio::orchestra::error audio::orchestra::api::Android::stopStream() {
tmpContext.audioCloseDevice(0); tmpContext.audioCloseDevice(0);
#endif #endif
// Can not close the stream now... // Can not close the stream now...
return audio::orchestra::error_none; return audio::orchestra::api::android::stopStream(0);
} }
enum audio::orchestra::error audio::orchestra::api::Android::abortStream() { enum audio::orchestra::error audio::orchestra::api::Android::abortStream() {

View File

@ -27,6 +27,8 @@ class AndroidOrchestraContext {
jmethodID m_javaMethodOrchestraActivityAudioGetDeviceProperty; jmethodID m_javaMethodOrchestraActivityAudioGetDeviceProperty;
jmethodID m_javaMethodOrchestraActivityAudioOpenDevice; jmethodID m_javaMethodOrchestraActivityAudioOpenDevice;
jmethodID m_javaMethodOrchestraActivityAudioCloseDevice; jmethodID m_javaMethodOrchestraActivityAudioCloseDevice;
jmethodID m_javaMethodOrchestraActivityAudioStart;
jmethodID m_javaMethodOrchestraActivityAudioStop;
jclass m_javaDefaultClassString; //!< default string class jclass m_javaDefaultClassString; //!< default string class
private: private:
bool safeInitMethodID(jmethodID& _mid, jclass& _cls, const char* _name, const char* _sign) { bool safeInitMethodID(jmethodID& _mid, jclass& _cls, const char* _name, const char* _sign) {
@ -80,6 +82,8 @@ class AndroidOrchestraContext {
m_javaMethodOrchestraActivityAudioGetDeviceProperty(0), m_javaMethodOrchestraActivityAudioGetDeviceProperty(0),
m_javaMethodOrchestraActivityAudioOpenDevice(0), m_javaMethodOrchestraActivityAudioOpenDevice(0),
m_javaMethodOrchestraActivityAudioCloseDevice(0), m_javaMethodOrchestraActivityAudioCloseDevice(0),
m_javaMethodOrchestraActivityAudioStart(0),
m_javaMethodOrchestraActivityAudioStop(0),
m_javaDefaultClassString(0) { m_javaDefaultClassString(0) {
ATA_DEBUG("*******************************************"); ATA_DEBUG("*******************************************");
ATA_DEBUG("** set JVM Pointer (orchestra) **"); ATA_DEBUG("** set JVM Pointer (orchestra) **");
@ -146,6 +150,24 @@ class AndroidOrchestraContext {
ATA_ERROR("system can not start without function : closeDevice"); ATA_ERROR("system can not start without function : closeDevice");
functionCallbackIsMissing = true; functionCallbackIsMissing = true;
} }
ret = safeInitMethodID(m_javaMethodOrchestraActivityAudioStart,
m_javaClassOrchestraCallback,
"start",
"(I)Z");
if (ret == false) {
jvm_basics::checkExceptionJavaVM(_env);
ATA_ERROR("system can not start without function : start");
functionCallbackIsMissing = true;
}
ret = safeInitMethodID(m_javaMethodOrchestraActivityAudioStop,
m_javaClassOrchestraCallback,
"stop",
"(I)Z");
if (ret == false) {
jvm_basics::checkExceptionJavaVM(_env);
ATA_ERROR("system can not start without function : stop");
functionCallbackIsMissing = true;
}
m_javaObjectOrchestraCallback = _env->NewGlobalRef(_objCallback); m_javaObjectOrchestraCallback = _env->NewGlobalRef(_objCallback);
@ -275,15 +297,15 @@ class AndroidOrchestraContext {
public: public:
enum audio::orchestra::error closeStream(int32_t _id) { enum audio::orchestra::error closeStream(int32_t _id) {
ATA_DEBUG("C->java : audio close device"); ATA_DEBUG("C->java : audio close device");
int status; int status;
if(!java_attach_current_thread(&status)) { if(!java_attach_current_thread(&status)) {
return audio::orchestra::error_fail; return audio::orchestra::error_fail;
} }
//Call java ... //Call java ...
jboolean ret = m_JavaVirtualMachinePointer->CallBooleanMethod(m_javaObjectOrchestraCallback, m_javaMethodOrchestraActivityAudioCloseDevice, _id); jboolean ret = m_JavaVirtualMachinePointer->CallBooleanMethod(m_javaObjectOrchestraCallback, m_javaMethodOrchestraActivityAudioCloseDevice, _id);
// manage execption : // manage execption :
jvm_basics::checkExceptionJavaVM(m_JavaVirtualMachinePointer); jvm_basics::checkExceptionJavaVM(m_JavaVirtualMachinePointer);
java_detach_current_thread(status); java_detach_current_thread(status);
if (bool(ret) == false) { if (bool(ret) == false) {
return audio::orchestra::error_fail; return audio::orchestra::error_fail;
} }
@ -291,10 +313,37 @@ class AndroidOrchestraContext {
} }
enum audio::orchestra::error startStream(int32_t _id) { enum audio::orchestra::error startStream(int32_t _id) {
return audio::orchestra::error_fail; ATA_DEBUG("C->java : audio start device");
int status;
if(!java_attach_current_thread(&status)) {
return audio::orchestra::error_fail;
}
//Call java ...
jboolean ret = m_JavaVirtualMachinePointer->CallBooleanMethod(m_javaObjectOrchestraCallback, m_javaMethodOrchestraActivityAudioStart, _id);
// manage execption :
jvm_basics::checkExceptionJavaVM(m_JavaVirtualMachinePointer);
java_detach_current_thread(status);
if (bool(ret) == false) {
return audio::orchestra::error_fail;
}
return audio::orchestra::error_none;
} }
enum audio::orchestra::error stopStream(int32_t _id) { enum audio::orchestra::error stopStream(int32_t _id) {
return audio::orchestra::error_fail;
ATA_DEBUG("C->java : audio close device");
int status;
if(!java_attach_current_thread(&status)) {
return audio::orchestra::error_fail;
}
//Call java ...
jboolean ret = m_JavaVirtualMachinePointer->CallBooleanMethod(m_javaObjectOrchestraCallback, m_javaMethodOrchestraActivityAudioStop, _id);
// manage execption :
jvm_basics::checkExceptionJavaVM(m_JavaVirtualMachinePointer);
java_detach_current_thread(status);
if (bool(ret) == false) {
return audio::orchestra::error_fail;
}
return audio::orchestra::error_none;
} }
enum audio::orchestra::error abortStream(int32_t _id) { enum audio::orchestra::error abortStream(int32_t _id) {
return audio::orchestra::error_fail; return audio::orchestra::error_fail;