2021-08-15 10:42:31 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Pomme.h"
|
|
|
|
#include "SoundMixer/cmixer.h"
|
|
|
|
|
|
|
|
enum ApplyParametersMask
|
|
|
|
{
|
|
|
|
kApplyParameters_PanAndGain = 1 << 0,
|
|
|
|
kApplyParameters_Pitch = 1 << 1,
|
|
|
|
kApplyParameters_Loop = 1 << 2,
|
|
|
|
kApplyParameters_Interpolation = 1 << 3,
|
|
|
|
kApplyParameters_All = 0xFFFFFFFF
|
|
|
|
};
|
|
|
|
|
|
|
|
struct ChannelImpl
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
ChannelImpl* prev;
|
|
|
|
ChannelImpl* next;
|
|
|
|
|
|
|
|
public:
|
|
|
|
// Pointer to application-facing interface
|
|
|
|
SndChannelPtr macChannel;
|
|
|
|
|
|
|
|
bool macChannelStructAllocatedByPomme;
|
|
|
|
cmixer::WavStream source;
|
|
|
|
|
|
|
|
// Parameters coming from Mac sound commands, passed back to cmixer source
|
|
|
|
double pan;
|
|
|
|
double gain;
|
|
|
|
Byte baseNote;
|
|
|
|
Byte playbackNote;
|
|
|
|
double pitchMult;
|
|
|
|
bool loop;
|
|
|
|
bool interpolate;
|
|
|
|
|
|
|
|
bool temporaryPause = false;
|
|
|
|
|
|
|
|
ChannelImpl(SndChannelPtr _macChannel, bool transferMacChannelOwnership);
|
|
|
|
|
|
|
|
~ChannelImpl();
|
|
|
|
|
|
|
|
void Recycle();
|
|
|
|
|
|
|
|
void SetInitializationParameters(long initBits);
|
|
|
|
|
2022-05-15 09:35:20 +00:00
|
|
|
void ApplyParametersToSource(int mask);
|
2021-08-15 10:42:31 +00:00
|
|
|
|
|
|
|
inline ChannelImpl* GetPrev() const
|
|
|
|
{
|
|
|
|
return prev;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline ChannelImpl* GetNext() const
|
|
|
|
{
|
|
|
|
return next;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetPrev(ChannelImpl* newPrev)
|
|
|
|
{
|
|
|
|
prev = newPrev;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void SetNext(ChannelImpl* newNext)
|
|
|
|
{
|
|
|
|
next = newNext;
|
|
|
|
macChannel->nextChan = newNext ? newNext->macChannel : nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Link();
|
|
|
|
|
|
|
|
void Unlink();
|
|
|
|
};
|