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

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.  *   form_melody.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Melody form 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. #include <vcl.h>
  67. #pragma hdrstop
  68. #include "form_Melody.h"
  69. //---------------------------------------------------------------------------
  70. #pragma package(smart_init)
  71. #pragma resource "*.dfm"
  72. TfrmMelody *frmMelody;
  73. static int Default_Repeats = 1;
  74. static int Default_SpeakerVolume = 128;
  75. void  TfrmMelody::ShowHintLabel( TControl *sender, char* hint )
  76. {
  77.    TPoint pt0 = this->ClientOrigin;
  78.    TPoint pt1 = sender->ClientOrigin;
  79.    lblHint->Left = (pt1.x-pt0.x);
  80.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  81.    lblHint->Caption = hint;
  82.    lblHint->Visible = true;
  83.    HintTimer->Enabled = true;
  84. }
  85. // end of added
  86. //---------------------------------------------------------------------------
  87. __fastcall TfrmMelody::TfrmMelody(TComponent* Owner)
  88.         : TForm(Owner)
  89. {
  90.     btnPlayMelody->Enabled = true;
  91.    btnStopPlayMelody->Enabled = false;
  92. }
  93. //---------------------------------------------------------------------------
  94. void __fastcall TfrmMelody::btnPlayMelodyClick(TObject *Sender)
  95. {
  96.     // added by Andy Ueng
  97.     unsigned char repeats;
  98.     unsigned char SpeakerVolume;
  99.     unsigned char  MelodyBuf[MAXMIDIFILESIZE];
  100.     unsigned int   MelodyBufLen;
  101.     if ( ListBoxMelody->ItemIndex < 0 )
  102.     {
  103.         ShowMessage(" You must selecte a midi to play");
  104.         return;
  105.     }
  106.     sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  playing Melody";
  107.     sb_L1sp->Panels->Items[1]->Text = (AnsiString) "";
  108.     // ifstream is(ListBoxMelody->Items->Strings[ListBoxMelody->ItemIndex].c_str(), ios::binary);
  109.     // is.read(MelodyBuf, sizeof(unsigned char)*MAXMIDIFILESIZE);
  110.     // read midi file
  111.     FILE *fp;
  112.     unsigned char  c;
  113.     int i=0;
  114.     unsigned int buf_len;
  115.     fp = fopen(ListBoxMelody->Items->Strings[ListBoxMelody->ItemIndex].c_str(), "rb");
  116.     //fp = fopen("D:\Meta\Midi\Midi song\test2.mid", "rb");
  117.     if(fp == NULL)
  118.         return;
  119.     while(!feof(fp))
  120.     {
  121.         c =getc(fp);
  122.         if(i<sizeof(unsigned char)*MAXMIDIFILESIZE)
  123.         {
  124.             MelodyBuf[i]= c;
  125.             i++;
  126.         }
  127.     }
  128.     fclose(fp);
  129.     MelodyBuf[i]='';
  130.     buf_len = i;
  131.     if( !IsValidRepeats( edtRepeats->Text, repeats ) )      {  edtRepeatsCheck(edtRepeats);      return;   }
  132.     melody_play_req->repeats = edtRepeats->Text.ToInt();
  133.     repeats = melody_play_req->repeats;
  134.     if( !IsValidSpeakerVolume( edtSpeakerVolume->Text, SpeakerVolume ) )      {  edtSpeakerVolumeCheck(edtSpeakerVolume);      return;   }
  135.     melody_play_req->Speaker_volume = edtSpeakerVolume->Text.ToInt();
  136.     melody_play_req->buf = MelodyBuf;
  137.     melody_play_req->buf_len = buf_len;
  138.     if ( Sender != NULL )
  139.     {
  140.         dynamic_cast <TControl *>(Sender)->Enabled = false;
  141.     }
  142.     // modified by Andy Ueng
  143.     // META_RESULT mr1 = META_Melody_Play( midi_play_req,
  144.     //                                     &midi_play_cnf,
  145.     //                                     midi_play_cnf_cb,
  146.     //                                     &MIDI_PLAY_cnf_token,
  147.     //                                     midi_play_over_ind_cb,
  148.     //                                     &MIDI_PLAY_ind_token );
  149.     META_RESULT mr1 = META_Melody_Play( melody_play_req,
  150.                                          melody_play_cnf_cb,
  151.                                          melody_play_over_ind_cb,
  152.                                          &MELODY_PLAY_token,
  153.                                          NULL );
  154.     // end of modified
  155.     if ( mr1 != META_SUCCESS )
  156.     {
  157.         META_result_handler( mr1 );
  158.         if ( Sender != NULL )
  159.         {
  160.             dynamic_cast <TControl *>(Sender)->Enabled = true;
  161.         }
  162.         return;
  163.     }
  164.     btnPlayMelody->Enabled = false;
  165.     btnStopPlayMelody->Enabled = true;
  166.     // end of added
  167. }
  168. //---------------------------------------------------------------------------
  169. void __fastcall TfrmMelody::btnStopPlayMelodyClick(TObject *Sender)
  170. {
  171.   // added by Andy Ueng
  172.    btnStopPlayMelody->Enabled = false;
  173.     btnPlayMelody->Enabled = true;
  174.    sb_L1sp->Panels->Items[0]->Text = (AnsiString) "  Stop play Melody";
  175.     sb_L1sp->Panels->Items[1]->Text = (AnsiString) "";
  176.     // modified by Andy Ueng
  177.    // META_RESULT  mr1 = META_Melody_Stop();
  178.    META_Cancel_r (MELODY_PLAY_token);
  179.    
  180.    mr1 = META_Melody_Stop(melody_stop_cnf_cb, &MELODY_STOP_token, NULL);
  181.     if ( mr1 != META_SUCCESS )
  182.     {
  183.        META_result_handler( mr1 );
  184.        return;
  185.     }
  186.   // end of added        
  187. }
  188. //---------------------------------------------------------------------------
  189. void __fastcall TfrmMelody::edtRepeatsCheck(TObject *Sender)
  190. {
  191.    int  i;
  192.    int  data;
  193.    AnsiString  text;
  194.    TEdit *edit = (TEdit*)Sender;
  195.    char  hint[256] =
  196.    {   " value shall be 1~255 "
  197.    };
  198.    text = edit->Text;
  199.    if( !IsValidRepeats( text, data ) )
  200.    {
  201.       edit->Text = Default_Repeats;
  202.       ShowHintLabel( edit, hint );
  203.       edit->SetFocus();
  204.       return;
  205.    }
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TfrmMelody::edtSpeakerVolumeCheck(TObject *Sender)
  209. {
  210.   // added by Andy Ueng
  211.    int  i;
  212.    int  data;
  213.    AnsiString  text;
  214.    TEdit *edit = (TEdit*)Sender;
  215.    char  hint[256] =
  216.    {   " value shall be 0~255 "
  217.    };
  218.    text = edit->Text;
  219.    if( !IsValidSpeakerVolume( text, data ) )
  220.    {
  221.       edit->Text = Default_SpeakerVolume;
  222.       ShowHintLabel( edit, hint );
  223.       edit->SetFocus();
  224.       return;
  225.    }
  226.   // end of added      
  227. }
  228. //---------------------------------------------------------------------------
  229. void __fastcall TfrmMelody::btnAddToListClick(TObject *Sender)
  230. {
  231.  bool ok;
  232.    
  233.    ok = OpenDialog->Execute();
  234.    if( !ok )
  235.       return;
  236.    else
  237.      {
  238.       ListBoxMelody->Items->Add(OpenDialog->FileName.c_str());
  239.      }       
  240. }
  241. //---------------------------------------------------------------------------
  242. void __fastcall TfrmMelody::btnRemoveFromListClick(TObject *Sender)
  243. {
  244.   if(ListBoxMelody->ItemIndex < 0)
  245.      return;
  246.   else
  247.     {
  248.      ListBoxMelody->Items->Delete(ListBoxMelody->ItemIndex);
  249.     }
  250. }
  251. //---------------------------------------------------------------------------