⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinputstream.cpp

📁 手机流文件的处理程序源代码!The interface to an audio stream player passing audio data from the audio hardware to
💻 CPP
字号:
// TInputStream.cpp
//
// Copyright (c) 2003 Symbian Ltd.  All rights reserved.
//

#include <barsread.h>
#include <eikbtpan.h>
#include <eikcmbut.h>
#include <eiklabel.h>
#include <eikmover.h>
#include <eikbtgpc.h>
#include <eikon.hrh>
#include <eikon.rsg>
#include "TInputStream.h"

const TInt KBufferSize = 16000;

//
// CTInputStreamAppView
//

CTInputStreamAppView::CTInputStreamAppView():
	CCoeControl()
	{}

CTInputStreamAppView::~CTInputStreamAppView()
	{
	delete iBitmapGc;
	delete iBitmapDev;
	delete iBitmap;
	}

void CTInputStreamAppView::ConstructL(const TRect& aRect)
	{
	CreateWindowL();
    SetRect(aRect);
	ActivateL();

	const CFont* font = ControlEnv()->NormalFont();
	iFontHeight = font->HeightInPixels();
	iFontAscent = font->AscentInPixels();

	iBitmap = new(ELeave) CFbsBitmap;
	User::LeaveIfError(iBitmap->Create(aRect.Size(),Window().DisplayMode()));
	iBitmapDev = CFbsBitmapDevice::NewL(iBitmap);
	iBitmapDev->CreateContext(iBitmapGc);

	iBitmapGc->UseFont(font);
	iBitmapGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
	iBitmapGc->SetBrushColor(KRgbWhite);

	iBitmapGc->Clear();
	}

void CTInputStreamAppView::AddMessage(const TDesC& aMessage)
	{
	iBitmapGc->CopyRect(TPoint(0,-iFontHeight),Rect());
	const TRect messageRect(0,Rect().iBr.iY - iFontHeight,Rect().iBr.iX,Rect().iBr.iY);
	iBitmapGc->DrawText(aMessage,messageRect,iFontAscent);
	Window().Invalidate();
	}

void CTInputStreamAppView::Draw(const TRect& aRect) const
	{
	CWindowGc& gc = SystemGc();
	gc.BitBlt(aRect.iTl,iBitmap,aRect);
	}

//
//  CTInputStreamAppUi
//

CTInputStreamAppUi::~CTInputStreamAppUi()
    {
	delete iInput;
	delete iOutput;
	iBuffer.ResetAndDestroy();
	if (iAppView)
		{
		RemoveFromStack(iAppView);
		delete iAppView;
		}
    }

void CTInputStreamAppUi::ConstructL()
    {
    BaseConstructL();
	iAppView = new(ELeave) CTInputStreamAppView;
	iAppView->ConstructL(ClientRect());
	AddToStackL(iAppView);

	iSettings.iChannels = TMdaAudioDataSettings::EChannelsMono;
	iSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;

	iInput = CMdaAudioInputStream::NewL(*this);
	iInput->Open(&iSettings);

	iOutput = CMdaAudioOutputStream::NewL(*this);
	iOutput->Open(&iSettings);

	TDes8* buffer = new(ELeave) TBuf8<KBufferSize>;
	buffer->SetMax();
	CleanupStack::PushL(buffer);
	User::LeaveIfError(iBuffer.Append(buffer));
	CleanupStack::Pop(buffer);
	buffer = new(ELeave) TBuf8<KBufferSize>;
	buffer->SetMax();
	CleanupStack::PushL(buffer);
	User::LeaveIfError(iBuffer.Append(buffer));
	CleanupStack::Pop(buffer);
	buffer = new(ELeave) TBuf8<KBufferSize>;
	buffer->SetMax();
	CleanupStack::PushL(buffer);
	User::LeaveIfError(iBuffer.Append(buffer));
	CleanupStack::Pop(buffer);
    }

void CTInputStreamAppUi::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
	case ETInputStreamCmdRecord:
		RecordL();
		break;
	case ETInputStreamCmdPlay:
		PlayL();
		break;
	case EAknSoftkeyBack:
		CEikAppUi::Exit();
		break;
		}
	}

