MTK 音乐播放相关

来源:互联网 发布:淘宝便宜的书店 编辑:程序博客网 时间:2024/05/22 03:44

result = mdi_audio_play_file_with_vol_path(
  "D:\\audio\\a.mp3",
  DEVICE_AUDIO_PLAY_ONCE,
  NULL,
  EndPlayProc,
  10,
  MDI_AUD_PTH_EX(MDI_DEVICE_SPEAKER2));
应该是 L"D:\\audio\\a.mp3"


void play_mp3_file(void){  

mdi_result result;  

mdi_audio_set_volume(VOL_TYPE_MEDIA, MDI_AUD_VOL_EX(10));  

result= mdi_audio_play_file_with_vol_path("D:\\audio\\a.mp3", DEVICE_AUDIO_PLAY_ONCE, NULL, EndPlayProc,10, MDI_AUD_PTH_EX(MDI_DEVICE_SPEAKER2));  

if (MDI_AUDIO_SUCCESS == result)  

{  

StartTimer(AUDPLY_SINGLE_PLAY_TIMER,500, OnTimer);  

}  

else  

{  

DisplayPopup((U8*)L"mdi faild!", IMG_GLOBAL_OK,1,5000,13);  

}

}




MMI_BOOL    need_play = MMI_FALSE;
U8          audio_type;
U32         audio_len;
U8 *        audio_data;
mdi_result  result;

audio_data = get_audio((U16) (g_tonesel_cntx.highlight_audioid), &audio_type, &audio_len);
if (audio_data != NULL)
{
    result = mdi_audio_play_string_with_vol_path(
                (void*)audio_data,
                audio_len,
                audio_type,
                DEVICE_AUDIO_PLAY_INFINITE,
                NULL,
                cui_tone_selector_play_tone_callback,
                g_tonesel_cntx.volume,
                MDI_DEVICE_SPEAKER2);
    if (result == MDI_AUDIO_SUCCESS)
    {
        g_tonesel_cntx.is_playing = MMI_TRUE;
    }
}

mdi_result mdi_audio_stop_string(void)

void Play_sound(U16 gobang_aud_id)
{
    U8  audio_type;
    U32 audio_len;
    U8 *audio_data = NULL;
    audio_data = get_audio((U16)gobang_aud_id, &audio_type, &audio_len);
    mdi_audio_play_string_with_vol_path(
 (void*)audio_data
 ,audio_len
 ,audio_type
 ,DEVICE_AUDIO_PLAY_ONCE
 ,NULL
 ,NULL
 ,volume_level_UI
 ,MDI_DEVICE_SPEAKER_BOTH);
}

U16 GetParentHandler(void)
{

    return currParentID;
}

void SetParentHandler(U16 parentID)
{
    currParentID = parentID;
}
void mmi_entry_main_multimedia_screen(void)
{
 guiBuffer = mmi_frm_scrn_get_active_gui_buf();
 nItems = GetNumOfChild_Ext(MAIN_MENU_MULTIMEDIA_MENUID);
 GetSequenceStringIds_Ext(MAIN_MENU_MULTIMEDIA_MENUID, ItemList);
 GetSequenceImageIds_Ext(MAIN_MENU_MULTIMEDIA_MENUID, ItemIcons);
 SetParentHandler(MAIN_MENU_MULTIMEDIA_MENUID);
 RegisterHighlightHandler(ExecuteCurrHiliteHandler);
}

void mmi_main_menu_entry(void)
{
 history_buffer = mmi_frm_scrn_get_active_gui_buf();
 n_items = GetNumOfChild_Ext(IDLE_SCREEN_MENU_ID);
 GetSequenceStringIds_Ext(IDLE_SCREEN_MENU_ID, mm_stringIDs);
 GetSequenceImageIds_Ext(IDLE_SCREEN_MENU_ID, mm_iconIDs);
 SetParentHandler(IDLE_SCREEN_MENU_ID);
}


#if 1// jt
#include "MMI_features.h"
#include "mmi_rp_all_defs.h"
#include "mdi_audio.h"
#include "TimerEvents.h"
#include "device.h"
#include "MMIDataType.h"

extern S32 volume_level_UI;
extern U8 *get_audio(MMI_ID_TYPE i, U8 *type, U32 *filelen);

typedef struct
{
    U16 menuitem_id;
    U16 en_aud_id;
}sound_menuitem;

U16 g_menuitem_aud_id = 0;

sound_menuitem g_menuitem_sound[] = {
{MAIN_MENU_MESSAGES_MENUID,         MENUITEM_AUD_ID_MESSAGING},
{MAIN_MENU_PHONEBOOK_MENUID,        MENUITEM_AUD_ID_PHONEBOOK},
{MAIN_MENU_CALL_CENTER,             MENUITEM_AUD_ID_CALLCENTER},
{MAIN_MENU_ORGANIZER_MENUID,        MENUITEM_AUD_ID_ORGANIZER},
{MAIN_MENU_MULTIMEDIA_MENUID,       MENUITEM_AUD_ID_MULTIMEDIA},
{MAIN_MENU_AUDIO_PLAYER,            MENUITEM_AUD_ID_AUDPLY},   
{MAIN_MENU_FILE_MNGR_MENUID,        MENUITEM_AUD_ID_FILEMANAGER},
{MAIN_MENU_PROFILES_MENUID,         MENUITEM_AUD_ID_USERPROFILES},
{MAIN_MENU_FUNANDGAMES_MENUID,      MENUITEM_AUD_ID_FUNANDGAME},   
{MAIN_MENU_SETTINGS_MENUID,         MENUITEM_AUD_ID_SETTING},
{MAIN_MENU_BT_CONNECTIVITY,         MENUITEM_AUD_ID_CONN},
{MAIN_MENU_SERVICES_MENUID,         MENUITEM_AUD_ID_SERVICES},     
};

U16 g_dialer_sound[] = {
MENUITEM_AUD_ID_DIAL_0, 
MENUITEM_AUD_ID_DIAL_1,
MENUITEM_AUD_ID_DIAL_2,
MENUITEM_AUD_ID_DIAL_3,
MENUITEM_AUD_ID_DIAL_4,
MENUITEM_AUD_ID_DIAL_5,
MENUITEM_AUD_ID_DIAL_6,
MENUITEM_AUD_ID_DIAL_7,
MENUITEM_AUD_ID_DIAL_8,
MENUITEM_AUD_ID_DIAL_9,
MENUITEM_AUD_ID_DIAL_STAR,
MENUITEM_AUD_ID_DIAL_HASH,
};

void mmi_menuitem_play_sound_with_aud_id(void)
{
    U8  audio_type;
    U32 audio_len;
    PU8 audio_data = NULL;

    audio_data = get_audio((U16)g_menuitem_aud_id, &audio_type, &audio_len);
    if (audio_data != NULL)
    {
        mdi_audio_play_string_with_vol_path(
         (void*)audio_data
         ,audio_len
         ,audio_type
         ,DEVICE_AUDIO_PLAY_ONCE
         ,NULL
         ,NULL
         ,volume_level_UI
         ,MDI_DEVICE_SPEAKER_BOTH);
    }
}

U16 mmi_menuitem_get_audio_id(U16 item_id)
{
    S32 i, size = sizeof(g_menuitem_sound)/sizeof(sound_menuitem);
    U16 return_value = 0;

    for (i = 0; i < size; i++)
    {
        if (item_id == g_menuitem_sound[i].menuitem_id)
        {
            return_value = g_menuitem_sound[i].en_aud_id;
            break;
        }
    }
    return return_value;
}

void mmi_menuitem_play_sound(S32 item_index)
{
    MMI_MENU_ID mmi_menuitem_list[30];
    U16 parent_id, aud_id;

    parent_id = GetParentHandler();
   
    GetSequenceItemIds_Ext(parent_id, mmi_menuitem_list);

    aud_id = mmi_menuitem_get_audio_id(mmi_menuitem_list[item_index]);

    g_menuitem_aud_id = aud_id;
   
    StopTimer(MENUITEM_PLAY_AUD_TIMER);
    mdi_audio_stop_string();
   
    if (g_menuitem_aud_id != 0)
    {
        StartTimer(MENUITEM_PLAY_AUD_TIMER, 200, mmi_menuitem_play_sound_with_aud_id);
    }
}

