亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pmp_audio_driver.c

?? 嵌入式系統(tǒng)下的文件管理處理,和基本圖片jpg格式處理原代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*-------------------------------------------------*
* $RCSfile: pmp_audio_driver.c,v $
* $Date: 2007/01/29 16:27:10 $
* $Author: lanzhu $
* $Log: pmp_audio_driver.c,v $
* Revision 1.3  2007/01/29 16:27:10  lanzhu
* 1. 添加了SPMP_SPEAKER_ENABLE_EX DISABLE_EX 函數(shù), 放置按鍵音和
* AP 發(fā)生沖突
* 2. 解決開機第一聲的 POP 音問題.
* 3. 去掉音頻播放時對CODEC 的設(shè)置
*
* Revision 1.2  2007/01/27 10:00:16  lanzhu
* 修改 SPMP_SPEAKER_ENABLE/DISABLE 函數(shù), 添加了發(fā)聲標(biāo)志
*
* Revision 1.1.1.1  2007/01/17 12:28:43  lanzhu
* 齊蘭柱 準(zhǔn)備一個新的代碼分支
*
* Revision 1.9  2007/01/06 09:28:56  lanzhu
* 添加設(shè)定系統(tǒng)默認音量值的函數(shù)
*
* Revision 1.8  2007/01/06 05:26:52  cuining
* SPMP_AUDIO_GetInfo完成后,釋放FW中申請的內(nèi)存。
*
* Revision 1.7  2007/01/05 09:32:04  lanzhu
* no message
*
* Revision 1.6  2007/01/02 00:52:33  lanzhu
* no message
*
* Revision 1.5  2006/12/28 01:28:53  lanzhu
* 修改CODEC 的控制方式, 修改SPEAKER的控制方式
*
* Revision 1.4  2006/12/27 01:05:33  lanzhu
* 暫時屏蔽 高低速度的切換函數(shù)
*
* Revision 1.3  2006/12/18 02:14:27  taiyun
* Modify include filename
*
* Revision 1.2  2006/12/12 00:32:43  lanzhu
* 去除 WARNING, 放開了一個TABLE 設(shè)置
*
* Revision 1.1.1.1  2006/12/05 03:01:16  lanzhu
* no message
*
* Revision 1.1.1.1  2006/12/01 09:49:35  lanzhu
* no message
*
* Revision 1.6  2006/11/16 09:15:01  cuining
* 在mp3播放停止時,關(guān)閉audio模塊,降低功耗
*
* Revision 1.5  2006/11/06 00:03:00  lanzhu
* 添加了 基于數(shù)據(jù)的MIDI 播放函數(shù)
*
* Revision 1.4  2006/10/28 09:20:23  lanzhu
* 逐個對底層函數(shù)進行檢查, 返回 SendSignal SendSignal_T 的結(jié)果
*
* Revision 1.3  2006/10/22 15:45:04  lanzhu
* 添加了音效控制函數(shù)
*
* Revision 1.2  2006/10/16 02:10:07  cuining
* 加入揚聲器是否發(fā)音控制
*
* Revision 1.1  2006/09/02 06:56:11  lanzhu
* 首次提交 AUDIO DRIVER API
*
*
*--------------------------------------------------*/

//#define		AUDIO_DEBUG_1227
//#define	AUDIO_DEBUG_1226


#include "SPMP_define.h"

#include "audio_api.h"
#include "mcatch_cmd.h"
#include <string.h>
#include "os_api.h"
#include "SysUtility.h"
#include "mcatch_basestruct.h"

#include "appdriver.h"

#include "pmp_io.h"		// [01/27/2007] lanzhu add


/**************************************************************************
 *                   G E N E R A L    C O N S T A N T S                   *
 **************************************************************************/

//  audio EQ para

const static UINT8  audEQModeParam[6][7] = {
	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
	{24,   24,   20,   20,   14,   9,    5   },
	{20,   20,   15,   10,   2,    8,    22  },
	{18,   16,   14,   1,    16,   18,   17  },
	{12,   18,   4,    12,   18,   12,   8   },
	{7,    10,   14,   17,   18,   10,   7   }
};

enum{
	HB_VCDataOut_ADDR	= 0x1000b000,
};

#define OUTPUT_VALUE_MAX	(0x1f)