void CTInputStreamAppUi::MaiscOpenComplete(TInt aError)
	{
	if (aError != KErrNone)
		{
		TBuf<32> buf(_L("Input err "));
		buf.AppendNum(aError);
		iAppView->AddMessage(buf);
		}
	OpenCompleteL(aError);
	}

void CTInputStreamAppUi::MaiscBufferCopied(TInt aError, const TDesC8& aBuffer)
	{
	TBuf<32> buf(_L("Buf "));
	if (&aBuffer == iBuffer[0])
		buf.AppendNum(1);
	else if (&aBuffer == iBuffer[1])
		buf.AppendNum(2);
	else if (&aBuffer == iBuffer[2])
		{
		buf.AppendNum(3);
		iState = EOpen;
		}
	buf.Append(_L(" full, err "));
	buf.AppendNum(aError);
	iAppView->AddMessage(buf);

	User::LeaveIfError(aError);
	}

void CTInputStreamAppUi::MaiscRecordComplete(TInt aError)
	{
	iState = EOpen;
	TBuf<32> buf(_L("Record complete, err "));
	buf.AppendNum(aError);
	iAppView->AddMessage(buf);
	User::LeaveIfError(aError);
	}

void CTInputStreamAppUi::MaoscOpenComplete(TInt aError)
	{
	if (aError != KErrNone)
		{
		TBuf<32> buf(_L("Output err "));
		buf.AppendNum(aError);
		iAppView->AddMessage(buf);
		}
	OpenCompleteL(aError);
	}

void CTInputStreamAppUi::MaoscBufferCopied(TInt aError, const TDesC8& aBuffer)
	{
	TBuf<32> buf(_L("Buf "));
	if (&aBuffer == iBuffer[0])
		buf.AppendNum(1);
	else if (&aBuffer == iBuffer[1])
		buf.AppendNum(2);
	else if (&aBuffer == iBuffer[2])
		buf.AppendNum(3);
	buf.Append(_L(" played, err "));
	buf.AppendNum(aError);
	iAppView->AddMessage(buf);

	User::LeaveIfError(aError);
	}

void CTInputStreamAppUi::MaoscPlayComplete(TInt aError)
	{
	iState = EOpen;
	if (aError == KErrUnderflow)
		aError = KErrNone;
	TBuf<32> buf(_L("Play complete, err "));
	buf.AppendNum(aError);
	iAppView->AddMessage(buf);
	User::LeaveIfError(aError);
	}

void CTInputStreamAppUi::OpenCompleteL(TInt aError)
	{
	User::LeaveIfError(aError);

	if (iState == EClosed)
		{
		iState = EFirstOpenSuccessful;
		}
	else
		{
		iState = EOpen;
		iAppView->AddMessage(_L("Ready"));
		iInput->SetGain(iInput->MaxGain());
		iOutput->SetVolume(iOutput->MaxVolume() / 2);
		}
	}

void CTInputStreamAppUi::RecordL()
	{
	if (iState != EOpen)
		User::Leave(KErrNotReady);

	iState = ERecording;

	for (TInt index = 0; index < iBuffer.Count(); index++)
		{
		iInput->ReadL(*iBuffer[index]);
		}
	}

void CTInputStreamAppUi::PlayL()
	{
	if (iState != EOpen)
		User::Leave(KErrNotReady);

	iState = EPlaying;

	for (TInt index = 0; index < iBuffer.Count(); index++)
		{
		iOutput->WriteL(*iBuffer[index]);
		}
	}

//
// CTInputStreamApp
//

TUid CTInputStreamApp::AppDllUid() const
	{
	return KUidMdaAudioInputStreamingTestApp;
	}

CApaDocument* CTInputStreamApp::CreateDocumentL()
	{
	return new(ELeave) CTInputStreamDocument(*this);
	}


//
// CTInputStreamDocument
//

CTInputStreamDocument::CTInputStreamDocument(CEikApplication& aApp)
	: CAknDocument(aApp)
	{}

CEikAppUi* CTInputStreamDocument::CreateAppUiL()
	{
    return new(ELeave) CTInputStreamAppUi;
	}

EXPORT_C CApaApplication* NewApplication()
	{
	return new CTInputStreamApp;
	}

GLDEF_C TInt E32Dll(TDllReason)
	{
	return KErrNone;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -