📄 audio2eng.cpp
字号:
/* Copyright (c) 2004, Symbian Software Ltd. All rights reserved */
#ifndef __Audio2ENG_H_
#define __Audio2ENG_H_
#include "Audio2eng.h"
#include "Audio2Ui.h"
#include "Audio2.hrh"
CAudio2Engine::CAudio2Engine(CAudio2Ui& aAppUi) :
iAppUi(aAppUi),
iState(ENotReady)
{
}
void CAudio2Engine::SetArrays(RArray<TFourCC>* aDataTypes,
RArray<TUint>* aSampleRates,
RArray<TUint>* aChannels)
{
iDataTypes=aDataTypes;
iSampleRates=aSampleRates;
iChannels=aChannels;
}
CAudio2Engine* CAudio2Engine::NewL(CAudio2Ui& aAppUi)
{
CAudio2Engine* self = NewLC(aAppUi);
CleanupStack::Pop(); // self
return self;
}
CAudio2Engine* CAudio2Engine::NewLC(CAudio2Ui& aAppUi)
{
CAudio2Engine* self = new (ELeave) CAudio2Engine(aAppUi);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
_LIT(KFileName,"rec.wav");
void CAudio2Engine::ConstructL()
{
delete iUtility;
iUtility=NULL;
iUtility = CMdaAudioRecorderUtility::NewL(*this);
iUtility->OpenFileL(KFileName);
}
void CAudio2Engine::ConvertL(TPtrC aExt, TInt aCodecIndex, TInt aSampleRatesIndex, TInt aChannelsIndex)
{
iCodecIndex=aCodecIndex;
iSampleRatesIndex=aSampleRatesIndex;
iChannelsIndex=aChannelsIndex;
iState=EOpeningConverter;
OpenConverterL(aExt);
}
void CAudio2Engine::OpenConverterL(TPtrC aExt)
{
if (iConverter)
{
delete iConverter;
iConverter=NULL;
};
iConverter=CMdaAudioConvertUtility::NewL(*this);
_LIT(KConvertName,"conv");
TBuf<32> fileName;
fileName=KConvertName;
fileName.Append(aExt);
RFs session;
session.Connect();
session.Delete(fileName);
session.Close();
iConverter->OpenL(KFileName, fileName);
}
void CAudio2Engine::GetFormatsL(TPtrC aExt)
{
iState=EGettingConversionFormats;
OpenConverterL(aExt);
}
void CAudio2Engine::GetFormats2L()
{
//ask the destination which types it supports
TRAPD(err,iConverter -> GetSupportedDestinationDataTypesL(*iDataTypes));
if (err != KErrNotSupported)
User::LeaveIfError(err);
TRAP(err,iConverter -> GetSupportedConversionSampleRatesL(*iSampleRates));
if (err != KErrNotSupported)
User::LeaveIfError(err);
TRAP(err,iConverter -> GetSupportedConversionNumberOfChannelsL(*iChannels));
if (err != KErrNotSupported)
User::LeaveIfError(err);
iConversionTypes=ETrue;
}
void CAudio2Engine::Convert2L()
{
if (iCodecIndex!=-1)//selections were made
{
TFourCC cc=(*iDataTypes)[iCodecIndex];
iConverter->SetDestinationDataTypeL(cc);
TInt s=(*iSampleRates)[iSampleRatesIndex];
iConverter->SetDestinationSampleRateL(s);
TInt c=(*iChannels)[iChannelsIndex];
iConverter->SetDestinationNumberOfChannelsL(c);
}
iConverter->ConvertL();
}
CAudio2Engine::~CAudio2Engine()
{
delete iUtility;
iUtility = NULL;
delete iConverter;
iConverter=NULL;
}
void CAudio2Engine::PlayL()
{
iUtility->PlayL();
}
void CAudio2Engine::StopL()
{
if (iState==ERecording)
{
iUtility->Stop();
iRecorded=ETrue;
}
if (iState==EConverting)
iConverter->Stop();
iState=EReady;
}
// Set options and start recording
void CAudio2Engine::StartRecordingL()
{
iUtility -> SetAudioDeviceMode(CMdaAudioRecorderUtility::EDefault);
iUtility -> RecordL();
}
void CAudio2Engine::RecordTypesL(CDesCArray& aTypeArray)
{
RMMFControllerImplInfoArray controllers;
CleanupResetAndDestroyPushL(controllers);
CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC();
CMMFFormatSelectionParameters* fSelectRead = CMMFFormatSelectionParameters::NewLC();
CMMFFormatSelectionParameters* fSelectWrite = CMMFFormatSelectionParameters::NewLC();
RArray<TUid> mediaIds;
mediaIds.Append(KUidMediaTypeAudio);
CleanupClosePushL(mediaIds);
cSelect->SetMediaIdsL(mediaIds, CMMFPluginSelectionParameters::EAllowOnlySuppliedMediaIds);
cSelect->SetRequiredPlayFormatSupportL(*fSelectRead);
cSelect->SetRequiredRecordFormatSupportL(*fSelectWrite); // need to specify this as otherwise the supported record formats won't be retrieved
cSelect->ListImplementationsL(controllers);
TBuf<10> buf;
// Loop through each returned plug-in and get their record formats
for (TInt i=0; i<controllers.Count(); i++)
{
const RMMFFormatImplInfoArray& recordInfo = controllers[i]->RecordFormats();
// Get array of supported file extensions.
for (TInt j=0; j<recordInfo.Count(); j++)
{
const CDesC8Array& extensions = recordInfo[j]->SupportedFileExtensions();
// and finally add each extension to the array
for (TInt k=0; k<extensions.Count(); k++)
{
buf.Copy(extensions[k]);
aTypeArray.AppendL(buf);
}
}
}
CleanupStack::PopAndDestroy(5);
}
void CAudio2Engine::MoscoStateChangeEvent(CBase* aObject, TInt /*aPreviousState*/, TInt aCurrentState, TInt aErrorCode)
{
if (aErrorCode!=KErrNone)
{//message
iState=ENotReady;
return;
}
if (aObject==iUtility)
switch (aCurrentState)
{
case CMdaAudioClipUtility::EOpen:
iState=EReady;
break;
case CMdaAudioClipUtility::ERecording:
iState=ERecording;
break;
case CMdaAudioClipUtility::EPlaying:
iState=EPlaying;
break;
default:;
}
else //must be converter
switch (aCurrentState)
{
case CMdaAudioClipUtility::EOpen:
{
if (iState==EGettingConversionFormats)
{
GetFormats2L();
iState=EReady;
break;
}
else
{
TState state=iState;
iState=EReady;
if (state!=EConverting)
Convert2L();
break;
}
}
case CMdaAudioClipUtility::ERecording:
iState=EConverting;
break;
case CMdaAudioClipUtility::EPlaying:
iState=EConverting;
break;
default:;
}
}
void CAudio2Engine::UpdateMenu(CEikMenuPane* aMenuPane)
{
switch(iState)
{
case ENotReady:
aMenuPane->SetItemDimmed(ECmdRecord, EFalse);
aMenuPane->SetItemDimmed(ECmdPlay, ETrue);
aMenuPane->SetItemDimmed(ECmdStop, ETrue);
aMenuPane->SetItemDimmed(ECmdConversionFormats, ETrue);
aMenuPane->SetItemDimmed(ECmdConversionTypes, ETrue);
aMenuPane->SetItemDimmed(ECmdConvert, ETrue);
break;
case EReady:
aMenuPane->SetItemDimmed(ECmdRecord, EFalse);
aMenuPane->SetItemDimmed(ECmdPlay, EFalse);
aMenuPane->SetItemDimmed(ECmdStop, ETrue);
aMenuPane->SetItemDimmed(ECmdConversionFormats, !iRecorded);
aMenuPane->SetItemDimmed(ECmdConversionTypes, !iConversionTypes);
aMenuPane->SetItemDimmed(ECmdConvert, !iConversionTypes);
break;
case EPlaying:
case ERecording:
case EConverting:
aMenuPane->SetItemDimmed(ECmdRecord, ETrue);
aMenuPane->SetItemDimmed(ECmdPlay, ETrue);
aMenuPane->SetItemDimmed(ECmdStop, EFalse);
aMenuPane->SetItemDimmed(ECmdConversionFormats, ETrue);
aMenuPane->SetItemDimmed(ECmdConversionTypes, ETrue);
aMenuPane->SetItemDimmed(ECmdConvert, ETrue);
break;
}
}
#endif// __Audio2ENG_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -