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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? audioplayerengine.cpp

?? Symbian S60下的聲音播放器的例子,適合初學者
?? CPP
字號:
/**
 *
 * @brief Definition of CAudioPlayerEngine
 *
 * Copyright (c) EMCC Software Ltd 2003
 * @version 1.0
 */

#include "AudioPlayerEngine.h"

#include <eikenv.h>
#include <stringloader.h>
#include <barsread.h>
#include <aknutils.h>

#include <AudioPlayer.rsg>
#include "AudioPlayer.loc"

_LIT(KToPlayFileWav,	"\\system\\apps\\AudioPlayer\\Ring.wav");
_LIT(KToPlayFileMidi,	"\\system\\apps\\AudioPlayer\\Fur-Elise.mid");
_LIT(KToPlayFileStream,	"\\system\\apps\\AudioPlayer\\Stream.pcm");

const TInt KToneFrequency = 3000;
const TInt KToneDuration = 4000000;
const TInt KToneVolumeDenominator = 2;

/**
* C++ constructor
*/
CAudioPlayerEngine::CAudioPlayerEngine(MAudioPlayerEngineObserver& aObserver)
:iObserver(aObserver),
 iState(EStopped)
	{
	}

/**
* Destructor.
*/
CAudioPlayerEngine::~CAudioPlayerEngine()
	{
	Stop();
	}

/**
 * Symbian OS 2 phase constructor.
 * Constructs the CAudioPlayerEngine popping
 * the constructed object from the CleanupStack before returning it.
 *
 * @param aRect The rectangle for this window
 * @return The newly constructed CAudioPlayerAppView
 */
CAudioPlayerEngine* CAudioPlayerEngine::NewL(MAudioPlayerEngineObserver& aObserver)
	{
	CAudioPlayerEngine* self = new (ELeave) CAudioPlayerEngine(aObserver);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);
	return self;
	}

/**
* Symbian 2nd phase constructor.
* Empty implementation
*/
void CAudioPlayerEngine::ConstructL()
	{
	}

/**
* MMdaAudioToneObserver derivation
* This has been called as a result of NewL() being called on the tone player
* the tone utility is now ready for playing
*
* @param aError Error code to inform us if preparation has successfully completed
*
*/
void CAudioPlayerEngine::MatoPrepareComplete(TInt aError)
	{
	if (aError)
		{
		Stop();
		}
	else
		{
		iPlayerTone->SetVolume(iPlayerTone->MaxVolume() / KToneVolumeDenominator);
		iPlayerTone->Play();
		}
	}

/**
* MMdaAudioToneObserver derivation
* This is called when tone playing completes and informs the
* MAudioPlayerEngineObserver playing has finished.
*
* @param aError Error code to inform us if playing has successfully completed
*/
void CAudioPlayerEngine::MatoPlayComplete(TInt /*aError*/)
	{
	iState = EStopped;
	delete iPlayerTone;
	iPlayerTone = NULL;

	TRAPD(err, iObserver.HandlePlayingStoppedL());
	}

/**
* MMdaAudioPlayerCallback derivation
* This has been called as a result of NewFilePlayerL() being called on the file player
* the player utility is now ready for playing
*
* @param aError Status of the audio sample after initialization
* @param aDuration Duration of the audio sample
*/
void CAudioPlayerEngine::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
	{
	if (aError == KErrNone)
		{
		iPlayerFile->SetVolume(iPlayerFile->MaxVolume() / KToneVolumeDenominator);
		iPlayerFile->Play();
		}
	else
		{
		Stop();
		}
	}

/**
* MMdaAudioPlayerCallback derivation
* This has been called as a result of playing being completed
*
* @param aError Error code to inform if playing has successfully completed
*/
void CAudioPlayerEngine::MapcPlayComplete(TInt /*aError*/)
	{
	iState = EStopped;
	delete iPlayerFile;
	iPlayerFile = NULL;

	TRAPD(err, iObserver.HandlePlayingStoppedL());
	}

