Files
2026-06-01 12:46:52 +02:00

176 lines
4.5 KiB
C++

#pragma once
#include "input_xwav.h" //ps : wave input 스트림 새로만든것.
//ps추가
namespace xaudiere
{// 네임스페이스 ********************************************************************************************************************
typedef unsigned __int8 u8;
typedef signed __int8 s8;
typedef unsigned __int16 u16;
typedef signed __int16 s16;
typedef unsigned __int32 u32;
typedef signed __int32 s32;
typedef unsigned __int64 u64;
typedef signed __int64 s64;
struct TInOutStream
{
xaudiere::BasicSource* m_pInput;
audiere::OutputStreamPtr m_OutPtr;
public:
TInOutStream()
{
m_pInput = NULL;
}
~TInOutStream()
{
if( (m_OutPtr.get() != NULL) && (m_OutPtr.get()->isPlaying()))
{
m_OutPtr->stop(); // ps: 오디에르 엔진 내부적으로 m_pOutPut 이 m_pInput 을 가지고 있기때문에
// m_pOutPut 만 없애주면 오디에르에서 m_pInput 알아서 없앤다.
}
}
void operator=(TInOutStream *pInOut)
{
m_pInput = pInOut->m_pInput;
m_OutPtr = pInOut->m_OutPtr;
}
virtual void ADR_CALL play() { m_OutPtr->play();}
virtual void ADR_CALL stop() { m_OutPtr->stop();}
virtual bool ADR_CALL isPlaying() { return m_OutPtr->isPlaying();}
virtual void ADR_CALL reset() { m_OutPtr->reset();}
virtual void ADR_CALL setRepeat(bool repeat) { m_OutPtr->setRepeat(repeat);}
virtual bool ADR_CALL getRepeat() { return m_OutPtr->getRepeat();}
virtual void ADR_CALL setVolume(float volume) { m_OutPtr->setVolume(volume);}
virtual float ADR_CALL getVolume() { return m_OutPtr->getVolume();}
virtual void ADR_CALL setPan(float pan) { m_OutPtr->setPan(pan);}
virtual float ADR_CALL getPan() { return m_OutPtr->getPan();}
virtual void ADR_CALL setPitchShift(float shift){ m_OutPtr->setPitchShift(shift);}
virtual float ADR_CALL getPitchShift() { return m_OutPtr->getPitchShift();}
virtual bool ADR_CALL isSeekable() { return m_OutPtr->isSeekable();}
virtual int ADR_CALL getLength() { return m_OutPtr->getLength();}
virtual void ADR_CALL setPosition(int position) { m_OutPtr->setPosition(position);}
virtual int ADR_CALL getPosition() { return m_OutPtr->getPosition();}
virtual void SetLowPassFrequency(int frequency) { m_pInput->SetLowPassFrequency(frequency);}
virtual int GetLowPassFrequency() { return m_pInput->GetLowPassFrequency(); }
};
template<typename T>
static T* TryInputStream(const audiere::FilePtr& file)
{
// initialize should never close the file
T* source = new T();
if (source->initialize(file))
{
return source;
}
else
{
delete source;
return 0;
}
}
inline u16 read16_le(const u8* b)
{
return b[0] + (b[1] << 8);
}
inline u16 read16_be(const u8* b)
{
return (b[0] << 8) + b[1];
}
inline u32 read32_le(const u8* b)
{
return read16_le(b) + (read16_le(b + 2) << 16);
}
inline u32 read32_be(const u8* b)
{
return (read16_be(b) << 16) + read16_be(b + 2);
}
//해주기 1.
inline xaudiere::BasicSource* OpenSampleSource( const audiere::FilePtr& file, audiere::FileFormat file_format)
{
//해주기 1. 여기서 wav파일인지 mp3파일인지 구분하는 코드집어넣기
return TryInputStream< WAVInputStream>(file);
}
inline xaudiere::TInOutStream* OpenSound( const audiere::AudioDevicePtr& device, const audiere::FilePtr& file,
bool streaming = false, audiere::FileFormat file_format = audiere::FF_AUTODETECT)
{
TInOutStream *ptInOutStream = new TInOutStream;
if( streaming == false) //Buffer이면 오디에르 라이브러리 만들어서 open한다.
{
ptInOutStream->m_pInput = NULL;
ptInOutStream->m_OutPtr = audiere::OpenSound( device, file, false, file_format);
}
else if( streaming == true) // 스트림으로 만드는것이라면(로우필터사용하려면 스트림으로 만들어야됨) .. (스트림 wav파일만지원)
{
ptInOutStream->m_pInput = xaudiere::OpenSampleSource(file, file_format);
ptInOutStream->m_OutPtr = audiere::OpenSound(device, ptInOutStream->m_pInput, streaming);
}
if( ptInOutStream->m_OutPtr == NULL )
{
delete ptInOutStream;
return NULL;
}
return ptInOutStream;
}
}// 네임스페이스 ********************************************************************************************************************