diff --git a/CocosDenshion/bada/MyAudioOutListener.cpp b/CocosDenshion/bada/MyAudioOutListener.cpp deleted file mode 100644 index 45ea5ce945..0000000000 --- a/CocosDenshion/bada/MyAudioOutListener.cpp +++ /dev/null @@ -1,247 +0,0 @@ -/* - * MyAudioOutListener.cpp - * - * Created on: 2011-1-21 - * Author: Administrator - */ - -#include "MyAudioOutListener.h" -#include -#include "WavHead.h" - - -using namespace Osp::Base; -using namespace Osp::Base::Collection; -using namespace Osp::Media; - -#define MAX_BUFFER_SIZE 2520 // 840 byte - -MyAudioOutEventListener::MyAudioOutEventListener() -{ - __totalWriteBufferNum = 0; - __playCount = 0; - __pDataArray = null; - __pAudioOut = null; - __pPcmBuffer = null; - __pcmLen = 0; -} - -MyAudioOutEventListener::~MyAudioOutEventListener() -{ - AppLog("dealoc MyAudioOutEventListener"); - - if (__pDataArray != null) - { - __pDataArray->RemoveAll(true); - delete __pDataArray; - __pDataArray = null; - } - if (__pAudioOut != null) - { - __pAudioOut->Stop(); - __pAudioOut->Unprepare(); - delete __pAudioOut; - __pAudioOut = null; - } - if (__pPcmBuffer != null) - { - delete[] __pPcmBuffer; - __pPcmBuffer = null; - } -} - -result MyAudioOutEventListener::Construct(const char* pszFilePath) -{ - __pAudioOut = new AudioOut(); - __pAudioOut->Construct(*this); - WAVE wavHead; - FILE* fp = fopen(pszFilePath, "rb"); - if (fp != NULL) - { - if (GetWaveHeadInfo(fp, wavHead)) - { - __pPcmBuffer = new char[wavHead.SubChunk2Size]; - __pcmLen = wavHead.SubChunk2Size; - fread(__pPcmBuffer, __pcmLen, 1, fp); - fclose(fp); - } - else - { - fclose(fp); - return E_FAILURE; - } - } - - __pDataArray = new ArrayList(); - - // AudioOut Preparation - AudioSampleType audioSampleType; - AudioChannelType audioChannelType; - int audioSampleRate = 0; - - if (wavHead.BitsPerSample == 8) - { - audioSampleType = AUDIO_TYPE_PCM_U8; - - } - else if (wavHead.BitsPerSample == 16) - { - audioSampleType = AUDIO_TYPE_PCM_S16_LE; - } - else - { - audioSampleType = AUDIO_TYPE_NONE; - } - - if (wavHead.NumChannels == 1) - { - audioChannelType = AUDIO_CHANNEL_TYPE_MONO; - } - else if (wavHead.NumChannels == 2) - { - audioChannelType = AUDIO_CHANNEL_TYPE_STEREO; - } - else - { - audioChannelType = AUDIO_CHANNEL_TYPE_NONE; - } - - audioSampleRate = wavHead.SampleRate; - - result r = __pAudioOut->Prepare(audioSampleType, audioChannelType, audioSampleRate); - AppLog("The audio out prepare result is %s", GetErrorMessage(r)); - AppLogDebug("The audio out prepare result in ApplogDebug message"); - - ByteBuffer* pTotalData = null; - pTotalData = new ByteBuffer(); - pTotalData->Construct(__pcmLen); - pTotalData->SetArray((byte*)__pPcmBuffer, 0, __pcmLen); - pTotalData->Flip(); - - int totalSize = pTotalData->GetLimit(); - int currentPosition = 0; - ByteBuffer* pItem = null; - byte givenByte; - - // Binding data buffers into the array - if(totalSize > MAX_BUFFER_SIZE) - { - do - { - pItem = new ByteBuffer(); - pItem->Construct(MAX_BUFFER_SIZE); - - for(int i = 0; i < MAX_BUFFER_SIZE; i++) - { - // Read it per 1 byte - pTotalData->GetByte(currentPosition++,givenByte); - pItem->SetByte(givenByte); - if(currentPosition == totalSize ) - break; - } - __pDataArray->Add(*pItem); - - }while(currentPosition < totalSize); - __totalWriteBufferNum = __pDataArray->GetCount(); - } - else - { - pItem = new ByteBuffer(); - pItem->Construct(totalSize); - for(int i = 0; i < totalSize; i++) - { - // Read it per 1 byte - pTotalData->GetByte(i, givenByte); - pItem->SetByte(givenByte); - } - __pDataArray->Add(*pItem); - __totalWriteBufferNum = __pDataArray->GetCount(); - // non-case for now, may the size of test file is bigger than MAX size - } - delete pTotalData; - pTotalData = null; - - // Start playing until the end of the array -// __pAudioOut->Start(); - - return r; -} - -void MyAudioOutEventListener::play() -{ - if (__pAudioOut->GetState() == AUDIOOUT_STATE_PLAYING) - { - __pAudioOut->Reset(); - } - - ByteBuffer* pWriteBuffer = null; - for (int i = 0; i < __totalWriteBufferNum; i++) - { - pWriteBuffer = static_cast(__pDataArray->GetAt(i)); - __pAudioOut->WriteBuffer(*pWriteBuffer); - } - __pAudioOut->Start(); - __playCount++; -} - -void MyAudioOutEventListener::stop() -{ - __pAudioOut->Stop(); -} - -void MyAudioOutEventListener::setVolume(int volume) -{ - __pAudioOut->SetVolume(volume); -} - -/** -* Notifies when the device has written a buffer completely. -* -* @param[in] src A pointer to the AudioOut instance that fired the event -*/ -void MyAudioOutEventListener::OnAudioOutBufferEndReached(Osp::Media::AudioOut& src) -{ - result r = E_SUCCESS; - - if( __playCount == __totalWriteBufferNum) - { - // The End of array, it's time to finish - //cjh r = src.Unprepare(); - - //Reset Variable - __playCount = 0; - //cjh __totalWriteBufferNum = 0; - - }else - { - //Not yet reached the end of array - //Write the next buffer - __playCount++; -// ByteBuffer* pWriteBuffer = static_cast(__pDataArray->GetAt(__playCount++)); -// r = src.WriteBuffer(*pWriteBuffer); - } -} - -/** - * Notifies that the output device is being interrupted by a task of higher priority than AudioOut. - * - * @param[in] src A pointer to the AudioOut instance that fired the event - */ -void MyAudioOutEventListener::OnAudioOutInterrupted(Osp::Media::AudioOut& src) -{ - AppLog("OnAudioOutInterrupted"); - if (__pAudioOut->GetState() == AUDIOOUT_STATE_PLAYING) - { - __pAudioOut->Stop(); - } -} - -/** - * Notifies that the interrupted output device has been released. - * - * @param[in] src A pointer to the AudioOut instance that fired the event - */ -void MyAudioOutEventListener::OnAudioOutReleased(Osp::Media::AudioOut& src) -{ - AppLog("OnAudioOutReleased"); -} diff --git a/CocosDenshion/bada/MyAudioOutListener.h b/CocosDenshion/bada/MyAudioOutListener.h deleted file mode 100644 index 7c66fa5065..0000000000 --- a/CocosDenshion/bada/MyAudioOutListener.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * MyAudioOutListener.h - * - * Created on: 2011-1-21 - * Author: Administrator - */ - -#ifndef MYAUDIOOUTLISTENER_H_ -#define MYAUDIOOUTLISTENER_H_ - -#include -#include - - - -class MyAudioOutEventListener : - public Osp::Media::IAudioOutEventListener -{ - -public: - MyAudioOutEventListener(); - - virtual ~MyAudioOutEventListener(); - - result Construct(const char* pszFilePath); - - void play(); - void stop(); - void setVolume(int volume); - /** - * Notifies when the device has written a buffer completely. - * - * @param[in] src A pointer to the AudioOut instance that fired the event - */ - virtual void OnAudioOutBufferEndReached(Osp::Media::AudioOut& src); - /** - * Notifies that the output device is being interrupted by a task of higher priority than AudioOut. - * - * @param[in] src A pointer to the AudioOut instance that fired the event - */ - virtual void OnAudioOutInterrupted(Osp::Media::AudioOut& src); - - /** - * Notifies that the interrupted output device has been released. - * - * @param[in] src A pointer to the AudioOut instance that fired the event - */ - virtual void OnAudioOutReleased(Osp::Media::AudioOut& src); - -private: - int __totalWriteBufferNum; - int __playCount; - Osp::Base::Collection::ArrayList* __pDataArray; - Osp::Media::AudioOut* __pAudioOut; - char* __pPcmBuffer; - int __pcmLen; -}; - -#endif /* MYAUDIOOUTLISTENER_H_ */ diff --git a/CocosDenshion/bada/SimpleAudioEngine.cpp b/CocosDenshion/bada/SimpleAudioEngine.cpp index e637cb53c0..deef3ef94c 100644 --- a/CocosDenshion/bada/SimpleAudioEngine.cpp +++ b/CocosDenshion/bada/SimpleAudioEngine.cpp @@ -1,6 +1,4 @@ #include "SimpleAudioEngine.h" -#include "MyAudioOutListener.h" - #include #include #include @@ -195,7 +193,7 @@ static bool openMediaPlayer(Player*& pPlayer, const char* pszFilePath, bool bLoo r = pPlayer->OpenFile(strFilePath.c_str(), false); if (IsFailed(r)) { - AppLog("Openfile fails\n"); + AppLog("Open (%s) fails\n", strFilePath.c_str()); delete pPlayer; pPlayer = NULL; break; @@ -357,6 +355,10 @@ void SimpleAudioEngine::setBackgroundMusicVolume(float volume) if (s_pBackPlayer) { s_pBackPlayer->SetVolume((int) (volume * 99)); + if (volume > 0.0f && s_pBackPlayer->GetVolume() == 0) + { + s_pBackPlayer->SetVolume(1); + } } AppLog("volume = %f", volume); s_fBackgroundMusicVolume = volume; @@ -394,6 +396,11 @@ unsigned int SimpleAudioEngine::playEffect(const char* pszFilePath, bool bLoop/* if (p != s_List.end()) { p->second->SetVolume((int) (s_fEffectsVolume * 99)); + if (s_fEffectsVolume > 0.0f && p->second->GetVolume() == 0) + { + p->second->SetVolume(1); + } + if (PLAYER_STATE_PLAYING == p->second->GetState()) { r = p->second->Stop(); diff --git a/CocosDenshion/bada/WavHead.cpp b/CocosDenshion/bada/WavHead.cpp deleted file mode 100644 index f42c89020e..0000000000 --- a/CocosDenshion/bada/WavHead.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * WaveHead.cpp - * - * Created on: 2011-1-21 - * Author: Administrator - */ - -#include "WavHead.h" -#include -#include - -bool GetWaveHeadInfo(FILE*stream, WAVE& outWavHead) -{ - char szTmp[100] = {0}; - int i = 0; - -// FILE *stream; - -// if((stream = fopen(fileName,"rb"))==NULL) -// { -// AppLog("ERROR:can't open the file!"); -// -// return false; -// } - /* - - * 读wav文件的各个field - - */ - - fread(outWavHead.ChunkID, 4, 1, stream); - - outWavHead.ChunkID[4] = (char)0; - - fread(&(outWavHead.ChunkSize),4, 1, stream); - - fread(outWavHead.Format, 4, 1, stream); - - outWavHead.Format[4] = (char)0; - - fread(outWavHead.SubChunk1ID, 4, 1, stream); - - outWavHead.SubChunk1ID[4] = (char)0; - - fread(&(outWavHead.SubChunk1Size), 4, 1, stream); - - fread(&(outWavHead.AudioFormat), 2, 1, stream); - - fread(&(outWavHead.NumChannels), 2, 1, stream); - - fread(&(outWavHead.SampleRate), 4, 1, stream); - - fread(&(outWavHead.ByteRate), 4, 1, stream); - - fread(&(outWavHead.BlockAlign), 2, 1, stream); - - fread(&(outWavHead.BitsPerSample), 2, 1, stream); - - fseek(stream, 0, SEEK_SET); - - - fread(szTmp, 64, 1, stream); - - for (i = 0; i <= 60; i++) - { - if (szTmp[i] == 'd' && szTmp[i+1] == 'a' && szTmp[i+2] == 't' && szTmp[i+3] == 'a') - { - break; - } - } - - fseek(stream, i, SEEK_SET); - - fread(outWavHead.SubChunk2ID, 4, 1, stream); - - outWavHead.SubChunk2ID[4] = (char)0; - - fread(&(outWavHead.SubChunk2Size), 4, 1, stream); - - return true; -} diff --git a/CocosDenshion/bada/WavHead.h b/CocosDenshion/bada/WavHead.h deleted file mode 100644 index 68be0714fd..0000000000 --- a/CocosDenshion/bada/WavHead.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * WavHead.h - * - * Created on: 2011-1-21 - * Author: Administrator - */ - -#ifndef WAVHEAD_H_ -#define WAVHEAD_H_ - -#include -/* WAVE文件头 */ - -typedef struct wave_tag - -{ - - char ChunkID[5]; // "RIFF"标志 - - unsigned long int ChunkSize; // 文件长度(WAVE文件的大小, 不含前8个字节) - - char Format[5]; // "WAVE"标志 - - - - char SubChunk1ID[5];// "fmt "标志 - - unsigned long int SubChunk1Size; /* - - * 过渡字节(不定) - - * 16 for PCM. This is the size of the rest of the - - * Subchunk which follows this number. - - */ - - unsigned short int AudioFormat; /* - - * 格式类别(10H为PCM格式的声音数据) - - * PCM=1 (i.e. Linear quantization) - - * Values other than 1 indicate some form of compression. - - */ - - unsigned short int NumChannels; // 通道数(单声道为1, 双声道为2) - - //unsigned short int SampleRate; // 采样率(每秒样本数), 表示每个通道的播放速度 - - unsigned long int SampleRate; // 采样率(每秒样本数), 表示每个通道的播放速度 - - unsigned long int ByteRate; /* - - * 波形音频数据传输速率, 其值为:通道数*每秒数据位数*每样本的数据位数/8 - - * 播放软件可以利用该值估计缓冲区大小 - - */ - - unsigned short int BlockAlign; /* - - * 每样本的数据位数(按字节算), 其值为:通道数*每样本的数据位值/8, 播放 - - * 软件需要一次处理多个该值大小的字节数据, 以便将其值用于缓冲区的调整 - - */ - - unsigned short int BitsPerSample; /* - - * 每样本的数据位数, 表示每个声道中各个样本的数据位数. 如果有多个声道, - - * 对每个声道而言, 样本大小都一样 - - */ - - - - char SubChunk2ID[5]; // 数据标记"data" - - unsigned long int SubChunk2Size; // 语音数据的长度 - -} WAVE; - -/* - * pBuffer内部申请空间,需要由外部释放 - */ - -bool GetWaveHeadInfo(FILE*stream, WAVE& outWavHead); - -#endif /* WAVHEAD_H_ */