/**
* MMdaAudioOutputStreamCallback derivation
* This has been called as a result of NewL() being called on the stream player
* in order to play the stream, we must 1st write the stream buffer to the client
* once this has been done, the stream will begin playing automatically
*
* @param aError Error code to indicate if open succeeded
*/
void CAudioPlayerEngine::MaoscOpenComplete(TInt aError)
	{
	if (aError == KErrNone)
		{
		TRAPD(err, iPlayerStream->WriteL(*iStreamBuffer));
		}
	else
		{
		Stop();
		}
	}

/**
* This has been called in response to WriteL() being called on the stream player
* or in response to Stop() being called on the stream player. in the latter case,
* aError is equal to KErrAbort.
* Otherwise, we add iStreamBuffer to the client queue, so that it will be repeated,
* when the last buffer has finished
*
* @param aError   Error code to indicate if copy was successful
* @param aBuffer  A reference to the descriptor that has been copied to the server
*/
void CAudioPlayerEngine::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/)
	{
	if (aError == KErrNone)
		{
		TRAPD(err, iPlayerStream->WriteL(*iStreamBuffer))
		iPlayerStream->SetVolume(iPlayerStream->MaxVolume() / KToneVolumeDenominator);
		}
	}

/**
* Callback when playback finishes
*
* @param aError Error code indicates why playback was terminated
*/
void CAudioPlayerEngine::MaoscPlayComplete(TInt /*aError*/)
	{
	iState = EStopped;
	delete iPlayerStream;
	iPlayerStream = NULL;
	delete iStreamBuffer;
	iStreamBuffer = NULL;
	delete [] iStreamData;
	iStreamData = NULL;

	TRAPD(err, iObserver.HandlePlayingStoppedL());
	}

//PLAYER FUNCTIONS

/**
* Constructs the tone player;
* This will lead to a call to MapcInitComplete()
*/
void CAudioPlayerEngine::PlayToneL()
	{
	iState = EPlaying;
	iPlayerTone = CMdaAudioToneUtility::NewL(*this);
	iPlayerTone->PrepareToPlayTone(KToneFrequency, TTimeIntervalMicroSeconds(KToneDuration));
	}

/**
* Constructs the file player;
* This will lead to a call to MapcInitComplete()
*/
void CAudioPlayerEngine::PlayWavL()
	{
	TFileName wavFile(KToPlayFileWav);
	User::LeaveIfError(CompleteWithAppPath(wavFile));
	iState = EPlaying;
	iPlayerFile = CMdaAudioPlayerUtility::NewFilePlayerL(wavFile, *this);
	}

/**
* Constructs the file player;
* This will lead to a call to MapcInitComplete()
* Note: playing midi files can only be supported on device; it is not supported under WINS
*/
void CAudioPlayerEngine::PlayMidiL()
	{
#ifndef __WINS__
	TFileName midiFile(KToPlayFileMidi);
	User::LeaveIfError(CompleteWithAppPath(midiFile));
	iState = EPlaying;
	iPlayerFile = CMdaAudioPlayerUtility::NewFilePlayerL(midiFile, *this);
#endif
	}
/**
* Constructs the stream player
* This will lead to a call to MaoscOpenComplete()
*/
void CAudioPlayerEngine::PlayStreamL()
    {
	// open the file and load it into the buffers
	RFs fs;
    CleanupClosePushL(fs);				// PUSH
	User::LeaveIfError(fs.Connect());
    RFile file;
    CleanupClosePushL(file);			// PUSH

	TFileName streamFile(KToPlayFileStream);
	User::LeaveIfError(CompleteWithAppPath(streamFile));
	User::LeaveIfError(file.Open(fs, streamFile, EFileRead | EFileShareReadersOnly));

	TInt fileSize = 0;
	file.Size(fileSize);
	iStreamData = new (ELeave) TUint8[fileSize];
    iStreamBuffer = new (ELeave) TPtr8(iStreamData, fileSize, fileSize);
	file.Read(*iStreamBuffer);

	CleanupStack::PopAndDestroy(2);		// file & fs

	iState = EPlaying;
	iPlayerStream = CMdaAudioOutputStream::NewL(*this);
	iPlayerStream->Open(&iStreamSettings);
	}

