?? effect.c
字號:
/******************************************************************************
*
* Copyright (C),2007, Fuzhou Rockchip Co.,Ltd.
*
* File name : effect.c
* Description: 音頻效果處理
* Remark:
*
* History:
* <author> <time> <version> <desc>
* Huweiguo 07/09/27 1.0
*
*******************************************************************************/
#include "include.h"
#include "audio_globals.h"
#include "effect.h"
#include "RkEQ\rk_eq.h"
#include "PlayFx\msaudspapi.h"
/**************************************************************************
* 函數(shù)描述: RockEQ初始化
* 入口參數(shù):
* 出口參數(shù):
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
static long RKEQInit(void)
{
return 0;
}
/**************************************************************************
* 函數(shù)描述: 微軟音效初始化
* 入口參數(shù):
* 出口參數(shù):
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
static long PFEQInit(void)
{
unsigned long SamplingRate = 44100;
CodecGetSampleRate(&SamplingRate);
if (MsAudspInit(SamplingRate) != 0)
return 1;
return 0;
}
/**************************************************************************
* 函數(shù)描述: RockEQ參數(shù)設(shè)置
* 入口參數(shù): [pEft] --
* 出口參數(shù):
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
#define EQADDVOL 6
short PresetGain[5][5] =
{
{16, 8, 12, 16, 16}, // ROCK
{12, 16, 16, 12, 12}, // POP
{12, 12, 12, 10, 10}, // CLASSIC
{18, 16, 14 , 10, 10}, // BASS
{16, 12, 12, 16, 18} // JAZZ
};
short UseEqTable[7] = {6, 8, 10, 12, 14, 16, 18};
short UseEQ[5];
static long RKEQAdjust(tEffect *pEft)
{
int i;
unsigned long SamplingRate = 44100;// = pEft->RKCoef.SmpRate;
CodecGetSampleRate(&SamplingRate);
switch (pEft->Mode)
{
case EQ_ROCK:
case EQ_POP:
case EQ_CLASSIC:
case EQ_BASS:
case EQ_JAZZ:
RockEQAdjust(SamplingRate, PresetGain[pEft->Mode-EQ_ROCK], 1);
break;
case EQ_USER:
for (i = 0;i < 5;i++)
{
UseEQ[i] = UseEqTable[pEft->RKCoef.dbGain[i]];
}
RockEQAdjust(SamplingRate, UseEQ, 1);
break;
default:
break;
}
return 0;
}
/**************************************************************************
* 函數(shù)描述: PlayFx EQ參數(shù)設(shè)置
* 入口參數(shù):
* 出口參數(shù):
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
static long PFEQAdjust(void)
{
singal_effect_change_and_refresh_argtbl(pAuDSP, (void *)g_argTable, (void *)g_argTableNew);
return 0;
}
/**************************************************************************
* 函數(shù)描述: PlayFx EQ參數(shù)設(shè)置, 當音效模式為NOR 時
* 入口參數(shù):
* 出口參數(shù):
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
static long PFEQAdjustNor(void)
{
ms_set_leq_enabled(0);
ms_set_bb_enabled(0);
ms_set_hv_enabled(0);
ms_set_bb_level(1);
singal_effect_change_and_refresh_argtbl(pAuDSP, (void *)g_argTable, (void *)g_argTableNew);
return 0;
}
/**************************************************************************
* 函數(shù)描述: 音效初始化函數(shù)
* 入口參數(shù): 無
* 出口參數(shù): 無
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
long EffectInit(void)
{
if (RKEQInit() != 0)
return 1;
if (PFEQInit() != 0)
return 1;
return 0;
}
/**************************************************************************
* 函數(shù)描述: 音效結(jié)束函數(shù)
* 入口參數(shù): 無
* 出口參數(shù): 無
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
long EffectEnd(void)
{
MsAudspEnd();
return 0;
}
/**************************************************************************
* 函數(shù)描述: 音效處理函數(shù)
* 入口參數(shù): [pBuffer] -- PCM 數(shù)據(jù)所在的Buffer
* [PcmLen] -- PCM數(shù)據(jù)的長度
* 出口參數(shù): 無
* 返回值: 0:處理成功; other:失敗。
* 注釋: 音效處理輸入PCM 數(shù)據(jù)需要以 LRLRLR...的形式存放
***************************************************************************/
int EQtime;
long EffectProcess(short *pBuffer, long PcmLen)
{
AudioInOut_Type *pAudio = &AudioIOBuf;
tEffect *pEffect = &pAudio->EffectCtl;
if (pBuffer == 0)
return 1;
if (PcmLen <= 0)
return 0;
if (CurrentCodec == CODEC_APE_DEC)
return 1; //目前 ape 不做音效處理
switch (pEffect->Mode)
{
case EQ_NOR:
EQtime = 0;
break;
case EQ_PLAYFX:
MsAudspProssing(pBuffer, PcmLen);
if (EQtime == 6)
{
AudioSetVolume();
EQtime = 7;
}
else
EQtime++;
break;
case EQ_ROCK:
case EQ_POP:
case EQ_CLASSIC:
case EQ_BASS:
case EQ_JAZZ:
case EQ_USER:
EQtime = 0;
RockEQProcess(pBuffer, PcmLen);
break;
default:
break;
}
return 0; //成功
}
/**************************************************************************
* 函數(shù)描述: 音效調(diào)節(jié)函數(shù)
* 入口參數(shù): 無
* 出口參數(shù): 無
* 返回值: 0:處理成功; other:失敗。
* 注釋:
***************************************************************************/
long EffectAdjust(void)
{
AudioInOut_Type *pAudio = &AudioIOBuf;
tEffect *pEffect = &pAudio->EffectCtl;
EQtime = 0;
switch (pEffect->Mode)
{
case EQ_NOR:
AudioSetVolume();
PFEQAdjustNor(); // NOR 時微軟音效需要作一些處理
PMU_ExitModule(PMU_EQ);
break;
case EQ_ROCK:
case EQ_POP:
case EQ_CLASSIC:
case EQ_BASS:
case EQ_JAZZ:
case EQ_USER:
AudioSetVolume();
RKEQAdjust(pEffect);
PMU_EnterModule(PMU_EQ);
break;
case EQ_PLAYFX:
PFEQAdjust();
PMU_EnterModule(PMU_EQ);
break;
default:
break;
}
return 0; //成功
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -