| #include "lynq-qser-audio.h" |
| #include "mbtk_type.h" |
| #include "mbtk_log.h" |
| #include "mbtk_audio2.h" |
| |
| #define AUDIO_DEV_PLAY "device1" |
| #define AUDIO_DEV_RECORDER "device2" |
| #define AUDIO_HDL_DEFAULT 0 |
| |
| static _cb_onPlayer play_cb = NULL; |
| static int play_hdl = -1; |
| |
| static _cb_onPlayer recv_cb = NULL; |
| static int recv_hdl = -1; |
| |
| int qser_AudPlayer_Open(char* device, _cb_onPlayer cb_fun) |
| { |
| UNUSED(device); |
| UNUSED(cb_fun); |
| if(device == NULL || strcmp(device, AUDIO_DEV_PLAY)) { |
| LOGE("device must be %s for play.", AUDIO_DEV_PLAY); |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_init()) { |
| LOGE("mbtk_audio_wav_init() fail."); |
| return -1; |
| } |
| |
| play_cb = cb_fun; |
| |
| return 0; |
| } |
| |
| int qser_AudPlayer_PlayFrmFile(int hdl, const char *fd, int offset) |
| { |
| UNUSED(hdl); |
| UNUSED(fd); |
| UNUSED(offset); |
| if(play_hdl >= 0) { |
| LOGE("Play busy."); |
| if(play_cb) { |
| play_cb(-1); |
| } |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_play_start(fd)) { |
| LOGE("mbtk_audio_wav_play_start() fail."); |
| if(play_cb) { |
| play_cb(-2); |
| } |
| return -1; |
| } |
| |
| play_hdl = hdl; |
| |
| if(play_cb) { |
| play_cb(0); |
| } |
| |
| return 0; |
| } |
| |
| int qser_AudPlayer_PlayPcmBuf(const unsigned char *pcm_data, int data_size, int period_size, |
| int period_count, int num_channels, int sample_rate, int ownerid) |
| { |
| |
| if(play_hdl >= 0) { |
| LOGE("Play busy."); |
| if(play_cb) { |
| play_cb(-1); |
| } |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_stream_play_start(pcm_data, data_size, sample_rate, num_channels)) { |
| LOGE("mbtk_audio_wav_stream_play_start() fail."); |
| if(play_cb) { |
| play_cb(-2); |
| } |
| return -1; |
| } |
| |
| play_hdl = AUDIO_HDL_DEFAULT; |
| if(play_cb) { |
| play_cb(0); |
| } |
| return 0; |
| } |
| |
| int qser_AudPlayer_Pause(int hdl) |
| { |
| UNUSED(hdl); |
| if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) { |
| LOGE("Play busy or hdl error."); |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_play_pause()) { |
| LOGE("mbtk_audio_wav_play_pause() fail."); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int qser_AudPlayer_Resume(int hdl) |
| { |
| UNUSED(hdl); |
| if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) { |
| LOGE("Play busy or hdl error."); |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_play_resume()) { |
| LOGE("mbtk_audio_wav_play_resume() fail."); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| void qser_AudPlayer_Stop(int hdl) |
| { |
| UNUSED(hdl); |
| if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) { |
| LOGE("Play busy or hdl error."); |
| return; |
| } |
| |
| if(mbtk_audio_wav_play_stop()) { |
| LOGE("mbtk_audio_wav_play_stop() fail."); |
| return; |
| } |
| |
| play_hdl = -1; |
| } |
| |
| |
| void qser_AudPlayer_Close(int hdl) |
| { |
| UNUSED(hdl); |
| |
| if(play_hdl >= 0) { |
| qser_AudPlayer_Stop(hdl); |
| } |
| |
| if(mbtk_audio_wav_deinit()) { |
| LOGE("mbtk_audio_wav_deinit() fail."); |
| return; |
| } |
| |
| play_cb = NULL; |
| } |
| |
| int qser_AudRecorder_Open(char* device, _cb_onPlayer cb_fun) |
| { |
| UNUSED(device); |
| UNUSED(cb_fun); |
| if(device == NULL || strcmp(device, AUDIO_DEV_RECORDER)) { |
| LOGE("device must be %s for recv.", AUDIO_DEV_RECORDER); |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_init()) { |
| LOGE("mbtk_audio_wav_init() fail."); |
| return -1; |
| } |
| |
| recv_cb = cb_fun; |
| |
| return 0; |
| } |
| |
| int qser_AudRecorder_StartRecord(int hdl, const char *fd, int offset) |
| { |
| UNUSED(hdl); |
| UNUSED(fd); |
| UNUSED(offset); |
| if(recv_hdl >= 0) { |
| LOGE("Recv busy."); |
| if(recv_cb) { |
| recv_cb(-1); |
| } |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_recorder_start(fd, MBTK_AUDIO_SAMPLE_RATE_8000)) { |
| LOGE("mbtk_audio_wav_recorder_start() fail."); |
| if(recv_cb) { |
| recv_cb(-2); |
| } |
| return -1; |
| } |
| |
| recv_hdl = hdl; |
| if(recv_cb) { |
| recv_cb(0); |
| } |
| return 0; |
| } |
| |
| int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, int period_count, |
| int num_channels, int sample_rate) |
| { |
| return qser_AudRecorder_StartRecord(0, file, 0); |
| } |
| |
| int qser_AudRecorder_Pause(void) |
| { |
| if(recv_hdl < 0) { |
| LOGE("Recv busy or hdl error."); |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_recorder_pause()) { |
| LOGE("mbtk_audio_wav_recorder_pause() fail."); |
| return -1; |
| } |
| return 0; |
| } |
| |
| int qser_AudRecorder_Resume(void) |
| { |
| if(recv_hdl < 0) { |
| LOGE("Recv busy or hdl error."); |
| return -1; |
| } |
| |
| if(mbtk_audio_wav_recorder_resume()) { |
| LOGE("mbtk_audio_wav_recorder_resume() fail."); |
| return -1; |
| } |
| return 0; |
| } |
| |
| void qser_AudRecorder_Stop(void) |
| { |
| if(recv_hdl < 0) { |
| LOGE("Recv busy or hdl error."); |
| return; |
| } |
| |
| if(mbtk_audio_wav_recorder_stop()) { |
| LOGE("mbtk_audio_wav_recorder_stop() fail."); |
| return; |
| } |
| |
| recv_hdl = -1; |
| } |
| |
| void qser_AudRecorder_Close(void) |
| { |
| if(recv_hdl >= 0) { |
| qser_AudRecorder_Stop(); |
| } |
| |
| if(mbtk_audio_wav_deinit()) { |
| LOGE("mbtk_audio_wav_deinit() fail."); |
| return; |
| } |
| |
| recv_cb = NULL; |
| } |
| |
| void qser_Audio_Deinit(void) |
| { |
| // Do nothing... |
| } |
| |