207 lines
4.7 KiB
C
207 lines
4.7 KiB
C
|
|
#pragma once
|
|||
|
|
#include "SoundManager.h"
|
|||
|
|
|
|||
|
|
//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
|
|||
|
|
extern std::map<size_t, SoundPtr>SoundActorPtrMapObject;
|
|||
|
|
//<2F><>Ƶ<EFBFBD><C6B5>ԴMap
|
|||
|
|
extern std::map<std::string, Sound*>SoundRecObject;
|
|||
|
|
//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static SoundManagerPtr SoundEffectObject = new SoundManager();
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Sound <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Create_Sound(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
const SQChar* OutPutBuffer;
|
|||
|
|
sq_getstring(v, 2, &OutPutBuffer);
|
|||
|
|
|
|||
|
|
size_t Id = SoundEffectObject->Save_Load((char*)OutPutBuffer);
|
|||
|
|
|
|||
|
|
sq_pushinteger(v, Id);
|
|||
|
|
//if (SoundRecObject.count((char*)OutPutBuffer)) {
|
|||
|
|
// sq_pushuserpointer(v, SoundRecObject[(char*)OutPutBuffer]);
|
|||
|
|
//}
|
|||
|
|
//else {
|
|||
|
|
// Sound* Sound_Obj = new Sound();
|
|||
|
|
// Sound_Obj->Load((char*)OutPutBuffer);
|
|||
|
|
|
|||
|
|
// sq_pushuserpointer(v, Sound_Obj);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Sound <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Set_Sound_Task(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SQInteger SoundId;
|
|||
|
|
sq_getinteger(v, 2, &SoundId);
|
|||
|
|
|
|||
|
|
|
|||
|
|
SQInteger Type;
|
|||
|
|
sq_getinteger(v, 3, &Type);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
if (Type == 0) {
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> -1 Ϊ<><CEAA><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
|
|||
|
|
SQInteger Count;
|
|||
|
|
sq_getinteger(v, 4, &Count);
|
|||
|
|
|
|||
|
|
SoundPtr Sound_Obj = SoundEffectObject->GetSaveSound(SoundId);
|
|||
|
|
Sound_Obj->Play(Count);
|
|||
|
|
}
|
|||
|
|
//<2F><>ͣ
|
|||
|
|
else if (Type == 1) {
|
|||
|
|
SoundPtr Sound_Obj = SoundEffectObject->GetSaveSound(SoundId);
|
|||
|
|
Sound_Obj->Pause();
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
else if (Type == 2) {
|
|||
|
|
SoundPtr Sound_Obj = SoundEffectObject->GetSaveSound(SoundId);
|
|||
|
|
Sound_Obj->Resume();
|
|||
|
|
}
|
|||
|
|
//<2F>ر<EFBFBD>
|
|||
|
|
else if (Type == 3) {
|
|||
|
|
SoundEffectObject->ReleaseSaveSoundByIndex(SoundId);
|
|||
|
|
//SoundPtr Sound_Obj = SoundEffectObject->GetSaveSound(SoundId);
|
|||
|
|
//Sound_Obj->Close();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Sound <20><>ȡ<EFBFBD><C8A1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Get_Sound_Volume(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SQInteger SoundId;
|
|||
|
|
sq_getinteger(v, 2, &SoundId);
|
|||
|
|
|
|||
|
|
SoundPtr Sound_Obj = SoundEffectObject->GetSaveSound(SoundId);
|
|||
|
|
|
|||
|
|
sq_pushfloat(v, Sound_Obj->GetVolume());
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Sound <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Set_Sound_Volume(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SQInteger SoundId;
|
|||
|
|
sq_getinteger(v, 2, &SoundId);
|
|||
|
|
|
|||
|
|
SoundPtr Sound_Obj = SoundEffectObject->GetSaveSound(SoundId);
|
|||
|
|
|
|||
|
|
SQFloat VolumeCalue;
|
|||
|
|
sq_getfloat(v, 3, &VolumeCalue);
|
|||
|
|
|
|||
|
|
Sound_Obj->SetVolume(VolumeCalue);
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Sound <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
static SQInteger Squirrel_PlaySoundEffect(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const SQChar* Name;
|
|||
|
|
sq_getstring(v, 2, &Name);
|
|||
|
|
|
|||
|
|
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
char* Namebuf = SquirrelClassEx::SquirrelU2W((char*)Name);
|
|||
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
std::string SoundName = Namebuf;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
delete[]Namebuf;
|
|||
|
|
|
|||
|
|
if (SoundName.find(".ogg") != std::string::npos || SoundName.find(".mp3") != std::string::npos) {
|
|||
|
|
size_t Id = SoundEffectObject->Load(SoundName);
|
|||
|
|
SoundEffectObject->Play(Id, 0);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
if (GameAudioList.count(SoundName)) {
|
|||
|
|
size_t Id = SoundEffectObject->Load(GameAudioList[SoundName]);
|
|||
|
|
SoundEffectObject->Play(Id, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
SoundPtr Sound_Obj = new Sound();
|
|||
|
|
Sound_Obj->Load(SoundName);
|
|||
|
|
|
|||
|
|
if (Top == 3) {
|
|||
|
|
SQFloat Volume;
|
|||
|
|
sq_getfloat(v, 3, &Volume);
|
|||
|
|
Sound_Obj->SetVolume(Volume);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Sound_Obj->Play();
|
|||
|
|
|
|||
|
|
SoundEffectMap[Sound_Obj->GetObjectID()] = Sound_Obj;
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Sound <20>ͷ<EFBFBD><CDB7><EFBFBD>ʱ<EFBFBD><CAB1>Ч
|
|||
|
|
static SQInteger Squirrel_ReleseSoundEffect(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>¼ܹ<C2BC><DCB9>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//Map<size_t, SoundPtr> S_M = SoundEffectObject->GetAllSound();
|
|||
|
|
|
|||
|
|
|
|||
|
|
//for (auto it = SoundEffectVector.begin(); it != SoundEffectVector.end(); ++it) {
|
|||
|
|
// size_t id = *it;
|
|||
|
|
// if (!SoundEffectObject->IsPlaying(id)) {
|
|||
|
|
// //SoundPtr Sound_Obj = SoundEffectObject->GetSound(id);
|
|||
|
|
// //Sound_Obj->Close();
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
//SoundEffectObject->ClearCache();
|
|||
|
|
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|