PlayAudio.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:16k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   PlayAudio.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Audio play source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. //---------------------------------------------------------------------------
  66. #pragma hdrstop
  67. #ifndef _PLAYAUDIO_H_
  68. #include "PlayAudio.h"
  69. #endif
  70. #ifndef  _MAN_ACTIVE_H_
  71. #include "man_active.h"
  72. #endif
  73. //---------------------------------------------------------------------------
  74. #pragma package(smart_init)
  75. static CPLAYAUDIO*  play_audio_ptr;
  76. static bool g_bIsRunning;
  77. extern bool IsStopButtonPressed;
  78. //=============================  static function  ==============================
  79. static void  REQ_TimeOut( void )
  80. {  play_audio_ptr->REQ_TimeOut();
  81. }
  82. //----------------------------------------------------------------------------
  83. static void  REQ_Finish( void )
  84. {   play_audio_ptr->REQ_Finish();
  85. }
  86. //---------------------------------------------------------------------------
  87. static void Req_Audio_Set_Volume( void )
  88. {   play_audio_ptr->Req_Audio_Set_Volume();
  89. }
  90. //---------------------------------------------------------------------------
  91. static void Req_Audio_Play_IMY_ByBuf( void )
  92. {   play_audio_ptr->Req_Audio_Play_IMY_ByBuf();
  93. }
  94. //---------------------------------------------------------------------------
  95. static void Req_Audio_Stop( void )
  96. {   play_audio_ptr->Req_Audio_Stop();
  97. }
  98. //---------------------------------------------------------------------------
  99. static void Req_Audio_Play_ByName( void )
  100. {   play_audio_ptr->Req_Audio_Play_ByName();
  101. }
  102. //---------------------------------------------------------------------------
  103. static void Req_Audio_Query_ID( void )
  104. {   play_audio_ptr->Req_Audio_Query_ID();
  105. }
  106. //---------------------------------------------------------------------------
  107. static void Req_Audio_Play( void )
  108. {   play_audio_ptr->Req_Audio_Play();
  109. }
  110. //----------------------------------------------------------------------------
  111. static void __stdcall CNF_AudioSetVolume(const AUDIO_RESULT status, const short token, void *usrData)
  112. {   play_audio_ptr->CNF_AudioSetVolume(status, token, usrData);
  113. }
  114. //----------------------------------------------------------------------------
  115. static void __stdcall CNF_AudioStop(const AUDIO_RESULT status, const short token, void *usrData)
  116. {   play_audio_ptr->CNF_AudioStop(status, token, usrData);
  117. }
  118. //----------------------------------------------------------------------------
  119. static void __stdcall IND_AudioPlayOver(const AUDIO_RESULT status, const short token, void *usrData)
  120. {   play_audio_ptr->IND_AudioPlayOver(status, token, usrData);
  121. }
  122. //--------------------------------------- play iMelody by buf ----------------
  123. static void __stdcall CNF_AudioPlayIMYBybuf(const AUDIO_RESULT status, const short token, void *usrData)
  124. {   play_audio_ptr->CNF_AudioPlayIMYBybuf(status, token, usrData);
  125. }
  126. //--------------------------------------- play by name -----------------------
  127. static void __stdcall CNF_AudioPlayByName(const AUDIO_RESULT status, const short token, void *usrData)
  128. { play_audio_ptr->CNF_AudioPlayByName(status, token, usrData);
  129. }
  130. //--------------------------------------- play ID ----------------------------
  131. static void __stdcall CNF_AudioQueryID(const Audio_Query_ID_Cnf *cnf, const short token, void *usrData)
  132. { play_audio_ptr->CNF_AudioQueryID(cnf, token, usrData);
  133. }
  134. //----------------------------------------------------------------------------
  135. static void __stdcall CNF_AudioPlay(const AUDIO_RESULT status, const short token, void *usrData)
  136. { play_audio_ptr->CNF_AudioPlay(status, token, usrData);
  137. }
  138. //===========================================================================
  139. CPLAYAUDIO::CPLAYAUDIO( void )
  140. {
  141.    g_bIsRunning = false;
  142.    play_audio_ptr = this;
  143.    ConfirmCallback = 0;
  144. }
  145. //---------------------------------------------------------------------------
  146. CPLAYAUDIO::~CPLAYAUDIO( )
  147. {
  148.    g_bIsRunning = false;
  149.    //ConfirmCallback = 0;
  150. }
  151. //---------------------------------------------------------------------------
  152.  void  CPLAYAUDIO::Confirm( int confirm_state )
  153. {
  154.    if(!g_bIsRunning)  return;
  155.    if(ConfirmCallback==0)  return;
  156.    m_iConfirmState = confirm_state;
  157.    g_bIsRunning = false;
  158.    ActiveMan->SetActiveFunction( ConfirmCallback );
  159. }
  160. //---------------------------------------------------------------------------
  161. void  CPLAYAUDIO::REQ_Finish( void )
  162. {
  163.    if(!g_bIsRunning)  return;
  164.    Confirm( STATE_AUDIO_OK );
  165. }
  166. //---------------------------------------------------------------------------
  167. void  CPLAYAUDIO::REQ_Stop( void )
  168. {
  169.    if(!g_bIsRunning)  return;
  170.    META_Cancel_r( m_META_HANDLE_Obj.Get_MainHandle(),  m_sSPID_PLAYAUDIO );
  171.    Confirm( STATE_AUDIO_STOP );
  172. }
  173. //---------------------------------------------------------------------------
  174. void  CPLAYAUDIO::REQ_TimeOut( void )
  175. {
  176.    if(!g_bIsRunning)  return;
  177.    META_Cancel_r( m_META_HANDLE_Obj.Get_MainHandle(),  m_sSPID_PLAYAUDIO );
  178.    Confirm( STATE_AUDIO_TIMEOUT );
  179. }
  180. //==============================================================================================
  181. void  CPLAYAUDIO::Req_Audio_Play_IMY_ByBuf_Start(char *iMelodyBuf, unsigned int buf_len, unsigned char imy_instrument, int play_style)
  182. {
  183.     play_audio_ptr = this;
  184.     g_bIsRunning = true;
  185.     m_sAudioPlayImyByBufReq.imy_buf = iMelodyBuf;
  186.     m_sAudioPlayImyByBufReq.imy_buf_len = buf_len;
  187.     m_sAudioPlayImyByBufReq.imy_instrument = imy_instrument;
  188.     m_sAudioPlayImyByBufReq.play_style = (AUDIO_PLAY_STYLE) play_style;
  189.     ActiveMan->SetActiveFunction( ::Req_Audio_Play_IMY_ByBuf );
  190. }
  191. //--------------------------------------------------------------------------
  192. void  CPLAYAUDIO::Req_Audio_Play_IMY_ByBuf( void )
  193. {
  194.     if( ! g_bIsRunning )  return;
  195.     META_RESULT MetaResult = META_Audio_Play_IMY_ByBuf_r( m_META_HANDLE_Obj.Get_MainHandle(), &m_sAudioPlayImyByBufReq, ::CNF_AudioPlayIMYBybuf, ::IND_AudioPlayOver, &m_sSPID_PLAYAUDIO, NULL);
  196.     if(MetaResult!=META_SUCCESS)
  197.     {  Confirm( STATE_AUDIO_FAIL );  return;  }
  198. }
  199. //--------------------------------------------------------------------------
  200. void __stdcall CPLAYAUDIO::CNF_AudioPlayIMYBybuf(const AUDIO_RESULT status, const short token, void *usrData)
  201. {
  202.    if(status != AUD_RES_OK)
  203.    {  Confirm( STATE_AUDIO_FAIL );  return;  }
  204. }
  205. //--------------------------------------------------------------------------------------
  206. void __stdcall CPLAYAUDIO::IND_AudioPlayOver(const AUDIO_RESULT status, const short token, void *usrData)
  207. {
  208.     if(status == AUD_RES_END_OF_FILE)
  209.     {  Confirm( STATE_AUDIO_OVER );  return;  }
  210.     else
  211.     {
  212.         if(IsStopButtonPressed == false)
  213.         {
  214.            Confirm( STATE_AUDIO_FAIL );  return;
  215.         }
  216.     }
  217. }
  218. //===========================================================================
  219. void  CPLAYAUDIO::Req_Audio_Stop_Start( void )
  220. {
  221.     play_audio_ptr = this;
  222.     g_bIsRunning = true;
  223.     ActiveMan->SetActiveFunction( ::Req_Audio_Stop );
  224. }
  225. //---------------------------------------------------------------------------
  226. void  CPLAYAUDIO::Req_Audio_Stop( void )
  227. {
  228.     if( ! g_bIsRunning )  return;
  229.     META_RESULT MetaResult = META_Audio_Stop_r( m_META_HANDLE_Obj.Get_MainHandle(), ::CNF_AudioStop, &m_sSPID_STOPAUDIO, NULL);
  230.     if(MetaResult!=META_SUCCESS)
  231.     {  Confirm( STATE_AUDIO_FAIL );  return;  }
  232. }
  233. //---------------------------------------------------------------------------
  234. void __stdcall CPLAYAUDIO::CNF_AudioStop(const AUDIO_RESULT status, const short token, void *usrData)
  235. {
  236.    if(status != AUD_RES_OK)
  237.    {  Confirm( STATE_AUDIO_FAIL );  return;  }
  238.    else
  239.    {  Confirm( STATE_AUDIO_OK );  return;  }
  240. }
  241. //==============================================================================
  242. void  CPLAYAUDIO::Req_Audio_Play_ByName_Start(char *FAT_fileinfo, int play_style)
  243. {
  244.     play_audio_ptr = this;
  245.     g_bIsRunning = true;
  246.     m_sAudioPlayByNameReq.fat_filepath = FAT_fileinfo;
  247.     m_sAudioPlayByNameReq.play_style = (AUDIO_PLAY_STYLE)play_style;
  248.     ActiveMan->SetActiveFunction( ::Req_Audio_Play_ByName );
  249. }
  250. //--------------------------------------------------------------------------
  251. void  CPLAYAUDIO::Req_Audio_Play_ByName( void )
  252. {
  253.     if( ! g_bIsRunning )  return;
  254.     META_RESULT MetaResult = META_Audio_Play_ByName_r( m_META_HANDLE_Obj.Get_MainHandle(), &m_sAudioPlayByNameReq, ::CNF_AudioPlayByName, ::IND_AudioPlayOver, &m_sSPID_PLAYAUDIO, NULL);
  255.     if(MetaResult!=META_SUCCESS)
  256.     {  Confirm( STATE_AUDIO_FAIL );  return;  }
  257. }
  258. //--------------------------------------------------------------------------
  259. void __stdcall CPLAYAUDIO::CNF_AudioPlayByName(const AUDIO_RESULT status, const short token, void *usrData)
  260. {
  261.    if(status != STATUS_ADUIO_OK)
  262.    {  Confirm( STATE_AUDIO_FAIL );  return;  }
  263. }
  264. //=============================================================================
  265. void  CPLAYAUDIO::Req_Audio_Set_Volume_Start(int volume)
  266. {
  267.     play_audio_ptr = this;
  268.     g_bIsRunning = true;
  269.     m_sAudioSetVolReq.volume = volume;
  270.     ActiveMan->SetActiveFunction( ::Req_Audio_Set_Volume );
  271. }
  272. //--------------------------------------------------------------------------
  273. void  CPLAYAUDIO::Req_Audio_Set_Volume( void )
  274. {
  275.     if( ! g_bIsRunning )  return;
  276.     META_RESULT MetaResult = META_Audio_Set_Volume_r( m_META_HANDLE_Obj.Get_MainHandle(), &m_sAudioSetVolReq, ::CNF_AudioSetVolume, &m_sSPID_SETVOLUME, NULL);
  277.     if(MetaResult!=META_SUCCESS)
  278.     {  Confirm( STATE_AUDIO_FAIL );  return;  }
  279.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  280. }
  281. //--------------------------------------------------------------------------
  282. void __stdcall CPLAYAUDIO::CNF_AudioSetVolume(const AUDIO_RESULT status, const short token, void *usrData)
  283. {
  284.    if(status != AUD_RES_OK)
  285.    {  Confirm( STATE_AUDIO_FAIL );  return;  }
  286. }
  287. //=============================================================================
  288. //////////////////////////// Play song using ID ///////////////////////////////
  289. //=============================================================================
  290. void  CPLAYAUDIO::Req_Audio_Query_ID_Start(void)
  291. {
  292.     play_audio_ptr = this;
  293.     g_bIsRunning = true;
  294.     ActiveMan->SetActiveFunction( ::Req_Audio_Query_ID );
  295. }
  296. //--------------------------------------------------------------------------
  297. void  CPLAYAUDIO::Req_Audio_Query_ID(void)
  298. {
  299.     if( ! g_bIsRunning )  return;
  300.     META_RESULT MetaResult = META_Audio_Query_ID_r( m_META_HANDLE_Obj.Get_MainHandle(), ::CNF_AudioQueryID, &m_sSPID_QUERY, NULL);
  301.     if(MetaResult!=META_SUCCESS)
  302.     {  Confirm( STATE_AUDIO_FAIL );  return;  }
  303. }
  304. //-------------------------------------- play by ID -------------------------
  305. void __stdcall CPLAYAUDIO::CNF_AudioQueryID(const Audio_Query_ID_Cnf *cnf, const short token, void *usrData)
  306. {
  307.     if( ! g_bIsRunning )  return;
  308.     if( STATUS_ADUIO_OK == cnf->status )
  309.     {
  310.         m_AudioQueryIDCnf.MinRingTone_ID = cnf->MinRingTone_ID;
  311.         m_AudioQueryIDCnf.MaxRingTone_ID = cnf->MaxRingTone_ID;
  312.         m_AudioQueryIDCnf.MinMIDI_ID = cnf->MinMIDI_ID;
  313.         m_AudioQueryIDCnf.MaxMIDI_ID = cnf->MaxMIDI_ID;
  314.         m_AudioQueryIDCnf.MinSound_ID = cnf->MinSound_ID;
  315.         m_AudioQueryIDCnf.MaxSound_ID = cnf->MaxSound_ID;
  316.         Confirm( STATE_AUDIO_OK );
  317.         return;
  318.    }
  319.    else
  320.    {  Confirm( STATE_AUDIO_FAIL );  return;  }
  321. }
  322. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  323. void  CPLAYAUDIO::Req_Audio_Play_Start(int audio_id, int play_style)
  324. {
  325.     play_audio_ptr = this;
  326.     g_bIsRunning = true;
  327.     m_sAudioPlayReq.audio_id = audio_id;
  328.     m_sAudioPlayReq.play_style = (AUDIO_PLAY_STYLE)play_style;
  329.     ActiveMan->SetActiveFunction( ::Req_Audio_Play );
  330. }
  331. //---------------------------------------------------------------------------
  332. void  CPLAYAUDIO::Req_Audio_Play( void )
  333. {
  334.     if( ! g_bIsRunning )  return;
  335.     META_RESULT MetaResult = META_Audio_Play_r(m_META_HANDLE_Obj.Get_MainHandle(), &m_sAudioPlayReq, ::CNF_AudioPlay, ::IND_AudioPlayOver, &m_sSPID_PLAYAUDIO, NULL);
  336.     if(MetaResult!=META_SUCCESS)
  337.     {  Confirm( STATE_AUDIO_FAIL );  return;  }
  338. }
  339. //---------------------------------------------------------------------------
  340. void __stdcall CPLAYAUDIO::CNF_AudioPlay(const AUDIO_RESULT status, const short token, void *usrData)
  341. {
  342.    if(status != STATUS_ADUIO_OK)
  343.    {  Confirm( STATE_AUDIO_FAIL );  return;  }
  344. }
  345. //===========================================================================
  346. ////////////////////////////  Global information  ///////////////////////////
  347. //===========================================================================
  348. int  CPLAYAUDIO::Get_ConfirmState( void )
  349. {
  350.     return  m_iConfirmState;
  351. }
  352. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  353. Audio_Query_ID_Cnf CPLAYAUDIO::Get_AudioQueryIDCnf( void )
  354. {   return  m_AudioQueryIDCnf;
  355. }