3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.tizenopensource.org/license
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
21 #include "AudioInOut.h"
22 #include "SafeMacros.h"
23 #include "UnitTestFactory.h"
25 using namespace Osp::Base;
26 using namespace Osp::Ui;
27 using namespace Osp::Ui::Controls;
28 using namespace Osp::Io;
29 using namespace Osp::System;
30 using namespace Osp::App;
32 #define ENABLE_PROGRESS_BAR
34 using namespace Osp::Media;
36 MULTI_FORM_REGISTER(AudioInOut, L"AudioInOut");
37 DECLARE_TC(L"Audio", L"2.AudioInOut", AudioInOut::TestFunc, 0);
39 static int sampleRate[] = { 0, 8000, 14025, 22050, 32000, 44056, 44100, 47250, 48000};
43 AudioInOut::TestFunc(void* pParam)
45 MultiForm::ActivateForm(L"AudioInOut", pParam, MultiForm::GetCurrentForm(), null);
49 AudioInOut::AudioInOut(void)
58 __checkInitFiniPair = false;
59 __checkInitFiniPairOut = false;
60 __sampleBitDepth = AUDIO_TYPE_NONE;
61 __sampleChannelType = AUDIO_CHANNEL_TYPE_NONE;
64 __pCheckButtonCT1 = null;
65 __pCheckButtonCT2 = null;
66 __pCheckButtonSB1 = null;
67 __pCheckButtonSB2 = null;
69 __isRecording = false;
71 #ifdef ENABLE_PROGRESS_BAR
73 __pLabelTotatTime = null;
74 __pLabelInitialTime = null;
76 memset(__footerActionId, 0, sizeof(__footerActionId));
79 AudioInOut::~AudioInOut(void)
83 SAFE_DELETE(__pAudioIn);
89 AudioInOut::Initialize()
92 // This is called at once when application is launched.
93 // Construct an XML form
94 Construct(L"IDF_AUDIOINOUT");
100 AudioInOut::InitializeAudioIn(void)
102 AppLog("Enter __checkInitFiniPair - %d", __checkInitFiniPair);
104 result r = E_SUCCESS;
106 if (__pAudioIn != null)
108 if (__pAudioIn->GetState() == AUDIOIN_STATE_RECORDING)
112 if (__pAudioIn->GetState() == AUDIOIN_STATE_STOPPED)
118 // This is called when AudioIn form is moving on the foreground.
119 if (__checkInitFiniPair == false)
122 __pFile = new (std::nothrow) File();
125 AppLogException("[Error] out of memory can't create File");
126 return E_OUT_OF_MEMORY;
129 r = __pFile->Construct(App::GetInstance()->GetAppRootPath() + L"data/sound.dat", L"wb");
132 AppLogException("[Error] m_File Construct failed : %d", r);
136 // Preset AudioIn Properties
137 if (!__sampleChannelType)
139 __sampleChannelType = AUDIO_CHANNEL_TYPE_MONO;
142 if (!__sampleBitDepth)
144 __sampleBitDepth = AUDIO_TYPE_PCM_S16_LE;
149 __sampleRate = 44100;
153 if (__sampleChannelType == AUDIO_CHANNEL_TYPE_MONO)
155 __pCheckButtonCT1->SetSelected(true);
159 __pCheckButtonCT2->SetSelected(true);
162 if (__sampleBitDepth == AUDIO_TYPE_PCM_U8)
164 __pCheckButtonSB1->SetSelected(true);
168 __pCheckButtonSB2->SetSelected(true);
171 for (unsigned int i = 0; i < SIZEOF(sampleRate); i++)
173 if (__sampleRate == sampleRate[i])
175 __pSlider->SetValue(i);
179 SetSampleRateText(__sampleRate);
181 // Seek File description to the begin.
182 __pFile->Seek(FILESEEKPOSITION_BEGIN, 0);
185 // Set CheckBox enabled
186 SetCheckButtonEnabled(__pCheckButtonCT1, true);
187 SetCheckButtonEnabled(__pCheckButtonCT2, true);
188 SetCheckButtonEnabled(__pCheckButtonSB1, true);
189 SetCheckButtonEnabled(__pCheckButtonSB2, true);
190 // Set Slider enabled
191 SetSliderEnabled(__pSlider, true);
195 __maxFileSize = __sampleRate * MAX_REC_TIME;
196 if (__sampleChannelType == AUDIO_CHANNEL_TYPE_STEREO)
198 __maxFileSize = __maxFileSize << 1;
200 if (__sampleBitDepth == AUDIO_TYPE_PCM_S16_LE)
202 __maxFileSize = __maxFileSize << 1;
204 __checkInitFiniPair = true;
208 // Check double initializing
209 AppLog("[WARNING] The application state is not proper");
215 AudioInOut::InitializeAudioOut()
218 result r = E_SUCCESS;
220 SetCheckButtonEnabled(__pCheckButtonCT1, false);
221 SetCheckButtonEnabled(__pCheckButtonCT2, false);
222 SetCheckButtonEnabled(__pCheckButtonSB1, false);
223 SetCheckButtonEnabled(__pCheckButtonSB2, false);
225 if (__recordedTime == 0)
227 AppLog("Clip Too short so reset");
230 msgBox.Construct("Warning", "Clip too short so reseting the application", MSGBOX_STYLE_NONE, 3000);
231 msgBox.ShowAndWait(modalResult);
232 AppLog("modal Result - %d", modalResult);
235 return E_INVALID_ARG;
237 #ifdef ENABLE_PROGRESS_BAR
239 maxTime.Append(__recordedTime);
240 maxTime.Append(" sec");
241 __pLabelTotatTime->SetText(maxTime);
242 __pProgress->SetRange(0, __maxFileSize);
245 SetSliderEnabled(__pSlider, false);
247 __pFile = new (std::nothrow) File;
248 r = __pFile->Construct(App::GetInstance()->GetAppRootPath() + L"data/sound.dat", L"rb");
251 AppLogException("[Error] m_File Construct failed : %d", r);
257 r = __pAudioOut->Prepare(__sampleBitDepth, __sampleChannelType, __sampleRate);
258 TryCatch(r == E_SUCCESS, , "Prepare failed");
259 for (int i = 0; i < CirclularBufferCount; i++)
261 __byteBuffer[i].Clear();
262 r = __pFile->Read(__byteBuffer[i]);
265 __pAudioOut->WriteBuffer(__byteBuffer[i]);
267 __buffIndex = (__buffIndex + 1) % CirclularBufferCount;
271 AppLog("Clip Too short so reset");
274 msgBox.Construct("Warning", "Clip too short so reseting the applicaiton", MSGBOX_STYLE_NONE, 3000);
275 msgBox.ShowAndWait(modalResult);
276 AppLog("modal Result - %d", modalResult);
278 return E_INVALID_ARG;
282 __checkInitFiniPairOut = true;
290 AudioInOut::OnInitializing(void)
293 result r = E_SUCCESS;
295 // Initialize Recording form
296 SetHeaderText(L"AudioInOut Test");
297 SetFooterStyle(FOOTER_STYLE_BUTTON_TEXT, false, this);
298 AddFooterItem(L"Record", ID_BUTTON_RECORD);
299 AddFooterItem(L"Stop", ID_BUTTON_STOP);
300 AddFooterItem(L"Play", ID_BUTTON_PLAY);
302 EnableFooterItem(ID_BUTTON_RECORD, true);
303 EnableFooterItem(ID_BUTTON_STOP, false);
304 EnableFooterItem(ID_BUTTON_PLAY, false);
306 SetFormBackEventListener(this);
307 Footer* pfooter = GetFooter();
310 pfooter->SetBackButton();
314 for (unsigned int i = 0; i < SIZEOF(__byteBuffer); i++)
316 r = __byteBuffer[i].Construct(audio_buffer_size);
317 TRY_CATCH(r == E_SUCCESS, , "[Error] __byteBuffer[%d].Construct failed: %s", i, GetErrorMessage(r));
320 // Create an AudioIn instance
321 __pAudioIn = new (std::nothrow) Osp::Media::AudioIn();
322 TRY_CATCH(__pAudioIn, r = GetLastResult(), "[Error] new (std::nothrow) AudioIn failed: %s", GetErrorMessage(GetLastResult()));
324 // Construct an AudioIn instance
325 r = __pAudioIn->Construct(*this);
326 TRY_CATCH(r == E_SUCCESS, , "[Error] __pAudioIn->Construct failed: %s", GetErrorMessage(r));
329 __pAudioOut = new (std::nothrow) Osp::Media::AudioOut();
330 TRY_CATCH(__pAudioOut, r = GetLastResult(), "[Error] new (std::nothrow) AudioOut failed: %s", GetErrorMessage(GetLastResult()));
332 // Construct an AudioIn instance
333 r = __pAudioOut->Construct(*this);
334 TRY_CATCH(r == E_SUCCESS, , "[Error] __pAudioIn->Construct failed: %s", GetErrorMessage(r));
337 r = __timer.Construct(*this);
338 TRY_CATCH(r == E_SUCCESS, , "[Error] __timer Construct failed : %s", GetErrorMessage(r));
341 __pLabelSampleRate = static_cast< Label* >(GetControl(L"IDC_LABEL_SAMPLE_RATE"));
342 TRY_CATCH(__pLabelSampleRate, r = GetLastResult(), "__pLabelSampleRate is null : %s", GetErrorMessage(GetLastResult()));
343 __sampleRateText = __pLabelSampleRate->GetText();
346 __pCheckButtonCT1 = static_cast< CheckButton* >(GetControl(L"IDC_CHECKBUTTON_CT1"));
347 TRY_CATCH(__pCheckButtonCT1, r = GetLastResult(), "__pCheckButtonCT1 is null:%s", GetErrorMessage(GetLastResult()));
348 __pCheckButtonCT1->SetActionId(ID_CHECKBUTTON_CT1_CHECKED, ID_CHECKBUTTON_CT1_UNCHECKED, ID_CHECKBUTTON_CT1_SELECTED);
349 __pCheckButtonCT1->AddActionEventListener(*this);
350 __pCheckButtonCT1->SetSelected(true);
352 __pCheckButtonCT2 = static_cast< CheckButton* >(GetControl(L"IDC_CHECKBUTTON_CT2"));
353 TRY_CATCH(__pCheckButtonCT2, r = GetLastResult(), "__pCheckButtonCT2 is null:%s", GetErrorMessage(GetLastResult()));
354 __pCheckButtonCT2->SetActionId(ID_CHECKBUTTON_CT2_CHECKED, ID_CHECKBUTTON_CT2_UNCHECKED, ID_CHECKBUTTON_CT2_SELECTED);
355 __pCheckButtonCT2->AddActionEventListener(*this);
357 __pCheckButtonSB1 = static_cast< CheckButton* >(GetControl(L"IDC_CHECKBUTTON_SB1"));
358 TRY_CATCH(__pCheckButtonSB1, r = GetLastResult(), "__pCheckButtonBS1 is null:%s", GetErrorMessage(GetLastResult()));
359 __pCheckButtonSB1->SetActionId(ID_CHECKBUTTON_SB1_CHECKED, ID_CHECKBUTTON_SB1_UNCHECKED, ID_CHECKBUTTON_SB1_SELECTED);
360 __pCheckButtonSB1->AddActionEventListener(*this);
362 __pCheckButtonSB2 = static_cast< CheckButton* >(GetControl(L"IDC_CHECKBUTTON_SB2"));
363 TRY_CATCH(__pCheckButtonSB2, r = GetLastResult(), "__pCheckButtonSB2 is null:%s", GetErrorMessage(GetLastResult()));
364 __pCheckButtonSB2->SetActionId(ID_CHECKBUTTON_SB2_CHECKED, ID_CHECKBUTTON_SB2_UNCHECKED, ID_CHECKBUTTON_SB2_SELECTED);
365 __pCheckButtonSB2->AddActionEventListener(*this);
366 __pCheckButtonSB2->SetSelected(true);
368 #ifdef ENABLE_PROGRESS_BAR
370 __pProgress = static_cast< Progress* >(GetControl(L"IDC_PROGRESS"));
371 TRY_CATCH(__pProgress, r = GetLastResult(), "__pProgress is null : %s", GetErrorMessage(GetLastResult()));
373 __pProgress->SetShowState(true);
375 __pLabelTotatTime = static_cast< Label* >(GetControl(L"IDC_LABEL4"));
376 TRY_CATCH(__pLabelTotatTime, r = GetLastResult(), " __pLabelTotatTime is null : %s", GetErrorMessage(GetLastResult()));
377 __pLabelTotatTime->SetShowState(true);
379 __pLabelInitialTime = static_cast< Label* >(GetControl(L"IDC_LABEL3"));
380 TRY_CATCH(__pLabelInitialTime, r = GetLastResult(), " __pLabelTotatTime is null : %s", GetErrorMessage(GetLastResult()));
381 __pLabelInitialTime->SetShowState(true);
385 __pSlider = static_cast< Slider* >(GetControl(L"IDC_SLIDER"));
386 TRY_CATCH(__pSlider, r = GetLastResult(), "__pSlider is null:%s", GetErrorMessage(GetLastResult()));
387 __pSlider->AddAdjustmentEventListener(*this);
389 // Add Key event listener
390 AddKeyEventListener(*this);
398 AudioInOut::OnActivate(void* pParam)
400 AppLog("OnActivate");
407 AudioInOut::OnTerminating(void)
415 AudioInOut::OnActionPerformed(const Osp::Ui::Control& source, int actionId)
421 case ID_BUTTON_RECORD:
422 AppLog("Record Pressed");
424 __isRecording = true;
428 AppLog("Stop Pressed");
440 AppLog("Play Pressed");
441 if (StartPlay() == E_SUCCESS)
443 __isRecording = false;
447 case ID_CHECKBUTTON_CT1_CHECKED:
448 __sampleChannelType = AUDIO_CHANNEL_TYPE_MONO;
452 case ID_CHECKBUTTON_CT1_UNCHECKED:
456 case ID_CHECKBUTTON_CT1_SELECTED:
460 case ID_CHECKBUTTON_CT2_CHECKED:
461 __sampleChannelType = AUDIO_CHANNEL_TYPE_STEREO;
465 case ID_CHECKBUTTON_CT2_UNCHECKED:
469 case ID_CHECKBUTTON_CT2_SELECTED:
473 case ID_CHECKBUTTON_SB1_CHECKED:
474 __sampleBitDepth = AUDIO_TYPE_PCM_U8;
477 case ID_CHECKBUTTON_SB1_UNCHECKED:
481 case ID_CHECKBUTTON_SB1_SELECTED:
485 case ID_CHECKBUTTON_SB2_CHECKED:
486 __sampleBitDepth = AUDIO_TYPE_PCM_S16_LE;
489 case ID_CHECKBUTTON_SB2_UNCHECKED:
493 case ID_CHECKBUTTON_SB2_SELECTED:
499 AppLogException("Don't come here");
505 AudioInOut::OnAudioInBufferIsFilled(Osp::Base::ByteBuffer* pData)
507 result r = E_SUCCESS;
510 if (__buffCnt == CirclularBufferCount)
515 r = __pAudioIn->AddBuffer(&__byteBuffer[__buffCnt]);
518 AppLogException("[Error] __pAudioIn->AddBuffer failed with %s", GetErrorMessage(r));
521 Save(pData, pData->GetLimit());
526 AudioInOut::OnAudioInInterrupted(void)
533 AudioInOut::OnAudioInReleased(void)
535 AppLog("Reset the Application");
540 AudioInOut::OnAudioOutBufferEndReached(Osp::Media::AudioOut& src)
542 result r = E_SUCCESS;
543 __fileSize = __fileSize + audio_buffer_size;
545 __buffIndex = (__buffIndex + 1) % CirclularBufferCount;
546 __byteBuffer[__buffIndex].Clear();
547 r = __pFile->Read(__byteBuffer[__buffIndex]);
550 __pAudioOut->WriteBuffer(__byteBuffer[__buffIndex]);
555 AppLog("Buffer Count = %d", __buffCnt);
561 AppLogException("StopPlay falied with %s", GetErrorMessage(r));
567 AudioInOut::OnAudioOutInterrupted(Osp::Media::AudioOut& src)
573 AudioInOut::OnAudioOutReleased(Osp::Media::AudioOut& src)
575 AppLog("Resting the Application");
580 AudioInOut::OnTimerExpired(Osp::Base::Runtime::Timer& timer)
582 if (__fileSize < __maxFileSize)
584 #ifdef ENABLE_PROGRESS_BAR
585 UpdateProgress(__fileSize);
587 //Update once in half a second.
592 // Maximum time is 10 seconds. After 10 seconds, move to the playing form automatically
593 #ifdef ENABLE_PROGRESS_BAR
594 UpdateProgress(__fileSize);
599 #ifdef ENABLE_PROGRESS_BAR
608 AudioInOut::StartRecording(void)
611 result r = E_SUCCESS;
612 r = InitializeAudioIn();
613 TRY_CATCH(r == E_SUCCESS, , "InitializeAudioIn failed:%s", GetErrorMessage(r));
617 if (__pAudioIn->GetState() == AUDIOIN_STATE_PREPARED)
619 r = __pAudioIn->Start();
622 AppLog("[Error][%s][%d] __pAudioIn->Start failed (May the microphone on the system is not installed, please check your microphone on your system)",
623 GetErrorMessage(r), __pAudioIn->GetState());
629 EnableFooterItem(ID_BUTTON_RECORD, false);
630 EnableFooterItem(ID_BUTTON_STOP, true);
631 EnableFooterItem(ID_BUTTON_PLAY, false);
634 SetCheckButtonEnabled(__pCheckButtonCT1, false);
635 SetCheckButtonEnabled(__pCheckButtonCT2, false);
636 SetCheckButtonEnabled(__pCheckButtonSB1, false);
637 SetCheckButtonEnabled(__pCheckButtonSB2, false);
640 SetSliderEnabled(__pSlider, false);
643 //Update once in Half a second
646 #ifdef ENABLE_PROGRESS_BAR
647 __pProgress->SetRange(0, __maxFileSize); // 10 Seconds limitation
648 __pProgress->SetValue(0);
655 AppLog("Audio In State", __pAudioIn->GetState());
663 AudioInOut::StopRecording(void)
666 result r = E_SUCCESS;
669 if (__pAudioIn->GetState() == AUDIOIN_STATE_RECORDING)
671 r = __pAudioIn->Reset();
674 AppLog("[Error] __pAudioIn->Reset failed..%d ", r);
678 if (__pAudioIn->GetState() == AUDIOIN_STATE_PREPARED)
680 r = __pAudioIn->Unprepare();
683 AppLog("[Error] __pAudioIn->Unprepare failed..%d ", r);
687 // When stop recording, the result file has to be closed.
688 SAFE_DELETE(__pFile);
689 AppLog("File Size = %d", __fileSize);
691 FileAttributes opFileAttr;
692 r = File::GetAttributes(App::GetInstance()->GetAppRootPath() + L"data" + FILE_PATH, opFileAttr);
695 __maxFileSize = opFileAttr.GetFileSize();
696 int SampleSize = (__sampleBitDepth == AUDIO_TYPE_PCM_U8) ? 1 : 2;
697 int channelSize = (__sampleChannelType == AUDIO_CHANNEL_TYPE_MONO) ? 1 : 2;
698 __recordedTime = __maxFileSize / (SampleSize * channelSize * __sampleRate);
699 AppLog("Recoded Time - %d - maxFileSize - %d", __recordedTime, __maxFileSize);
706 EnableFooterItem(ID_BUTTON_RECORD, false);
707 EnableFooterItem(ID_BUTTON_STOP, false);
708 EnableFooterItem(ID_BUTTON_PLAY, true);
709 #ifdef ENABLE_PROGRESS_BAR
714 __checkInitFiniPair = false;
715 __isRecording = false;
720 AudioInOut::StopPlay()
722 result r = E_SUCCESS;
725 r = __pAudioOut->Stop();
726 r = __pAudioOut->Reset();
727 r = __pAudioOut->Unprepare();
732 AudioInOut::StartPlay()
734 result r = E_SUCCESS;
735 r = InitializeAudioOut();
738 AppLog("Clip is too short failed with -%s", GetErrorMessage(r));
741 r = __pAudioOut->Start();
744 ShowMessageBox("Error", "Play failed\n(%s)", GetErrorMessage(r));
748 EnableFooterItem(ID_BUTTON_RECORD, false);
749 EnableFooterItem(ID_BUTTON_STOP, true);
750 EnableFooterItem(ID_BUTTON_PLAY, false);
752 //Update once in half a second.
754 #ifdef ENABLE_PROGRESS_BAR
763 AudioInOut::Save(Osp::Base::ByteBuffer* pData, int size)
765 result r = E_SUCCESS;
769 r = __pFile->Write((char*) (pData->GetPointer()), size);
772 AppLogException("[Error] File Write Failed with %s", GetErrorMessage(r));
775 __fileSize = __fileSize + size;
780 AudioInOut::UpdateProgress(int percent)
782 if (__pProgress != null)
784 __pProgress->SetValue(percent);
785 //Disabling progress bar for now
791 AudioInOut::SetButtonEnabled(Osp::Ui::Controls::Button* pControl, bool bEnabled)
793 pControl->SetEnabled(bEnabled);
798 AudioInOut::SetCheckButtonEnabled(Osp::Ui::Controls::CheckButton* pControl, bool bEnabled)
800 pControl->SetEnabled(bEnabled);
805 AudioInOut::SetSliderEnabled(Osp::Ui::Controls::Slider* pControl, bool bEnabled)
807 pControl->SetEnabled(bEnabled);
812 AudioInOut::InitAudioInOut()
814 #ifdef ENABLE_PROGRESS_BAR
815 String maxTime("10");
816 maxTime.Append(" sec");
817 __pLabelTotatTime->SetText(maxTime);
818 //disabling slider for now
819 __pLabelTotatTime->Draw();
820 __pProgress->SetRange(0, __maxFileSize);
826 EnableFooterItem(ID_BUTTON_RECORD, true);
827 EnableFooterItem(ID_BUTTON_STOP, false);
828 EnableFooterItem(ID_BUTTON_PLAY, false);
830 SetCheckButtonEnabled(__pCheckButtonCT1, true);
831 SetCheckButtonEnabled(__pCheckButtonCT2, true);
832 SetCheckButtonEnabled(__pCheckButtonSB1, true);
833 SetCheckButtonEnabled(__pCheckButtonSB2, true);
836 SetSliderEnabled(__pSlider, true);
841 AudioInOut::Finalize(void)
844 result r = E_SUCCESS;
845 if (__checkInitFiniPair)
847 result r = E_SUCCESS;
850 if (__pAudioIn->GetState() == AUDIOIN_STATE_RECORDING)
852 r = __pAudioIn->Reset();
855 AppLog("[Error] __pAudioIn->Reset failed..%d ", r);
859 if (__pAudioIn->GetState() == AUDIOIN_STATE_PREPARED)
861 r = __pAudioIn->Unprepare();
864 AppLog("[Error] __pAudioIn->Unprepare failed..%d ", r);
868 // When stop recording, the result file has to be closed.
875 __checkInitFiniPair = false;
880 // Check double finishing
881 AppLog("[WARNING] The application state is not proper");
884 if (__checkInitFiniPairOut)
886 if (__pAudioOut->GetState() == AUDIOOUT_STATE_PLAYING)
888 r = __pAudioOut->Reset();
891 AppLog("[Error] __pAudioIn->Reset failed..%d ", r);
895 if (__pAudioOut->GetState() == AUDIOOUT_STATE_PREPARED)
897 r = __pAudioOut->Unprepare();
900 AppLog("[Error] __pAudioIn->Unprepare failed..%d ", r);
903 __checkInitFiniPairOut = false;
907 AppLog("[WARNING] The application state is not proper");
912 Osp::Media::AudioInState
913 AudioInOut::GetState(void)
915 if (__pAudioIn != null)
917 return __pAudioIn->GetState();
921 return AUDIOIN_STATE_ERROR;
927 AudioInOut::OnAdjustmentValueChanged(const Osp::Ui::Control& source, int adjustment)
930 if (adjustment >= 1 && adjustment <= 8)
932 __sampleRate = sampleRate[adjustment];
933 AppLog("new SampleRate %d %d", __sampleRate, adjustment);
934 SetSampleRateText(__sampleRate);
941 AudioInOut::GetRecordingProperty(int& sampleChannelType, int& sampleBit, int& sampleRate)
943 sampleChannelType = __sampleChannelType;
944 sampleBit = __sampleBitDepth;
945 sampleRate = __sampleRate;
949 AudioInOut::SetPrepare(void)
952 result r = E_SUCCESS;
954 AppLog("AudioOut preparation request value : Bitdepth:ChannelType:SampleRate = %d:%d:%d", __sampleBitDepth, __sampleChannelType, __sampleRate);
957 for (int i = 0; i < CirclularBufferCount; i++)
959 __byteBuffer[i].Clear();
962 if (__pAudioIn->GetState() == AUDIOIN_STATE_PREPARED)
964 //Unprepare for re-prepare
965 r = __pAudioIn->Unprepare();
968 AppLog("[Error] AudioIn Unprepare failed");
972 r = __pAudioIn->Prepare(AUDIO_INPUT_DEVICE_MIC, __sampleBitDepth, __sampleChannelType, __sampleRate);
975 AppLog("[Error] __pAudioIn->Prepare failed..%d ", r);
979 AppLog("[INFO] AudioIn is prepared property (Channel : %d, Sample Rate: %d, Sample Bitdepth: %d)", __sampleChannelType, __sampleRate, __sampleBitDepth);
983 r = __pAudioIn->AddBuffer(&__byteBuffer[__buffCnt]);
986 AppLog("[Error] __pAudioIn->AddBuffer failed..%d ", r);
987 r = __pAudioIn->Unprepare();
990 AppLog("[Error] __pAudioIn->Unprepare failed..%d ", r);
995 else if ((__pAudioIn->GetState() == AUDIOIN_STATE_INITIALIZED) || (__pAudioIn->GetState() == AUDIOIN_STATE_UNPREPARED))
998 r = __pAudioIn->Prepare(AUDIO_INPUT_DEVICE_MIC, __sampleBitDepth, __sampleChannelType, __sampleRate);
1001 AppLog("[Error] __pAudioIn->Prepare failed..%d ", r);
1005 AppLog("[INFO] AudioIn is prepared property (Channel : %d, Sample Rate: %d, Sample Bitdepth: %d)", __sampleChannelType, __sampleRate, __sampleBitDepth);
1009 r = __pAudioIn->AddBuffer(&__byteBuffer[__buffCnt]);
1012 AppLog("[Error] __pAudioIn->AddBuffer failed..%s", GetErrorMessage(r));
1013 r = __pAudioIn->Unprepare();
1016 AppLog("[Error] __pAudioIn->Unprepare failed..%d ", r);
1023 AppLog("[WARNNING] The state of AudioIn instance is not proper");
1028 AudioInOut::OnKeyPressed(const Control& source, Osp::Ui::KeyCode keyCode)
1030 result r = E_SUCCESS;
1031 r = ConsumeInputEvent();
1034 AppLog("Consuming input event failed(%s)", GetErrorMessage(r));
1039 AudioInOut::OnKeyReleased(const Control& source, Osp::Ui::KeyCode keyCode)
1045 AudioInOut::OnKeyLongPressed(const Control& source, Osp::Ui::KeyCode keyCode)
1051 AudioInOut::SetHeaderText(const Osp::Base::String& title)
1053 result r = E_SUCCESS;
1054 Header* pHeader = GetHeader();
1056 TRY_CATCH(pHeader, r = GetLastResult(), "GetHeader failed:%s", GetErrorMessage(GetLastResult()));
1058 pHeader->SetTitleText(title);
1066 AudioInOut::SetFooterStyle(Osp::Ui::Controls::FooterStyle style, bool showBack, Osp::Ui::IActionEventListener* pListener)
1068 result r = E_SUCCESS;
1069 Footer* pFooter = GetFooter();
1071 TRY_CATCH(pFooter, r = GetLastResult(), "GetFooter() failed:%s", GetErrorMessage(GetLastResult()));
1073 pFooter->SetStyle(style);
1077 pFooter->SetBackButton();
1080 if (pListener != null)
1082 pFooter->AddActionEventListener(*pListener);
1091 AudioInOut::AddFooterItem(const Osp::Base::String& text, int actionId)
1093 result r = E_SUCCESS;
1095 Footer* pFooter = GetFooter();
1098 TRY_CATCH(pFooter, r = E_SYSTEM, "GetFooter() failed:%s", GetErrorMessage(GetLastResult()));
1100 item.Construct(actionId);
1103 index = pFooter->GetItemCount();
1105 AppLog("%d is as %s", index, text.GetPointer());
1106 __footerActionId[index] = actionId;
1108 pFooter->AddItem(item);
1115 AudioInOut::RemoveFooterItem(int actionId)
1117 result r = E_SUCCESS;
1119 Footer* pFooter = GetFooter();
1121 TRY_CATCH(pFooter, r = E_SYSTEM, "GetFooter() failed:%s", GetErrorMessage(GetLastResult()));
1123 for (unsigned int i = 0; i < SIZEOF(__footerActionId); i++)
1125 if (__footerActionId[i] == actionId)
1127 pFooter->RemoveItemAt(i);
1137 AudioInOut::EnableFooterItem(int actionId, bool enable)
1139 result r = E_SUCCESS;
1140 Footer* pFooter = GetFooter();
1141 TRY_CATCH(pFooter, r = E_SYSTEM, "GetFooter() failed:%s", GetErrorMessage(GetLastResult()));
1143 for (unsigned int i = 0; i < SIZEOF(__footerActionId); i++)
1145 if (__footerActionId[i] == actionId)
1147 pFooter->SetItemEnabled(i, enable);
1158 AudioInOut::OnFormBackRequested(Osp::Ui::Controls::Form& source)
1165 AudioInOut::SetSampleRateText(int sampleRate)
1168 text.Format(32, L": %d", sampleRate);
1169 text = __sampleRateText + text;
1170 __pLabelSampleRate->SetText(text);
1171 __pLabelSampleRate->Draw();