//#define TEST_MUSIC_S	"audio\\48K320.mp3"
#define TEST_MUSIC_S	"AudioAMRPly\\AMR_PLY_01.amr"


/**************************************************************************
 *                             M A C R O S                                *
 **************************************************************************/

/**************************************************************************
 *                         D A T A   T Y P E S                            *
 **************************************************************************/

/**************************************************************************
 *                        G L O B A L   D A T A                           *
 **************************************************************************/

// 音頻是否結(jié)束的標(biāo)志
#define		AUDIO_OVER_MASK		(1<<0)
static UINT16 gAudioOverFlag = AUDIO_OVER_MASK;
// bit0		------- 0	還沒有結(jié)束
//			------- 1   已經(jīng)真正結(jié)束

// 是否需要發(fā)聲的標(biāo)志
#define		BIT_SOUND_FLAG		(1<<0)
#define		BIT_USER_FLAG		(1<<1)

static UINT16 gSoundFlag = 0x00;
// BIT0		------  是否發(fā)聲 
//					0	無聲
//					1   有聲
// BIT1		------  表示 使用者身分
//					0  key tone
//					1  AP sound
//					AP sound 的優(yōu)先級高于 key tone 
//					key tone 不能關(guān)掉 AP sound 
//					AP sound 可以關(guān)掉 key tone 



// codec 設(shè)定標(biāo)志
static UINT16 gCodecFlag = 0x00; 

// lanzhu add
static UINT8 audioAppTbl[33] = 
#if 0 
                                                        {3,7,8,9, 
								8,0,0,0,
								0,0,0,1,
								0,3,0,0,
								1,7,1,1,
								1,1,1,1,
								0,'6','c','6',
								'b','6','e','6','d'};
#else 
// [03/07/2006] lanzhu for fix speaker MAX value bug  
                                                { 
                                                        3,7,8,9, 
                                                        8,0,0,0, 
                                                        0,1,1,1, 
                                                        0,3,0,0, 
                                                        1,7,1,1, 
                                                        1,1,1,1, 
                                                        0,'6','e','6','d' 
                                                        }; 
#endif 

// cuining add 
static UINT8 audioAppTbl_t[29]= {3,7,8,9,
								 8,0,0,1,
								 1,0,0,1,
								 0,3,0,0,
								 1,7,1,1,
								 1,1,1,1,
								 0,'6','c','6','b'};

 /**************************************************************************
 *                 E X T E R N A L   R E F E R E N C E S                  *
 **************************************************************************/
extern UINT8* gpAudDataBuf;

/**************************************************************************
 *               F U N C T I O N   D E C L A R A T I O N S                *
 **************************************************************************/
static	UINT16	mp3_playback_start( void );		// MP3 play start
static	UINT8*	ret_audio_buf_ptr( void );		// return address ptr


void SPMP_AUDIO_SetCodec( void );
static UINT16 get_codec_flag( void );
void SPMP_Codec_ResetFlag( void );



/************************************************************************/
/*				將將音量設(shè)定為系統(tǒng)默認的值
  input:
			void
  output:	
			void 
  func:
                                                                        */
/************************************************************************/
void SPMP_AUDIO_SetDefaultValue( void )
{
	SPMP_AUDIO_SetOutputValue(  PMP_AUDIO_DEFAULT_VALUE );		
	return;
}