void mmi_dialer_play_sound(S32 key_code)
{
    if (0 <= key_code && key_code <= 9)
    {
        g_menuitem_aud_id = key_code + MENUITEM_AUD_ID_DIAL_0;
    }
    else if (key_code == 20 || key_code == 21)
    {
        g_menuitem_aud_id = key_code + MENUITEM_AUD_ID_DIAL_0 - 10;
    }
    else
    {
        g_menuitem_aud_id = 0;
    }

    StopTimer(MENUITEM_PLAY_AUD_TIMER);
    mdi_audio_stop_string();
   
    if (g_menuitem_aud_id != 0)
    {
        StartTimer(MENUITEM_PLAY_AUD_TIMER, 200, mmi_menuitem_play_sound_with_aud_id);
    }
}
#endif

MoDIS.exe!wgui_inputs_dialer_handle_key_down(int k=1)
MoDIS.exe!MMI_key_input_handler(int key_code=1, int key_event=0) 
MoDIS.exe!MMI_key_1_down()
MoDIS.exe!exec_key_handler
MoDIS.exe!mmi_frm_exec_key_handler
MoDIS.exe!ExecuteCurrKeyHandler
MoDIS.exe!cui_dialer_input_first_char
MoDIS.exe!cui_dialer_classic_on_enter
MoDIS.exe!cui_dialer_classic_enter(_mmi_scrn_essential_struct * param=0x0627fc18) 
MoDIS.exe!mmi_frm_scrn_first_enter_ex
MoDIS.exe!mmi_frm_scrn_first_enter
MoDIS.exe!cui_dialer_classic_on_run(cui_dialer_obj_st * obj=0x035cfa44)
MoDIS.exe!cui_dialer_run(unsigned short this_gid=9)
MoDIS.exe!mmi_dialer_launch_by_key_ex
MoDIS.exe!mmi_dialer_launch_by_key(unsigned short key_code=1) 
MoDIS.exe!mmi_idle_entry_dialer_by_key()

(1)
in dialer screen
down event
wgui_inputs_dialer_multitap_handle_star_key_down *
{
wgui_dialer_box_star_key_handler.current_position == 0
*
}

wgui_inputs_dialer_handle_hash_key_down   #


wgui_inputs_dialer_handle_key_down    (0-9)

(2)
from idle screen to dialer screen
down event
mmi_idle_entry_dialer_by_key

但最终数字会调用
wgui_inputs_dialer_handle_key_down
{
#if 1// jt
    mmi_dialer_play_sound(k);
#endif
}

星号调用
wgui_inputs_dialer_multitap_handle_star_key_down
{
#if 1// jt
    if (wgui_dialer_box_star_key_handler.current_position == 0)
    {
        mmi_dialer_play_sound(20);
    }
#endif
}

井号调用
wgui_inputs_dialer_handle_hash_key_down
{
#if 1// jt
    mmi_dialer_play_sound(21);
#endif
}





MTK播放声音的函数:
(1).mdi_audio_snd_play_file_with_vol_path();这个函数是播放声音文件的函数,第一个参数是文件的路径,注意如果是U8类型,只能播放英文文件名的函数,一般应将文件名设置为U16型的.
(2).mdi_audio_snd_play_string_with_vol_path();这个函数是播放资源类型的声音文件.

void play_aud_test()
{
U32 audio_len;
U8 *audio_data;
U8 audio_type;
U16 repeat = 1; /* Play once */
mdi_result result;
audio_data = get_audio((U16) (AUD_ID, &audio_type, &audio_len);
if (audio_data != NULL)
{
     result = mdi_audio_snd_play_string_with_vol_path(
                 (void*)audio_data,
                 audio_len,
                 repeat,
                 NULL,
                 callback,
                 volume,
                 speaker);
}
}

在这个函数里面,先要从资源中根据资源id获取到生硬数据,同时,可以得到声音类型和声音的长度.然后再用该函数播放之.

(3).如果要录音的话,首先要发出请求,mmi_sndrec_send_record_req();然后把录制的数据保存到自己的文件中,这个具体的录制过程不得而知,mtk对其做了封装,只需要发送这个消息给底层就可以了.所录制的声音都保存在SoundRecorder.fullname这个文件里面.

原创粉丝点击