/**
* Stops whatever is playing and deletes the player
*/
void CAudioPlayerEngine::Stop()
	{
	if (iPlayerTone)
		{
		iPlayerTone->CancelPlay();
		}

	if (iPlayerFile)
		{
		iPlayerFile->Stop();
		}

	if (iPlayerStream)
		{
		iPlayerStream->Stop();
		}

	delete iPlayerTone;
	iPlayerTone = NULL;

	delete iPlayerFile;
	iPlayerFile = NULL;

	delete iPlayerStream;
	iPlayerStream = NULL;
	delete iStreamBuffer;
	iStreamBuffer = NULL;
	delete [] iStreamData;
	iStreamData = NULL;

	iState = EStopped;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日夜夜精品视频天天综合网| 久久久99精品久久| 在线播放/欧美激情| 欧美疯狂性受xxxxx喷水图片| 日韩欧美国产wwwww| 国产精品色在线| 免费在线观看不卡| 欧美日韩中文字幕一区二区| 日本一区二区高清| 精品在线免费视频| 91精品国产综合久久久久久漫画| 久久久国产午夜精品| 日韩成人av影视| 欧美日韩综合一区| 亚洲黄色片在线观看| 99久久婷婷国产精品综合| 欧美激情在线免费观看| 国内不卡的二区三区中文字幕 | 日韩一区二区三区在线观看| 亚洲精品成a人| av电影一区二区| 国产亚洲欧美日韩在线一区| 久久精品久久99精品久久| 欧美丰满少妇xxxbbb| 亚洲成人av免费| 欧美日韩高清在线播放| 亚洲人成人一区二区在线观看| 国产精品一二三四区| 蜜桃91丨九色丨蝌蚪91桃色| 国产一区二区三区高清播放| 国内精品写真在线观看| 欧美成人午夜电影| 国产呦萝稀缺另类资源| 久久久久久夜精品精品免费| 精品一区二区免费在线观看| 日韩免费看的电影| 国产资源在线一区| 337p粉嫩大胆色噜噜噜噜亚洲| 九色综合国产一区二区三区| 欧美精品一区二区不卡 | 亚洲综合丁香婷婷六月香| 成人av网站免费| 亚洲男人的天堂在线观看| 色妹子一区二区| 午夜精品福利一区二区三区蜜桃| 国产麻豆9l精品三级站| 国产美女娇喘av呻吟久久| 欧美tickling挠脚心丨vk| 中文字幕一区二区不卡| 国产很黄免费观看久久| 国产黄色成人av| 国产一区二区在线电影| 色哟哟一区二区三区| 一区二区免费在线播放| 在线成人av影院| 国产麻豆成人传媒免费观看| 国产精品伦一区| 51精品视频一区二区三区| 国产乱码一区二区三区| 亚洲日本电影在线| 欧美一区二区三区在线视频| 国产福利一区二区三区视频在线 | 美女任你摸久久 | av成人免费在线观看| 一区二区三区中文在线观看| 91.xcao| 丁香天五香天堂综合| 一区二区在线观看免费视频播放| 欧美精品1区2区3区| 国产精品 欧美精品| 亚洲一二三四在线| 国产日韩av一区二区| 欧洲av在线精品| 国产精品一二三| 日韩电影在线观看一区| 国产精品拍天天在线| 538prom精品视频线放| 99re这里只有精品视频首页| 蜜桃一区二区三区在线| 中文字幕中文字幕一区| 欧美一级搡bbbb搡bbbb| 色哟哟欧美精品| 久久不见久久见中文字幕免费| 亚洲天堂成人在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品在线一区二区三区| 欧美一区二区黄色| 99re热这里只有精品免费视频| 午夜私人影院久久久久| 中文字幕在线一区| 精品国一区二区三区| 7777女厕盗摄久久久| 成人av在线影院| 国产成人高清视频| 经典三级一区二区| 奇米精品一区二区三区在线观看一| 9人人澡人人爽人人精品| 九色综合狠狠综合久久| 奇米色一区二区| 免费在线看成人av| 亚洲不卡av一区二区三区| 亚洲激情图片小说视频| 亚洲色图欧美偷拍| 国产日韩视频一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一区二区成人| 7777精品伊人久久久大香线蕉 | 26uuu精品一区二区三区四区在线| 欧美日韩综合在线| 欧美亚洲国产bt| 欧美综合欧美视频| 欧美午夜一区二区三区免费大片| 91麻豆swag| 日本丰满少妇一区二区三区| 在线国产亚洲欧美| 色琪琪一区二区三区亚洲区| 色综合久久中文综合久久牛| av午夜一区麻豆| 色婷婷亚洲综合| 欧美日韩一区精品| 欧美精品久久99久久在免费线| 欧美特级限制片免费在线观看| 欧美日韩中文一区| 6080午夜不卡| 国产精品国产自产拍在线| 亚洲天堂精品视频| 亚洲一区二区在线观看视频| 石原莉奈在线亚洲二区| 奇米四色…亚洲| 国产精品乡下勾搭老头1| 不卡视频在线观看| 91精品福利视频| 欧美精品久久天天躁| 亚洲精品在线观| 中文字幕一区二区三区蜜月| 亚洲伦在线观看| 日本女人一区二区三区| 福利视频网站一区二区三区| 成人av资源下载| 欧美无砖专区一中文字| 日韩免费看的电影| 最新热久久免费视频| 亚洲国产aⅴ天堂久久| 久久av中文字幕片| 99视频精品在线| 欧美精品亚洲二区| 国产欧美日韩视频一区二区| 日韩毛片精品高清免费| 日本午夜一本久久久综合| 国产精品1区2区3区在线观看| 99国产精品一区| 日韩免费观看高清完整版在线观看| 欧美高清在线精品一区| 亚洲成人www| 丁香婷婷综合激情五月色| 欧美亚州韩日在线看免费版国语版| 欧美成人一区二区三区在线观看| 欧美国产1区2区| 蜜臀精品久久久久久蜜臀| 一本一道波多野结衣一区二区| 日韩视频在线观看一区二区| 亚洲人成精品久久久久| 久久99精品国产麻豆婷婷洗澡| 日本国产一区二区| 欧美激情一区二区三区蜜桃视频| 亚洲高清免费视频| 成人高清视频在线| 精品国产免费一区二区三区香蕉| 久久精品国产精品亚洲红杏| 91麻豆免费观看| 国产精品无圣光一区二区| 日韩av电影一区| 欧美系列日韩一区| 国产精品久线观看视频| 麻豆精品视频在线观看视频| 欧美性一区二区| 亚洲欧美一区二区三区极速播放 | 狠狠色丁香久久婷婷综合_中| 日本高清视频一区二区| 中文字幕一区二区三区视频 | 国产欧美一区二区精品性| 青青草成人在线观看| 欧美日韩精品一区视频| 一区二区成人在线视频| 99热这里都是精品| 国产人久久人人人人爽| 亚洲乱码中文字幕| 欧美中文一区二区三区| 五月天精品一区二区三区| 欧美一级日韩不卡播放免费| 久久99久久99精品免视看婷婷| 欧美色网站导航| 97精品久久久久中文字幕| 99在线精品一区二区三区| 2024国产精品| 国产一区二区三区久久久| 91精品欧美综合在线观看最新 | 久久久久国产成人精品亚洲午夜| 日韩精品欧美精品| 6080日韩午夜伦伦午夜伦|