/************************************************************************/
/*				設(shè)定播放的音效
  input:
			eq_mode		[in]	UINT16 
  output:
			0 成功, 非0值失敗  
  func:
			輸入音效模式,設(shè)定播放時的音效
  note:
			使用常量數(shù)據(jù) 
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_SetEQMode( UINT16 eq_mode )
{
	UINT16 err;

	UINT8 *pdata;

	// 判斷輸入的音效模式是否合法
	if ( eq_mode >= sizeof(audEQModeParam)/sizeof(audEQModeParam[0]) ) {
		ERROR_REPORT;
		return APP_DRV_ERR;
	}

	// 獲得參數(shù)的地址指針
	pdata = (UINT8 *) (&( audEQModeParam[eq_mode][0]));

	// 進行音效的設(shè)定
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_EQ_SET, 
								(UINT8 *)pdata,
								(UINT16)sizeof(audEQModeParam[0]) );

	return err;		// 返回成功
}

/************************************************************************/
/*	設(shè)定聲音的位置
  input:
			Position	[in] UINT32 歌曲聲音的位置 
  output:
			0 成功, 非0值失敗
  func:
			設(shè)定聲音的位置
  note:		
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_SetCurrSecond( UINT32 Second )
{
	UINT16 err;

	err = SPMP_SendSignal( (UINT16)	MCATCH_CMD_AUDIO_POSITION_SET, 
										(UINT8 *)	&Second, 
										(UINT16)	sizeof(Second) );
	return err;
}

/************************************************************************/
/*	輸入需要播放的文件名, 開始該文件的播放
  input:
			pFileName	[in]	UINT8 * 文件名字符串的指針 
  output:
			0 成功, 非0值失敗
  func:
  note:
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_Play( UINT8 *pFileName )
{
	UINT16 ret;

	// 判斷輸入?yún)?shù)是否合法
	if (NULL == pFileName) {
		return APP_DRV_ERR;
	}

	// 如果文件不存在, 返回失敗
	if ( !strlen(pFileName) ) {
		return APP_DRV_ERR;
	}

	// 設(shè)定需要播放的文件名
	SPMP_sysFileNamePtrSet( MCATCH_CMD_AUDIO_GROUP, pFileName );

	// 啟動MP3的播放
	ret = mp3_playback_start();

	return ret;
}


/************************************************************************/
/*			輸入MIDI 數(shù)據(jù)的地址指針,進行MIDI 的播放
  input:
			pMIDI	[in]	UINT8 * MIDI 數(shù)據(jù)的內(nèi)存指針 
			len		[in]	UINT16  MIDI 數(shù)據(jù)的長度值
  output:
			0 成功, 非0值失敗
  func:
  note:
			[01/29/2007]  發(fā)現(xiàn)原來每次進行按鍵音發(fā)聲時,都有CODEC 的設(shè)置
			去除每次對CODEC 的設(shè)置動作
                                                                        */
/************************************************************************/

UINT16 SPMP_AUDIO_MIDI_Play( UINT8 * pMIDI, UINT16 len )
{
	UINT16 ret;
	UINT32 buf[2];
	
	buf[0] = (UINT32) pMIDI;
	buf[1] = len;

	// 判斷輸入?yún)?shù)是否合法
	if ( (NULL == pMIDI) || (0 == len)) {
		ERROR_REPORT;
		return APP_DRV_ERR;
	}

	// [01/29/2007] lanzhu marked 
	//SPMP_AUDIO_SetCodec( );	

	// 啟動MIDI 的播放
	ret = SPMP_SendSignal_T((UINT16)MCATCH_CMD_AUDIO_MIDIKEYTONE_PLAY_START,
									(UINT8 *)buf, (UINT16)sizeof(buf));
	return ret;
}
/************************************************************************/
/*	在歌曲播放的過程中, 獲得當(dāng)前已經(jīng)播放了的時間
  input:
		pCurrSecond		[out] 當(dāng)前歌曲播放的時間
  output:
		0 成功, 非0值失敗
  func:	
		在歌曲播放的過程中, 獲得當(dāng)前的時間值
  note:
		時間值 是以"秒"為單位的。	UINT32
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_GetCurrSecond( UINT32 * pCurrSecond )
{
	UINT8	buffer[4];
	UINT32	RegAddr;

	// 判斷輸入的參數(shù)是否合法
	if ( NULL == pCurrSecond ) {
		ERROR_REPORT;
		return APP_DRV_ERR;
	}

	RegAddr	= HB_VCDataOut_ADDR;

	// 獲得播放的時間值
	buffer[0] = READ8( RegAddr++ );
	buffer[1] = READ8( RegAddr++ );
	buffer[2] = READ8( RegAddr++ );
	buffer[3] = READ8( RegAddr );

	// 進行數(shù)據(jù)的合成
	*pCurrSecond = *((UINT32 *) buffer ); 

	// 返回成功
	return APP_DRV_OK;
}

/************************************************************************/
/*	輸入一個文件名字符串,獲得該文件的音頻信息
  input:
			paudInfoAttr	[out]	存放得到的 audio 信息的指針 	
  output:
			0 成功, 非0值失敗  
  func:
  note:

  typedef struct AUDIO_CODEC_ATTR 
  {
	  UINT16 samplingrate;
	  UINT16 channel;
	  UINT16 bit;
	  UINT16 codectype;

  } AUDIO_CODEC_ATTR;

  typedef struct AUDIO_INFO_ATTR 
  {
		UINT32 audioTotalSecond;
		AUDIO_CODEC_ATTR audioCodec;
		UINT16 audioFormat;        
		UINT16 avgBps;
		UINT16 isVBR;
		UINT16 isSeekable;
		UINT16 isID3v2;    
		UINT8 title[256];
		UINT8 artist[256]; 
		UINT8 album[256];  
	}	AUDIO_INFO_ATTR;
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_GetInfo( UINT8 *pFileName, void *paudInfoAttr )
{
	UINT16 err;
	UINT8 *ptemp;

	// 判斷輸入的指針是否合法
	if ( (NULL == paudInfoAttr) || (NULL == pFileName))
	{
		return APP_DRV_ERR;
	}

	// 設(shè)定需要播放的文件名
	SPMP_sysFileNamePtrSet((UINT16)MCATCH_CMD_AUDIO_GROUP, pFileName);
	// 進行信息的獲得
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_INFO_GET, (UINT8 *)NULL, (UINT16)NULL);

	if ( err ) {
		ERROR_REPORT;
		return err;				// 有錯誤發(fā)生,報錯退出
	}

	// 得到地址指針	
	//ptemp = ret_audio_buf_ptr();

	// 信息的復(fù)制
	memcpy(paudInfoAttr, gpAudDataBuf, sizeof(AUDIO_INFO_ATTR) );

	//釋放FW中申請的內(nèi)存
	memFree(gpAudDataBuf);
	gpAudDataBuf = NULL;

	return APP_DRV_OK;
}

/************************************************************************/
/* audio stop
  input:
			void
  output:
			0 成功, 非0值失敗
  func:
			audio play stop
  note:
                                                                        */
/************************************************************************/

#define AUDIO_OVER_DELAY	(5)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩在线一区二区| 精品成人佐山爱一区二区| 最新国产の精品合集bt伙计| 国产精品一区二区黑丝| 久久久久久久综合狠狠综合| 成人美女在线视频| 亚洲日穴在线视频| 亚洲欧洲成人精品av97| 欧美日本一区二区| 国产乱子轮精品视频| 伊人夜夜躁av伊人久久| 欧美日本一道本在线视频| 欧美人与性动xxxx| 在线不卡欧美精品一区二区三区| 韩国毛片一区二区三区| 亚洲欧美日韩在线| 精品久久久久久久久久久久包黑料| 成人涩涩免费视频| 高清不卡在线观看| 美洲天堂一区二卡三卡四卡视频| 久久久精品2019中文字幕之3| 久久婷婷成人综合色| 欧美福利视频一区| 日韩天堂在线观看| 在线观看视频欧美| 国产成人av网站| 视频一区视频二区在线观看| 欧美激情中文字幕一区二区| 欧美精品在线观看播放| 欧美一级精品在线| 日本一区二区三级电影在线观看| 91精品国产色综合久久不卡蜜臀| 99国内精品久久| 国产麻豆日韩欧美久久| 国产成人午夜99999| 不卡一区二区在线| 高清av一区二区| 91视频.com| 一本色道久久综合亚洲精品按摩| 精品无码三级在线观看视频| 天堂一区二区在线免费观看| 狠狠色综合日日| 97se狠狠狠综合亚洲狠狠| 欧美日韩精品一区二区三区| 日韩精品一区二区三区中文精品| 欧美日韩一区国产| 2020日本不卡一区二区视频| 亚洲视频在线观看一区| 奇米一区二区三区| 日韩电影在线观看电影| 亚洲成人在线观看视频| 国产精品久久看| 国产精品三级视频| 久久久不卡影院| 亚洲精品国产a| 韩国精品久久久| 91成人国产精品| 欧美图片一区二区三区| 欧美影视一区在线| 精品国产91洋老外米糕| 亚洲与欧洲av电影| 一区二区久久久久| 亚洲自拍偷拍麻豆| 国产精品一二三在| 欧美男男青年gay1069videost| 国产欧美一区二区三区鸳鸯浴| 亚洲成人在线免费| 91性感美女视频| 久久午夜羞羞影院免费观看| 图片区小说区区亚洲影院| 日韩电影在线一区| 色偷偷成人一区二区三区91| 精品久久久久久无| 亚洲成人综合在线| 91丨九色丨蝌蚪丨老版| 久久免费美女视频| 青青草一区二区三区| 欧美在线一区二区三区| 欧美国产一区视频在线观看| 久草这里只有精品视频| 欧美喷水一区二区| 亚洲精品乱码久久久久| 成人黄色小视频| 欧美精品一区在线观看| 日本va欧美va精品发布| 欧美日韩一区高清| 亚洲一二三四久久| 午夜精品视频在线观看| 成人激情电影免费在线观看| 日韩网站在线看片你懂的| 日韩高清不卡一区二区三区| 欧美午夜精品一区二区蜜桃| 亚洲理论在线观看| 91看片淫黄大片一级| 国产精品嫩草影院com| 国产成人精品免费网站| 久久综合九色综合欧美亚洲| 免费观看一级欧美片| 56国语精品自产拍在线观看| 国产欧美一区二区在线| 国产一区二区主播在线| 欧美精品一区二区三区一线天视频| 手机精品视频在线观看| 91精品欧美一区二区三区综合在 | 国产精品免费人成网站| 国产一区不卡在线| 久久久久久久网| 国产精品资源在线| 久久精品男人天堂av| 亚洲欧洲中文日韩久久av乱码| 国产v综合v亚洲欧| 国产精品情趣视频| 成人av在线观| 亚洲免费在线看| 欧洲一区二区三区在线| 亚洲二区在线视频| 91精品国产一区二区| 久久精品国产77777蜜臀| 色诱视频网站一区| 一级做a爱片久久| 欧美日韩一区二区不卡| 亚洲国产三级在线| 欧美一卡二卡三卡四卡| 久久国产麻豆精品| 国产人成亚洲第一网站在线播放 | 日韩女优制服丝袜电影| 黑人巨大精品欧美一区| 国产喷白浆一区二区三区| 成人免费高清在线| 亚洲麻豆国产自偷在线| 7777女厕盗摄久久久| 精品一区二区三区在线观看| 国产蜜臀97一区二区三区| 91在线观看一区二区| 亚洲午夜私人影院| 日韩一二三区视频| 国产99久久久国产精品潘金网站| 亚洲视频一二三| 欧美美女视频在线观看| 精品一区二区三区视频| 中文一区一区三区高中清不卡| av中文字幕亚洲| 国产日韩精品视频一区| 一本色道综合亚洲| 天天色天天爱天天射综合| 精品久久久网站| 91在线一区二区三区| 日韩精品午夜视频| 国产日本欧洲亚洲| 精品视频在线免费看| 国产在线麻豆精品观看| 亚洲日本一区二区| 欧美xxxxx牲另类人与| 99国产精品一区| 丝袜亚洲另类丝袜在线| 国产视频一区二区在线观看| 欧洲日韩一区二区三区| 国内成人免费视频| 亚洲欧洲综合另类在线| 精品少妇一区二区三区免费观看 | 久久综合网色—综合色88| 99久久国产免费看| 久久97超碰国产精品超碰| 亚洲素人一区二区| 精品日韩一区二区三区免费视频| 99国内精品久久| 国产在线一区二区| 日韩电影免费在线观看网站| 中文字幕在线观看一区二区| 日韩一区二区三区电影在线观看| 99久久精品国产精品久久| 久久99精品一区二区三区| 一区二区三区国产精华| 久久久久久久一区| 91精品国产综合久久婷婷香蕉| 97精品超碰一区二区三区| 久久er精品视频| 亚洲一区二区三区四区中文字幕| 国产欧美日韩在线| 欧美日本韩国一区二区三区视频| 97精品电影院| 成人福利视频网站| 久久国产欧美日韩精品| 午夜精品123| 玉足女爽爽91| 中文字幕一区二区三区乱码在线 | 亚洲精品免费电影| 日本一区二区三区久久久久久久久不| 91.com视频| 欧美日韩国产一区| 91国偷自产一区二区开放时间 | 日本va欧美va欧美va精品| 亚洲午夜一区二区| 一区二区三区日韩| 最新成人av在线| 国产精品久久久久久久裸模| 久久先锋影音av| 久久一区二区三区国产精品| 精品三级在线看| 精品捆绑美女sm三区|