mirror of
https://github.com/TASEmulators/desmume
synced 2025-10-05 16:22:49 +02:00
Cocoa Port: Finish refactoring the audio output code. (Related to commit 3b07d28.)
This commit is contained in:
@@ -20,83 +20,258 @@
|
||||
#include "ClientExecutionControl.h"
|
||||
#include "cocoa_globals.h"
|
||||
|
||||
#include "../../NDSSystem.h"
|
||||
|
||||
// Global sound playback manager
|
||||
static ClientAudioOutputEngine *_audioInterface = NULL;
|
||||
|
||||
int SPUInitCallback(int buffer_size)
|
||||
{
|
||||
_audioInterface->Start();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SPUDeInitCallback()
|
||||
{
|
||||
_audioInterface->Stop();
|
||||
}
|
||||
|
||||
void SPUUpdateAudioCallback(s16 *buffer, u32 num_samples)
|
||||
{
|
||||
_audioInterface->WriteToBuffer(buffer, (size_t)num_samples);
|
||||
}
|
||||
|
||||
u32 SPUGetAudioSpaceCallback()
|
||||
{
|
||||
return (u32)_audioInterface->GetAvailableSamples();
|
||||
}
|
||||
|
||||
void SPUMuteAudioCallback()
|
||||
{
|
||||
_audioInterface->SetMute(true);
|
||||
}
|
||||
|
||||
void SPUUnMuteAudioCallback()
|
||||
{
|
||||
_audioInterface->SetMute(false);
|
||||
}
|
||||
|
||||
void SPUSetVolumeCallback(int volume)
|
||||
{
|
||||
_audioInterface->SetVolume(volume);
|
||||
}
|
||||
|
||||
void SPUClearBufferCallback()
|
||||
{
|
||||
_audioInterface->ClearBuffer();
|
||||
}
|
||||
|
||||
void SPUFetchSamplesCallback(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer)
|
||||
{
|
||||
_audioInterface->HandleFetchSamples(sampleBuffer, sampleCount, synchMode, theSynchronizer);
|
||||
}
|
||||
|
||||
size_t SPUPostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer)
|
||||
{
|
||||
return _audioInterface->HandlePostProcessSamples(postProcessBuffer, requestedSampleCount, synchMode, theSynchronizer);
|
||||
}
|
||||
|
||||
SoundInterface_struct *SNDCoreList[] = {
|
||||
&SNDDummy, // Index 0 must always be the dummy engine, since this is our fallback in case something goes wrong.
|
||||
NULL, // Index 1 is reserved for the client audio output. It is dynamically assigned whenever the audio output engine is changed.
|
||||
NULL // The last entry must always be NULL, representing the end of the list.
|
||||
};
|
||||
|
||||
ClientAudioOutputEngine::ClientAudioOutputEngine()
|
||||
{
|
||||
_engineID = SNDDummy.id;
|
||||
_engineString = SNDDummy.Name;
|
||||
_bufferSizeForSPUInit = 0;
|
||||
_isPaused = true;
|
||||
}
|
||||
|
||||
ClientAudioOutputEngine::~ClientAudioOutputEngine()
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
int ClientAudioOutputEngine::GetEngineID() const
|
||||
{
|
||||
return this->_engineID;
|
||||
}
|
||||
|
||||
const char* ClientAudioOutputEngine::GetEngineString() const
|
||||
{
|
||||
return this->_engineString.c_str();
|
||||
}
|
||||
|
||||
int ClientAudioOutputEngine::GetBufferSizeForSPUInit() const
|
||||
{
|
||||
return this->_bufferSizeForSPUInit;
|
||||
}
|
||||
|
||||
bool ClientAudioOutputEngine::IsPaused() const
|
||||
{
|
||||
return this->_isPaused;
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::Start()
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::Stop()
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::SetMute(bool theState)
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::SetPause(bool theState)
|
||||
{
|
||||
this->_isPaused = theState;
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::SetVolume(int volume)
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
size_t ClientAudioOutputEngine::GetAvailableSamples() const
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::WriteToBuffer(const void *inSamples, size_t numberSampleFrames)
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::ClearBuffer()
|
||||
{
|
||||
// Do nothing. This is implementation dependent.
|
||||
}
|
||||
|
||||
void ClientAudioOutputEngine::HandleFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer)
|
||||
{
|
||||
SPU_DefaultFetchSamples(sampleBuffer, sampleCount, synchMode, theSynchronizer);
|
||||
}
|
||||
|
||||
size_t ClientAudioOutputEngine::HandlePostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer)
|
||||
{
|
||||
return SPU_DefaultPostProcessSamples(postProcessBuffer, requestedSampleCount, synchMode, theSynchronizer);
|
||||
}
|
||||
|
||||
ClientAudioOutput::ClientAudioOutput()
|
||||
{
|
||||
_platformId = PlatformTypeID_Any;
|
||||
_typeId = OutputTypeID_Generic | OutputTypeID_Audio;
|
||||
|
||||
_dummyAudioEngine = new DummyAudioOutputEngine;
|
||||
if (_audioInterface == NULL)
|
||||
{
|
||||
_audioInterface = _dummyAudioEngine;
|
||||
}
|
||||
|
||||
_audioEngine = _dummyAudioEngine;
|
||||
_spuCallbackStruct.id = _audioEngine->GetEngineID();
|
||||
_spuCallbackStruct.Name = _audioEngine->GetEngineString();
|
||||
_spuCallbackStruct.Init = &SPUInitCallback;
|
||||
_spuCallbackStruct.DeInit = &SPUDeInitCallback;
|
||||
_spuCallbackStruct.UpdateAudio = &SPUUpdateAudioCallback;
|
||||
_spuCallbackStruct.GetAudioSpace = &SPUGetAudioSpaceCallback;
|
||||
_spuCallbackStruct.MuteAudio = &SPUMuteAudioCallback;
|
||||
_spuCallbackStruct.UnMuteAudio = &SPUUnMuteAudioCallback;
|
||||
_spuCallbackStruct.SetVolume = &SPUSetVolumeCallback;
|
||||
_spuCallbackStruct.ClearBuffer = &SPUClearBufferCallback;
|
||||
_spuCallbackStruct.FetchSamples = &SPUFetchSamplesCallback;
|
||||
_spuCallbackStruct.PostProcessSamples = &SPUPostProcessSamples;
|
||||
|
||||
_volume = MAX_VOLUME;
|
||||
_engineID = 0;
|
||||
_spuAdvancedLogic = true;
|
||||
_interpolationModeID = SPUInterpolation_Cosine;
|
||||
_spuInterpolationModeString = "Cosine";
|
||||
_syncModeID = ESynchMode_Synchronous;
|
||||
_syncMethodID = ESynchMethod_N;
|
||||
_spuSyncMethodString = "\"N\" Sync Method";
|
||||
_isMuted = false;
|
||||
_filterID = 0;
|
||||
|
||||
_engineString = "None";
|
||||
_spuInterpolationModeString = "Cosine";
|
||||
_spuSyncMethodString = "N";
|
||||
|
||||
pthread_mutex_init(&_mutexEngine, NULL);
|
||||
pthread_mutex_init(&_mutexVolume, NULL);
|
||||
pthread_mutex_init(&_mutexSpuAdvancedLogic, NULL);
|
||||
pthread_mutex_init(&_mutexSpuInterpolationMode, NULL);
|
||||
pthread_mutex_init(&_mutexSpuSyncMethod, NULL);
|
||||
_mutexEngine = slock_new();
|
||||
_mutexVolume = slock_new();
|
||||
_mutexSpuAdvancedLogic = slock_new();
|
||||
_mutexSpuInterpolationMode = slock_new();
|
||||
_mutexSpuSyncMethod = slock_new();
|
||||
}
|
||||
|
||||
ClientAudioOutput::~ClientAudioOutput()
|
||||
{
|
||||
pthread_mutex_destroy(&this->_mutexEngine);
|
||||
pthread_mutex_destroy(&this->_mutexVolume);
|
||||
pthread_mutex_destroy(&this->_mutexSpuAdvancedLogic);
|
||||
pthread_mutex_destroy(&this->_mutexSpuInterpolationMode);
|
||||
pthread_mutex_destroy(&this->_mutexSpuSyncMethod);
|
||||
delete this->_dummyAudioEngine;
|
||||
this->_dummyAudioEngine = NULL;
|
||||
|
||||
slock_free(this->_mutexEngine);
|
||||
slock_free(this->_mutexVolume);
|
||||
slock_free(this->_mutexSpuAdvancedLogic);
|
||||
slock_free(this->_mutexSpuInterpolationMode);
|
||||
slock_free(this->_mutexSpuSyncMethod);
|
||||
}
|
||||
|
||||
void ClientAudioOutput::SetEngineByID(int engineID)
|
||||
void ClientAudioOutput::SetEngine(ClientAudioOutputEngine *theEngine)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexEngine);
|
||||
this->_engineID = engineID;
|
||||
pthread_mutex_unlock(&this->_mutexEngine);
|
||||
slock_lock(this->_mutexEngine);
|
||||
|
||||
int result = -1;
|
||||
if (theEngine == NULL)
|
||||
{
|
||||
theEngine = this->_dummyAudioEngine;
|
||||
}
|
||||
|
||||
const bool isEnginePaused = this->_audioEngine->IsPaused();
|
||||
this->_audioEngine = theEngine;
|
||||
_audioInterface = theEngine;
|
||||
|
||||
this->_spuCallbackStruct.id = theEngine->GetEngineID();
|
||||
this->_spuCallbackStruct.Name = theEngine->GetEngineString();
|
||||
SNDCoreList[1] = &this->_spuCallbackStruct; // Assign our callback struct to index 1 so that the SPU can find it.
|
||||
|
||||
slock_unlock(this->_mutexEngine);
|
||||
|
||||
pthread_rwlock_wrlock(this->_rwlockProducer);
|
||||
|
||||
if (engineID != SNDCORE_DUMMY)
|
||||
{
|
||||
result = SPU_ChangeSoundCore(engineID, (int)SPU_BUFFER_BYTES);
|
||||
}
|
||||
|
||||
int result = SPU_ChangeSoundCore(theEngine->GetEngineID(), theEngine->GetBufferSizeForSPUInit());
|
||||
if (result == -1)
|
||||
{
|
||||
SPU_ChangeSoundCore(SNDCORE_DUMMY, 0);
|
||||
SPU_ChangeSoundCore(this->_dummyAudioEngine->GetEngineID(), this->_dummyAudioEngine->GetBufferSizeForSPUInit());
|
||||
}
|
||||
|
||||
SoundInterface_struct *soundCore = SPU_SoundCore();
|
||||
if (soundCore != NULL)
|
||||
{
|
||||
this->_engineString = soundCore->Name;
|
||||
}
|
||||
this->_audioEngine->SetPause(isEnginePaused);
|
||||
|
||||
pthread_rwlock_unlock(this->_rwlockProducer);
|
||||
|
||||
pthread_mutex_lock(&this->_mutexVolume);
|
||||
slock_lock(this->_mutexVolume);
|
||||
|
||||
if (!this->_isMuted)
|
||||
{
|
||||
SPU_SetVolume((int)(this->_volume + 0.5f));
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&this->_mutexVolume);
|
||||
slock_unlock(this->_mutexVolume);
|
||||
}
|
||||
|
||||
ClientAudioOutputEngine* ClientAudioOutput::GetEngine()
|
||||
{
|
||||
slock_lock(this->_mutexEngine);
|
||||
ClientAudioOutputEngine *theEngine = this->_audioEngine;
|
||||
slock_unlock(this->_mutexEngine);
|
||||
|
||||
return theEngine;
|
||||
}
|
||||
|
||||
int ClientAudioOutput::GetEngineByID()
|
||||
{
|
||||
return this->_engineID;
|
||||
return this->_audioEngine->GetEngineID();
|
||||
}
|
||||
|
||||
void ClientAudioOutput::SetVolume(float vol)
|
||||
@@ -110,7 +285,7 @@ void ClientAudioOutput::SetVolume(float vol)
|
||||
vol = MAX_VOLUME;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&this->_mutexVolume);
|
||||
slock_lock(this->_mutexVolume);
|
||||
|
||||
this->_volume = vol;
|
||||
|
||||
@@ -119,23 +294,23 @@ void ClientAudioOutput::SetVolume(float vol)
|
||||
SPU_SetVolume((int)(vol + 0.5f));
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&this->_mutexVolume);
|
||||
slock_unlock(this->_mutexVolume);
|
||||
}
|
||||
|
||||
float ClientAudioOutput::GetVolume()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexVolume);
|
||||
slock_lock(this->_mutexVolume);
|
||||
const float vol = this->_volume;
|
||||
pthread_mutex_unlock(&this->_mutexVolume);
|
||||
slock_unlock(this->_mutexVolume);
|
||||
|
||||
return vol;
|
||||
}
|
||||
|
||||
void ClientAudioOutput::SetSPUAdvancedLogic(bool theState)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSpuAdvancedLogic);
|
||||
slock_lock(this->_mutexSpuAdvancedLogic);
|
||||
this->_spuAdvancedLogic = theState;
|
||||
pthread_mutex_unlock(&this->_mutexSpuAdvancedLogic);
|
||||
slock_unlock(this->_mutexSpuAdvancedLogic);
|
||||
|
||||
pthread_rwlock_wrlock(this->_rwlockProducer);
|
||||
CommonSettings.spu_advanced = theState;
|
||||
@@ -149,9 +324,9 @@ bool ClientAudioOutput::GetSPUAdvancedLogic()
|
||||
|
||||
void ClientAudioOutput::SetSPUInterpolationModeByID(SPUInterpolationMode interpModeID)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSpuInterpolationMode);
|
||||
slock_lock(this->_mutexSpuInterpolationMode);
|
||||
this->_interpolationModeID = interpModeID;
|
||||
pthread_mutex_unlock(&this->_mutexSpuInterpolationMode);
|
||||
slock_unlock(this->_mutexSpuInterpolationMode);
|
||||
|
||||
pthread_rwlock_wrlock(this->_rwlockProducer);
|
||||
CommonSettings.spuInterpolationMode = interpModeID;
|
||||
@@ -187,9 +362,9 @@ SPUInterpolationMode ClientAudioOutput::GetSPUInterpolationModeByID()
|
||||
|
||||
void ClientAudioOutput::SetSPUSyncModeByID(ESynchMode syncModeID)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSpuSyncMethod);
|
||||
slock_lock(this->_mutexSpuSyncMethod);
|
||||
this->_syncModeID = syncModeID;
|
||||
pthread_mutex_unlock(&this->_mutexSpuSyncMethod);
|
||||
slock_unlock(this->_mutexSpuSyncMethod);
|
||||
|
||||
pthread_rwlock_wrlock(this->_rwlockProducer);
|
||||
CommonSettings.SPU_sync_mode = syncModeID;
|
||||
@@ -229,9 +404,9 @@ ESynchMode ClientAudioOutput::GetSPUSyncModeByID()
|
||||
|
||||
void ClientAudioOutput::SetSPUSyncMethodByID(ESynchMethod syncMethodID)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSpuSyncMethod);
|
||||
slock_lock(this->_mutexSpuSyncMethod);
|
||||
this->_syncMethodID = syncMethodID;
|
||||
pthread_mutex_unlock(&this->_mutexSpuSyncMethod);
|
||||
slock_unlock(this->_mutexSpuSyncMethod);
|
||||
|
||||
pthread_rwlock_wrlock(this->_rwlockProducer);
|
||||
CommonSettings.SPU_sync_method = syncMethodID;
|
||||
@@ -271,7 +446,7 @@ ESynchMethod ClientAudioOutput::GetSPUSyncMethodByID()
|
||||
|
||||
void ClientAudioOutput::SetMute(bool theState)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexVolume);
|
||||
slock_lock(this->_mutexVolume);
|
||||
|
||||
this->_isMuted = theState;
|
||||
|
||||
@@ -284,31 +459,21 @@ void ClientAudioOutput::SetMute(bool theState)
|
||||
SPU_SetVolume((int)(this->_volume + 0.5f));
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&this->_mutexVolume);
|
||||
slock_unlock(this->_mutexVolume);
|
||||
}
|
||||
|
||||
bool ClientAudioOutput::IsMuted()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexVolume);
|
||||
slock_lock(this->_mutexVolume);
|
||||
const bool isMuted = this->_isMuted;
|
||||
pthread_mutex_unlock(&this->_mutexVolume);
|
||||
slock_unlock(this->_mutexVolume);
|
||||
|
||||
return isMuted;
|
||||
}
|
||||
|
||||
void ClientAudioOutput::SetFilterByID(int filterID)
|
||||
{
|
||||
this->_filterID = filterID;
|
||||
}
|
||||
|
||||
int ClientAudioOutput::GetFilterByID()
|
||||
{
|
||||
return this->_filterID;
|
||||
}
|
||||
|
||||
const char* ClientAudioOutput::GetEngineString()
|
||||
{
|
||||
return this->_engineString.c_str();
|
||||
return this->_audioEngine->GetEngineString();
|
||||
}
|
||||
|
||||
const char* ClientAudioOutput::GetSPUInterpolationModeString()
|
||||
@@ -320,3 +485,9 @@ const char* ClientAudioOutput::GetSPUSyncMethodString()
|
||||
{
|
||||
return this->_spuSyncMethodString.c_str();
|
||||
}
|
||||
|
||||
void ClientAudioOutput::SetIdle(bool theState)
|
||||
{
|
||||
this->_audioEngine->SetPause(theState);
|
||||
ClientEmulationOutput::SetIdle(theState);
|
||||
}
|
||||
|
@@ -20,36 +20,77 @@
|
||||
|
||||
#include "ClientEmulationOutput.h"
|
||||
|
||||
#include "rthreads.h"
|
||||
#include "../../SPU.h"
|
||||
|
||||
|
||||
class ClientAudioOutputEngine
|
||||
{
|
||||
protected:
|
||||
int _engineID;
|
||||
std::string _engineString;
|
||||
int _bufferSizeForSPUInit;
|
||||
bool _isPaused;
|
||||
|
||||
public:
|
||||
ClientAudioOutputEngine();
|
||||
virtual ~ClientAudioOutputEngine();
|
||||
|
||||
int GetEngineID() const;
|
||||
const char* GetEngineString() const;
|
||||
int GetBufferSizeForSPUInit() const;
|
||||
bool IsPaused() const;
|
||||
|
||||
virtual void Start();
|
||||
virtual void Stop();
|
||||
virtual void SetMute(bool theState);
|
||||
virtual void SetPause(bool theState);
|
||||
virtual void SetVolume(int volume);
|
||||
|
||||
virtual size_t GetAvailableSamples() const;
|
||||
virtual void WriteToBuffer(const void *inSamples, size_t numberSampleFrames);
|
||||
virtual void ClearBuffer();
|
||||
|
||||
virtual void HandleFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer);
|
||||
virtual size_t HandlePostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer);
|
||||
|
||||
};
|
||||
|
||||
class DummyAudioOutputEngine : public ClientAudioOutputEngine
|
||||
{
|
||||
public:
|
||||
DummyAudioOutputEngine() {};
|
||||
};
|
||||
|
||||
class ClientAudioOutput : public ClientEmulationOutput
|
||||
{
|
||||
protected:
|
||||
DummyAudioOutputEngine *_dummyAudioEngine;
|
||||
ClientAudioOutputEngine *_audioEngine;
|
||||
SoundInterface_struct _spuCallbackStruct;
|
||||
|
||||
float _volume;
|
||||
int _engineID;
|
||||
bool _spuAdvancedLogic;
|
||||
SPUInterpolationMode _interpolationModeID;
|
||||
ESynchMode _syncModeID;
|
||||
ESynchMethod _syncMethodID;
|
||||
bool _isMuted;
|
||||
int _filterID;
|
||||
|
||||
std::string _engineString;
|
||||
std::string _spuInterpolationModeString;
|
||||
std::string _spuSyncMethodString;
|
||||
|
||||
pthread_mutex_t _mutexEngine;
|
||||
pthread_mutex_t _mutexVolume;
|
||||
pthread_mutex_t _mutexSpuAdvancedLogic;
|
||||
pthread_mutex_t _mutexSpuInterpolationMode;
|
||||
pthread_mutex_t _mutexSpuSyncMethod;
|
||||
slock_t *_mutexEngine;
|
||||
slock_t *_mutexVolume;
|
||||
slock_t *_mutexSpuAdvancedLogic;
|
||||
slock_t *_mutexSpuInterpolationMode;
|
||||
slock_t *_mutexSpuSyncMethod;
|
||||
|
||||
public:
|
||||
ClientAudioOutput();
|
||||
~ClientAudioOutput();
|
||||
|
||||
void SetEngineByID(int engineID);
|
||||
void SetEngine(ClientAudioOutputEngine *theEngine);
|
||||
ClientAudioOutputEngine* GetEngine();
|
||||
int GetEngineByID();
|
||||
|
||||
void SetVolume(float vol);
|
||||
@@ -70,12 +111,12 @@ public:
|
||||
void SetMute(bool theState);
|
||||
bool IsMuted();
|
||||
|
||||
void SetFilterByID(int filterID);
|
||||
int GetFilterByID();
|
||||
|
||||
const char* GetEngineString();
|
||||
const char* GetSPUInterpolationModeString();
|
||||
const char* GetSPUSyncMethodString();
|
||||
|
||||
// ClientEmulationOutput methods
|
||||
virtual void SetIdle(bool theState);
|
||||
};
|
||||
|
||||
#endif // _CLIENT_AUDIO_OUTPUT_H_
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 2017-2022 DeSmuME team
|
||||
Copyright (C) 2017-2025 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#include "ClientAVCaptureObject.h"
|
||||
#include "ClientExecutionControl.h"
|
||||
#include "cocoa_globals.h"
|
||||
|
||||
// Need to include assert.h this way so that GDB stub will work
|
||||
// with an optimized build.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 2017-2021 DeSmuME team
|
||||
Copyright (C) 2017-2025 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -37,7 +37,6 @@
|
||||
#define SPEED_SCALAR_DOUBLE 2.0 // Speed scalar for double execution speed.
|
||||
#define SPEED_SCALAR_MIN 0.005 // Lower limit for the speed multiplier.
|
||||
|
||||
#define DS_FRAMES_PER_SECOND 59.8261 // Number of DS frames per second.
|
||||
#define DS_SECONDS_PER_FRAME (1.0 / DS_FRAMES_PER_SECOND) // The length of time in seconds that, ideally, a frame should be processed within.
|
||||
|
||||
#define FRAME_SKIP_AGGRESSIVENESS 1.0 // Must be a value between 0.0 (inclusive) and positive infinity.
|
||||
|
@@ -213,7 +213,6 @@
|
||||
8C43E81327E3CD0100A35F65 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
8C43E81427E3CD0100A35F65 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
8C43E81527E3CD0100A35F65 /* ftgxval.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA7831BB4EC1000B08C25 /* ftgxval.c */; };
|
||||
8C43E81627E3CD0100A35F65 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
8C43E81727E3CD0100A35F65 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
8C43E81827E3CD0100A35F65 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; };
|
||||
8C43E81927E3CD0100A35F65 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
@@ -525,7 +524,6 @@
|
||||
8C43E97627E3CD4C00A35F65 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
8C43E97727E3CD4C00A35F65 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
8C43E97827E3CD4C00A35F65 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
8C43E97927E3CD4C00A35F65 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
8C43E97A27E3CD4C00A35F65 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
8C43E97B27E3CD4C00A35F65 /* psnames.c in Sources */ = {isa = PBXBuildFile; fileRef = ABA731591BB51A8D00B26147 /* psnames.c */; };
|
||||
8C43E97C27E3CD4C00A35F65 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
@@ -812,7 +810,6 @@
|
||||
8CCD847427E40B730024BDD5 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
8CCD847527E40B730024BDD5 /* Database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABADF1171DEA4C1200A142B1 /* Database.cpp */; };
|
||||
8CCD847627E40B730024BDD5 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
8CCD847727E40B730024BDD5 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
8CCD847827E40B730024BDD5 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
8CCD847927E40B730024BDD5 /* ftpfr.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA78C1BB4EC1000B08C25 /* ftpfr.c */; };
|
||||
8CCD847A27E40B730024BDD5 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
@@ -947,6 +944,16 @@
|
||||
AB1773FD182ECA8A009F29DD /* slot2_passme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1773FC182ECA8A009F29DD /* slot2_passme.cpp */; };
|
||||
AB1773FF182ECA8A009F29DD /* slot2_passme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1773FC182ECA8A009F29DD /* slot2_passme.cpp */; };
|
||||
AB1949DB15034F900098793E /* OESoundInterface.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABB3C6401501BB8300E0C22E /* OESoundInterface.mm */; };
|
||||
AB1C3F4C2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F4D2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F4E2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F4F2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F502E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F512E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F522E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F532E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F542E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB1C3F552E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB26D87C16B5253D00A2305C /* OGLRender_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB68A0DA16B139BC00DE0546 /* OGLRender_3_2.cpp */; };
|
||||
AB28624F20AE3E7B00EAED43 /* MacBaseCaptureTool.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB28624820AE3E7A00EAED43 /* MacBaseCaptureTool.mm */; };
|
||||
AB28625020AE3E7B00EAED43 /* MacBaseCaptureTool.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB28624820AE3E7A00EAED43 /* MacBaseCaptureTool.mm */; };
|
||||
@@ -1168,7 +1175,6 @@
|
||||
AB36C7F427F2C8AE00C763C8 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB36C7F527F2C8AE00C763C8 /* Database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABADF1171DEA4C1200A142B1 /* Database.cpp */; };
|
||||
AB36C7F627F2C8AE00C763C8 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB36C7F727F2C8AE00C763C8 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB36C7F827F2C8AE00C763C8 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB36C7F927F2C8AE00C763C8 /* ftpfr.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA78C1BB4EC1000B08C25 /* ftpfr.c */; };
|
||||
AB36C7FA27F2C8AE00C763C8 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
@@ -1762,7 +1768,6 @@
|
||||
AB7900B2215B84E50082AE82 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB7900B3215B84E50082AE82 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB7900B4215B84E50082AE82 /* ftgxval.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA7831BB4EC1000B08C25 /* ftgxval.c */; };
|
||||
AB7900B5215B84E50082AE82 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB7900B6215B84E50082AE82 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB7900B7215B84E50082AE82 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; };
|
||||
AB7900B8215B84E50082AE82 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
@@ -2100,7 +2105,6 @@
|
||||
AB790212215B84F20082AE82 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
AB790213215B84F20082AE82 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB790214215B84F20082AE82 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB790215215B84F20082AE82 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB790216215B84F20082AE82 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB790217215B84F20082AE82 /* psnames.c in Sources */ = {isa = PBXBuildFile; fileRef = ABA731591BB51A8D00B26147 /* psnames.c */; };
|
||||
AB790218215B84F20082AE82 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
@@ -2361,7 +2365,6 @@
|
||||
AB796D3215CDCBA200C59155 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
AB796D3315CDCBA200C59155 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB796D3415CDCBA200C59155 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB796D3515CDCBA200C59155 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB796D3615CDCBA200C59155 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB796D3715CDCBA200C59155 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; };
|
||||
AB796D3815CDCBA200C59155 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
@@ -2656,7 +2659,6 @@
|
||||
AB8F3CBA1A53AC2600A80BF6 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
AB8F3CBB1A53AC2600A80BF6 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB8F3CBC1A53AC2600A80BF6 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB8F3CBD1A53AC2600A80BF6 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB8F3CBE1A53AC2600A80BF6 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB8F3CBF1A53AC2600A80BF6 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
AB8F3CC01A53AC2600A80BF6 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; };
|
||||
@@ -3225,7 +3227,6 @@
|
||||
ABC858F328273FEE00A03EA9 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
ABC858F428273FEE00A03EA9 /* Database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABADF1171DEA4C1200A142B1 /* Database.cpp */; };
|
||||
ABC858F528273FEE00A03EA9 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
ABC858F628273FEE00A03EA9 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
ABC858F728273FEE00A03EA9 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
ABC858F828273FEE00A03EA9 /* ftpfr.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA78C1BB4EC1000B08C25 /* ftpfr.c */; };
|
||||
ABC858F928273FEE00A03EA9 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
@@ -3574,7 +3575,6 @@
|
||||
ABD2CDA726E05CB000FB15F7 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
ABD2CDA826E05CB000FB15F7 /* Database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABADF1171DEA4C1200A142B1 /* Database.cpp */; };
|
||||
ABD2CDA926E05CB000FB15F7 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
ABD2CDAA26E05CB000FB15F7 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
ABD2CDAB26E05CB000FB15F7 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
ABD2CDAC26E05CB000FB15F7 /* ftpfr.c in Sources */ = {isa = PBXBuildFile; fileRef = ABFEA78C1BB4EC1000B08C25 /* ftpfr.c */; };
|
||||
ABD2CDAD26E05CB000FB15F7 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
|
||||
@@ -3868,6 +3868,8 @@
|
||||
AB1B9E601501A78000464647 /* ringbuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ringbuffer.cpp; sourceTree = "<group>"; };
|
||||
AB1B9E611501A78000464647 /* coreaudiosound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coreaudiosound.h; sourceTree = "<group>"; };
|
||||
AB1B9E621501A78000464647 /* ringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = "<group>"; };
|
||||
AB1C3F4A2E741AA40047F251 /* MacCoreAudioOutputEngine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MacCoreAudioOutputEngine.h; sourceTree = "<group>"; };
|
||||
AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MacCoreAudioOutputEngine.cpp; sourceTree = "<group>"; };
|
||||
AB1D4BAF26E6F8D700A9AE42 /* GPU_Operations_AVX2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GPU_Operations_AVX2.cpp; sourceTree = "<group>"; };
|
||||
AB1D4BB026E6F8D700A9AE42 /* GPU_Operations_AVX2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPU_Operations_AVX2.h; sourceTree = "<group>"; };
|
||||
AB1D4BB126E6F8D700A9AE42 /* GPU_Operations.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GPU_Operations.cpp; sourceTree = "<group>"; };
|
||||
@@ -4321,11 +4323,9 @@
|
||||
ABD103FE1346652500AF11D1 /* cocoa_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_core.h; sourceTree = "<group>"; };
|
||||
ABD103FF1346652500AF11D1 /* cocoa_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_input.h; sourceTree = "<group>"; };
|
||||
ABD104001346652500AF11D1 /* cocoa_rom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_rom.h; sourceTree = "<group>"; };
|
||||
ABD104011346652500AF11D1 /* sndOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndOSX.h; sourceTree = "<group>"; };
|
||||
ABD104111346652500AF11D1 /* cocoa_input.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_input.mm; sourceTree = "<group>"; };
|
||||
ABD104121346652500AF11D1 /* cocoa_core.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_core.mm; sourceTree = "<group>"; };
|
||||
ABD104131346652500AF11D1 /* cocoa_rom.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_rom.mm; sourceTree = "<group>"; };
|
||||
ABD104141346652500AF11D1 /* sndOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sndOSX.cpp; sourceTree = "<group>"; };
|
||||
ABD104271346653B00AF11D1 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
ABD10452134666DD00AF11D1 /* DeSmuME_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix.pch; sourceTree = "<group>"; };
|
||||
ABD10AE31715FCDD00B5729D /* audiosamplegenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiosamplegenerator.h; sourceTree = SOURCE_ROOT; };
|
||||
@@ -4916,7 +4916,6 @@
|
||||
ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */,
|
||||
ABE6840B189E33BC007FD69C /* OGLDisplayOutput.cpp */,
|
||||
AB1B9E601501A78000464647 /* ringbuffer.cpp */,
|
||||
ABD104141346652500AF11D1 /* sndOSX.cpp */,
|
||||
ABD10AE31715FCDD00B5729D /* audiosamplegenerator.h */,
|
||||
AB79913D2E712F510030C0A6 /* ClientAudioOutput.h */,
|
||||
AB28625820AE3E9F00EAED43 /* ClientAVCaptureObject.h */,
|
||||
@@ -4944,7 +4943,6 @@
|
||||
ABB24F6C1A81EE92006C1108 /* OGLDisplayOutput_3_2.h */,
|
||||
ABE6840E189E33D5007FD69C /* OGLDisplayOutput.h */,
|
||||
AB1B9E621501A78000464647 /* ringbuffer.h */,
|
||||
ABD104011346652500AF11D1 /* sndOSX.h */,
|
||||
AB82445E1704AEC400B8EE20 /* utilities.h */,
|
||||
AB5B1D4921D1F31E00BF0E0F /* MetalRendererCommonShaders.metal */,
|
||||
ABA6574A14511EC90077E5E9 /* cocoa_cheat.mm */,
|
||||
@@ -5351,6 +5349,7 @@
|
||||
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
|
||||
AB28624920AE3E7B00EAED43 /* MacAVCaptureTool.h */,
|
||||
AB28624A20AE3E7B00EAED43 /* MacBaseCaptureTool.h */,
|
||||
AB1C3F4A2E741AA40047F251 /* MacCoreAudioOutputEngine.h */,
|
||||
AB3BF43F1E2628B6003E2B24 /* MacMetalDisplayView.h */,
|
||||
AB3BF4051E22FEA8003E2B24 /* MacOGLDisplayView.h */,
|
||||
ABD1FBF41F7B7EA600B4F648 /* MacScreenshotCaptureTool.h */,
|
||||
@@ -5374,6 +5373,7 @@
|
||||
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
|
||||
AB28624720AE3E7A00EAED43 /* MacAVCaptureTool.mm */,
|
||||
AB28624820AE3E7A00EAED43 /* MacBaseCaptureTool.mm */,
|
||||
AB1C3F4B2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp */,
|
||||
AB3BF43B1E26289E003E2B24 /* MacMetalDisplayView.mm */,
|
||||
AB3BF4011E22FE01003E2B24 /* MacOGLDisplayView.mm */,
|
||||
ABD1FBF01F7B7E7E00B4F648 /* MacScreenshotCaptureTool.mm */,
|
||||
@@ -8053,6 +8053,7 @@
|
||||
8C43E7DD27E3CD0100A35F65 /* ftstroke.c in Sources */,
|
||||
8C43E7DE27E3CD0100A35F65 /* RomInfoPanel.mm in Sources */,
|
||||
8C43E7DF27E3CD0100A35F65 /* gfx3d.cpp in Sources */,
|
||||
AB1C3F4E2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
8C43E7E027E3CD0100A35F65 /* GPU.cpp in Sources */,
|
||||
8C43E7E127E3CD0100A35F65 /* features_cpu.c in Sources */,
|
||||
8C43E7E227E3CD0100A35F65 /* slot1_retail_auto.cpp in Sources */,
|
||||
@@ -8109,7 +8110,6 @@
|
||||
8C43E81327E3CD0100A35F65 /* slot2_piano.cpp in Sources */,
|
||||
8C43E81427E3CD0100A35F65 /* slot2_rumblepak.cpp in Sources */,
|
||||
8C43E81527E3CD0100A35F65 /* ftgxval.c in Sources */,
|
||||
8C43E81627E3CD0100A35F65 /* sndOSX.cpp in Sources */,
|
||||
8C43E81727E3CD0100A35F65 /* SndOut.cpp in Sources */,
|
||||
8C43E81827E3CD0100A35F65 /* SoundTouch.cpp in Sources */,
|
||||
8C43E81927E3CD0100A35F65 /* SPU.cpp in Sources */,
|
||||
@@ -8323,7 +8323,6 @@
|
||||
8C43E97627E3CD4C00A35F65 /* slot2_paddle.cpp in Sources */,
|
||||
8C43E97727E3CD4C00A35F65 /* slot2_piano.cpp in Sources */,
|
||||
8C43E97827E3CD4C00A35F65 /* slot2_rumblepak.cpp in Sources */,
|
||||
8C43E97927E3CD4C00A35F65 /* sndOSX.cpp in Sources */,
|
||||
8C43E97A27E3CD4C00A35F65 /* SndOut.cpp in Sources */,
|
||||
AB6E3B542E73E7C80088075E /* ClientCheatManager.cpp in Sources */,
|
||||
AB6E17F82A675BF1003A564D /* CheatDatabaseWindowController.mm in Sources */,
|
||||
@@ -8349,6 +8348,7 @@
|
||||
8C43E98E27E3CD4C00A35F65 /* tinyxml.cpp in Sources */,
|
||||
8C43E98F27E3CD4C00A35F65 /* tinyxmlerror.cpp in Sources */,
|
||||
8C43E99027E3CD4C00A35F65 /* tinyxmlparser.cpp in Sources */,
|
||||
AB1C3F532E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
8C43E99127E3CD4C00A35F65 /* version.cpp in Sources */,
|
||||
8C43E99227E3CD4C00A35F65 /* vfat.cpp in Sources */,
|
||||
8C43E99327E3CD4C00A35F65 /* videofilter.cpp in Sources */,
|
||||
@@ -8466,6 +8466,7 @@
|
||||
8CCD844E27E40B730024BDD5 /* matrix.cpp in Sources */,
|
||||
8CCD844F27E40B730024BDD5 /* mc.cpp in Sources */,
|
||||
8CCD845027E40B730024BDD5 /* features_cpu.c in Sources */,
|
||||
AB1C3F512E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
8CCD845127E40B730024BDD5 /* metaspu.cpp in Sources */,
|
||||
8CCD845227E40B730024BDD5 /* MMU.cpp in Sources */,
|
||||
8CCD845327E40B730024BDD5 /* mmx_optimized.cpp in Sources */,
|
||||
@@ -8506,7 +8507,6 @@
|
||||
8CCD847427E40B730024BDD5 /* slot2_piano.cpp in Sources */,
|
||||
8CCD847527E40B730024BDD5 /* Database.cpp in Sources */,
|
||||
8CCD847627E40B730024BDD5 /* slot2_rumblepak.cpp in Sources */,
|
||||
8CCD847727E40B730024BDD5 /* sndOSX.cpp in Sources */,
|
||||
8CCD847827E40B730024BDD5 /* SndOut.cpp in Sources */,
|
||||
8CCD847927E40B730024BDD5 /* ftpfr.c in Sources */,
|
||||
8CCD847A27E40B730024BDD5 /* Slot2WindowDelegate.mm in Sources */,
|
||||
@@ -8713,7 +8713,6 @@
|
||||
AB36C7F427F2C8AE00C763C8 /* slot2_piano.cpp in Sources */,
|
||||
AB36C7F527F2C8AE00C763C8 /* Database.cpp in Sources */,
|
||||
AB36C7F627F2C8AE00C763C8 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB36C7F727F2C8AE00C763C8 /* sndOSX.cpp in Sources */,
|
||||
AB36C7F827F2C8AE00C763C8 /* SndOut.cpp in Sources */,
|
||||
AB36C7F927F2C8AE00C763C8 /* ftpfr.c in Sources */,
|
||||
AB36C7FA27F2C8AE00C763C8 /* Slot2WindowDelegate.mm in Sources */,
|
||||
@@ -8726,6 +8725,7 @@
|
||||
AB36C80127F2C8AE00C763C8 /* TDStretch.cpp in Sources */,
|
||||
AB36C80227F2C8AE00C763C8 /* texcache.cpp in Sources */,
|
||||
AB36C80327F2C8AE00C763C8 /* thumb_instructions.cpp in Sources */,
|
||||
AB1C3F522E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
AB36C80427F2C8AE00C763C8 /* ftmm.c in Sources */,
|
||||
AB36C80527F2C8AE00C763C8 /* Timestretcher.cpp in Sources */,
|
||||
AB36C80627F2C8AE00C763C8 /* tinystr.cpp in Sources */,
|
||||
@@ -8854,6 +8854,7 @@
|
||||
files = (
|
||||
AB79004D215B84E50082AE82 /* AAFilter.cpp in Sources */,
|
||||
AB79004E215B84E50082AE82 /* arm_instructions.cpp in Sources */,
|
||||
AB1C3F4D2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
AB79004F215B84E50082AE82 /* armcpu.cpp in Sources */,
|
||||
AB790050215B84E50082AE82 /* bios.cpp in Sources */,
|
||||
AB790051215B84E50082AE82 /* cache.cpp in Sources */,
|
||||
@@ -8960,7 +8961,6 @@
|
||||
AB7900B2215B84E50082AE82 /* slot2_piano.cpp in Sources */,
|
||||
AB7900B3215B84E50082AE82 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB7900B4215B84E50082AE82 /* ftgxval.c in Sources */,
|
||||
AB7900B5215B84E50082AE82 /* sndOSX.cpp in Sources */,
|
||||
AB7991472E712F510030C0A6 /* ClientAudioOutput.cpp in Sources */,
|
||||
AB7900B6215B84E50082AE82 /* SndOut.cpp in Sources */,
|
||||
AB7900B7215B84E50082AE82 /* SoundTouch.cpp in Sources */,
|
||||
@@ -9189,6 +9189,7 @@
|
||||
AB790205215B84F20082AE82 /* saves.cpp in Sources */,
|
||||
AB790206215B84F20082AE82 /* slot1.cpp in Sources */,
|
||||
AB790207215B84F20082AE82 /* slot1_none.cpp in Sources */,
|
||||
AB1C3F502E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
AB790208215B84F20082AE82 /* slot1_r4.cpp in Sources */,
|
||||
AB790209215B84F20082AE82 /* slot1_retail_nand.cpp in Sources */,
|
||||
AB79020A215B84F20082AE82 /* encrypt.cpp in Sources */,
|
||||
@@ -9203,7 +9204,6 @@
|
||||
AB790213215B84F20082AE82 /* slot2_piano.cpp in Sources */,
|
||||
AB6E17FA2A675BF1003A564D /* CheatDatabaseWindowController.mm in Sources */,
|
||||
AB790214215B84F20082AE82 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB790215215B84F20082AE82 /* sndOSX.cpp in Sources */,
|
||||
AB790216215B84F20082AE82 /* SndOut.cpp in Sources */,
|
||||
AB790217215B84F20082AE82 /* psnames.c in Sources */,
|
||||
AB790218215B84F20082AE82 /* Slot2WindowDelegate.mm in Sources */,
|
||||
@@ -9325,6 +9325,7 @@
|
||||
files = (
|
||||
AB796CF015CDCBA200C59155 /* AAFilter.cpp in Sources */,
|
||||
AB796CF215CDCBA200C59155 /* arm_instructions.cpp in Sources */,
|
||||
AB1C3F552E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
AB796CF315CDCBA200C59155 /* armcpu.cpp in Sources */,
|
||||
AB796CF415CDCBA200C59155 /* bios.cpp in Sources */,
|
||||
AB796CF515CDCBA200C59155 /* cache.cpp in Sources */,
|
||||
@@ -9431,7 +9432,6 @@
|
||||
AB796D3315CDCBA200C59155 /* slot2_piano.cpp in Sources */,
|
||||
AB796D3415CDCBA200C59155 /* slot2_rumblepak.cpp in Sources */,
|
||||
ABFEA8281BB4EC1100B08C25 /* ftgxval.c in Sources */,
|
||||
AB796D3515CDCBA200C59155 /* sndOSX.cpp in Sources */,
|
||||
AB7991412E712F510030C0A6 /* ClientAudioOutput.cpp in Sources */,
|
||||
AB796D3615CDCBA200C59155 /* SndOut.cpp in Sources */,
|
||||
AB796D3715CDCBA200C59155 /* SoundTouch.cpp in Sources */,
|
||||
@@ -9660,6 +9660,7 @@
|
||||
AB8F3CAE1A53AC2600A80BF6 /* saves.cpp in Sources */,
|
||||
AB8F3CAF1A53AC2600A80BF6 /* slot1.cpp in Sources */,
|
||||
AB8F3CB01A53AC2600A80BF6 /* slot1_none.cpp in Sources */,
|
||||
AB1C3F4C2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
AB8F3CB11A53AC2600A80BF6 /* slot1_r4.cpp in Sources */,
|
||||
AB8F3CB21A53AC2600A80BF6 /* slot1_retail_nand.cpp in Sources */,
|
||||
AB8F3CB31A53AC2600A80BF6 /* encrypt.cpp in Sources */,
|
||||
@@ -9674,7 +9675,6 @@
|
||||
AB8F3CBB1A53AC2600A80BF6 /* slot2_piano.cpp in Sources */,
|
||||
AB6E17F62A675BF1003A564D /* CheatDatabaseWindowController.mm in Sources */,
|
||||
AB8F3CBC1A53AC2600A80BF6 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB8F3CBD1A53AC2600A80BF6 /* sndOSX.cpp in Sources */,
|
||||
AB8F3CBE1A53AC2600A80BF6 /* SndOut.cpp in Sources */,
|
||||
ABA7315C1BB51A8D00B26147 /* psnames.c in Sources */,
|
||||
AB8F3CBF1A53AC2600A80BF6 /* Slot2WindowDelegate.mm in Sources */,
|
||||
@@ -9974,6 +9974,7 @@
|
||||
files = (
|
||||
ABC8589E28273FEE00A03EA9 /* ftlcdfil.c in Sources */,
|
||||
ABC8589F28273FEE00A03EA9 /* AAFilter.cpp in Sources */,
|
||||
AB1C3F542E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
ABC858A028273FEE00A03EA9 /* arm_instructions.cpp in Sources */,
|
||||
ABC858A128273FEE00A03EA9 /* RomInfoPanel.mm in Sources */,
|
||||
ABC858A228273FEE00A03EA9 /* armcpu.cpp in Sources */,
|
||||
@@ -10064,7 +10065,6 @@
|
||||
ABC858F328273FEE00A03EA9 /* slot2_piano.cpp in Sources */,
|
||||
ABC858F428273FEE00A03EA9 /* Database.cpp in Sources */,
|
||||
ABC858F528273FEE00A03EA9 /* slot2_rumblepak.cpp in Sources */,
|
||||
ABC858F628273FEE00A03EA9 /* sndOSX.cpp in Sources */,
|
||||
ABC858F728273FEE00A03EA9 /* SndOut.cpp in Sources */,
|
||||
ABC858F828273FEE00A03EA9 /* ftpfr.c in Sources */,
|
||||
ABC858F928273FEE00A03EA9 /* Slot2WindowDelegate.mm in Sources */,
|
||||
@@ -10209,6 +10209,7 @@
|
||||
files = (
|
||||
ABD2CD5226E05CB000FB15F7 /* ftlcdfil.c in Sources */,
|
||||
ABD2CD5326E05CB000FB15F7 /* AAFilter.cpp in Sources */,
|
||||
AB1C3F4F2E741AA40047F251 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
ABD2CD5426E05CB000FB15F7 /* arm_instructions.cpp in Sources */,
|
||||
ABD2CD5526E05CB000FB15F7 /* RomInfoPanel.mm in Sources */,
|
||||
ABD2CD5626E05CB000FB15F7 /* armcpu.cpp in Sources */,
|
||||
@@ -10299,7 +10300,6 @@
|
||||
ABD2CDA726E05CB000FB15F7 /* slot2_piano.cpp in Sources */,
|
||||
ABD2CDA826E05CB000FB15F7 /* Database.cpp in Sources */,
|
||||
ABD2CDA926E05CB000FB15F7 /* slot2_rumblepak.cpp in Sources */,
|
||||
ABD2CDAA26E05CB000FB15F7 /* sndOSX.cpp in Sources */,
|
||||
ABD2CDAB26E05CB000FB15F7 /* SndOut.cpp in Sources */,
|
||||
ABD2CDAC26E05CB000FB15F7 /* ftpfr.c in Sources */,
|
||||
ABD2CDAD26E05CB000FB15F7 /* Slot2WindowDelegate.mm in Sources */,
|
||||
|
@@ -448,7 +448,6 @@
|
||||
AB2A9A2D1725F00F0062C1A1 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
AB2A9A2E1725F00F0062C1A1 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB2A9A2F1725F00F0062C1A1 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB2A9A301725F00F0062C1A1 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB2A9A311725F00F0062C1A1 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB2A9A321725F00F0062C1A1 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
AB2A9A331725F00F0062C1A1 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; };
|
||||
@@ -644,7 +643,6 @@
|
||||
AB2F3C0715CF9C6000858373 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
AB2F3C0815CF9C6000858373 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB2F3C0915CF9C6000858373 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB2F3C0A15CF9C6000858373 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB2F3C0B15CF9C6000858373 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB2F3C0D15CF9C6000858373 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
AB2F3C0F15CF9C6000858373 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; };
|
||||
@@ -964,7 +962,6 @@
|
||||
AB711F461481C35F009011C8 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104111346652500AF11D1 /* cocoa_input.mm */; };
|
||||
AB711F471481C35F009011C8 /* cocoa_core.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104121346652500AF11D1 /* cocoa_core.mm */; };
|
||||
AB711F481481C35F009011C8 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
|
||||
AB711F491481C35F009011C8 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB711F4A1481C35F009011C8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD104271346653B00AF11D1 /* main.m */; };
|
||||
AB711F4E1481C35F009011C8 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB58F32C1364F44B0074C376 /* cocoa_file.mm */; };
|
||||
AB711F501481C35F009011C8 /* slot1_retail_nand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6FBEF5139B6258007BB045 /* slot1_retail_nand.cpp */; };
|
||||
@@ -1111,7 +1108,6 @@
|
||||
AB73A9F51507C9F500A310C8 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
AB73A9F61507C9F500A310C8 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
AB73A9F71507C9F500A310C8 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
AB73A9F81507C9F500A310C8 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
AB73A9F91507C9F500A310C8 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
AB73A9FB1507C9F500A310C8 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
AB73A9FD1507C9F500A310C8 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; };
|
||||
@@ -1157,6 +1153,11 @@
|
||||
AB73AA2D1507C9F500A310C8 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; };
|
||||
AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
|
||||
AB73AA2F1507C9F500A310C8 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
|
||||
AB743E472E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB743E482E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB743E492E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB743E4A2E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB743E4B2E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */; };
|
||||
AB75226F14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB75226D14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns */; };
|
||||
AB7BB17F1D62C8CC00A7A6E2 /* colorspacehandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB37E36C1D6188BC004A2C0D /* colorspacehandler.cpp */; };
|
||||
AB7DDA6D173DC38F004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
|
||||
@@ -1401,7 +1402,6 @@
|
||||
ABAD0FFD15ACE7A00000EC47 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
|
||||
ABAD0FFE15ACE7A00000EC47 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
|
||||
ABAD0FFF15ACE7A00000EC47 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; };
|
||||
ABAD100015ACE7A00000EC47 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; };
|
||||
ABAD100115ACE7A00000EC47 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; };
|
||||
ABAD100315ACE7A00000EC47 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; };
|
||||
ABAD100515ACE7A00000EC47 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; };
|
||||
@@ -2134,6 +2134,8 @@
|
||||
AB700DDD16CDE4C300FBD336 /* DisplayWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DisplayWindowController.mm; sourceTree = "<group>"; };
|
||||
AB711F7F1481C35F009011C8 /* DeSmuME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DeSmuME.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AB73AA331507C9F500A310C8 /* DeSmuME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DeSmuME.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MacCoreAudioOutputEngine.cpp; sourceTree = "<group>"; };
|
||||
AB743E462E766E2E007FB6A2 /* MacCoreAudioOutputEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacCoreAudioOutputEngine.h; sourceTree = "<group>"; };
|
||||
AB75226D14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon_FirmwareConfig.icns; sourceTree = "<group>"; };
|
||||
AB80E04C142BC4A800A52038 /* cocoa_util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_util.mm; sourceTree = "<group>"; };
|
||||
AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = "<group>"; };
|
||||
@@ -2208,11 +2210,9 @@
|
||||
ABD103FE1346652500AF11D1 /* cocoa_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_core.h; sourceTree = "<group>"; };
|
||||
ABD103FF1346652500AF11D1 /* cocoa_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_input.h; sourceTree = "<group>"; };
|
||||
ABD104001346652500AF11D1 /* cocoa_rom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_rom.h; sourceTree = "<group>"; };
|
||||
ABD104011346652500AF11D1 /* sndOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndOSX.h; sourceTree = "<group>"; };
|
||||
ABD104111346652500AF11D1 /* cocoa_input.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_input.mm; sourceTree = "<group>"; };
|
||||
ABD104121346652500AF11D1 /* cocoa_core.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_core.mm; sourceTree = "<group>"; };
|
||||
ABD104131346652500AF11D1 /* cocoa_rom.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_rom.mm; sourceTree = "<group>"; };
|
||||
ABD104141346652500AF11D1 /* sndOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sndOSX.cpp; sourceTree = "<group>"; };
|
||||
ABD104271346653B00AF11D1 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
ABD10452134666DD00AF11D1 /* DeSmuME_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix.pch; sourceTree = "<group>"; };
|
||||
ABD1266320AE80DF00EFE1B2 /* MacAVCaptureTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacAVCaptureTool.h; sourceTree = "<group>"; };
|
||||
@@ -2615,7 +2615,6 @@
|
||||
ABECB51318A460910052D52A /* OGLDisplayOutput.cpp */,
|
||||
AB3B8DCA2D8A35D900C9CBFD /* OGLDisplayOutput_3_2.cpp */,
|
||||
ABD0A5351501AA5A0074A094 /* ringbuffer.cpp */,
|
||||
ABD104141346652500AF11D1 /* sndOSX.cpp */,
|
||||
AB2145211714DFF4006DDB0F /* audiosamplegenerator.h */,
|
||||
AB561BFE2E72AD6E007F88A5 /* ClientAudioOutput.h */,
|
||||
ABD1267220AE812900EFE1B2 /* ClientAVCaptureObject.h */,
|
||||
@@ -2642,7 +2641,6 @@
|
||||
ABECB51218A460910052D52A /* OGLDisplayOutput.h */,
|
||||
AB3B8DCB2D8A35D900C9CBFD /* OGLDisplayOutput_3_2.h */,
|
||||
ABD0A5371501AA5A0074A094 /* ringbuffer.h */,
|
||||
ABD104011346652500AF11D1 /* sndOSX.h */,
|
||||
AB2F56EE1704C86900E28885 /* utilities.h */,
|
||||
ABA6574A14511EC90077E5E9 /* cocoa_cheat.mm */,
|
||||
ABD104121346652500AF11D1 /* cocoa_core.mm */,
|
||||
@@ -3285,6 +3283,7 @@
|
||||
AB213D43170CB141006DDB0F /* InputProfileController.h */,
|
||||
ABD1266320AE80DF00EFE1B2 /* MacAVCaptureTool.h */,
|
||||
ABD1266520AE80DF00EFE1B2 /* MacBaseCaptureTool.h */,
|
||||
AB743E462E766E2E007FB6A2 /* MacCoreAudioOutputEngine.h */,
|
||||
AB3E690E1E231E9900D4CC75 /* MacOGLDisplayView.h */,
|
||||
ABAB0AFD1F7C1BB70079EFD3 /* MacScreenshotCaptureTool.h */,
|
||||
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
||||
@@ -3306,6 +3305,7 @@
|
||||
AB213D44170CB141006DDB0F /* InputProfileController.mm */,
|
||||
ABD1266420AE80DF00EFE1B2 /* MacAVCaptureTool.mm */,
|
||||
ABD1266620AE80DF00EFE1B2 /* MacBaseCaptureTool.mm */,
|
||||
AB743E452E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp */,
|
||||
AB3E690F1E231E9900D4CC75 /* MacOGLDisplayView.mm */,
|
||||
ABAB0AFE1F7C1BB70079EFD3 /* MacScreenshotCaptureTool.mm */,
|
||||
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
||||
@@ -4783,7 +4783,6 @@
|
||||
AB2A9A2D1725F00F0062C1A1 /* slot2_paddle.cpp in Sources */,
|
||||
AB2A9A2E1725F00F0062C1A1 /* slot2_piano.cpp in Sources */,
|
||||
AB2A9A2F1725F00F0062C1A1 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB2A9A301725F00F0062C1A1 /* sndOSX.cpp in Sources */,
|
||||
AB2A9A311725F00F0062C1A1 /* SndOut.cpp in Sources */,
|
||||
AB2A9A321725F00F0062C1A1 /* SPU.cpp in Sources */,
|
||||
AB2A9A331725F00F0062C1A1 /* task.cpp in Sources */,
|
||||
@@ -4920,6 +4919,7 @@
|
||||
AB561C082E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
|
||||
AB1E5A382E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
|
||||
AB1E5A392E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
|
||||
AB743E482E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -4984,7 +4984,6 @@
|
||||
AB2F3C0715CF9C6000858373 /* slot2_paddle.cpp in Sources */,
|
||||
AB2F3C0815CF9C6000858373 /* slot2_piano.cpp in Sources */,
|
||||
AB2F3C0915CF9C6000858373 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB2F3C0A15CF9C6000858373 /* sndOSX.cpp in Sources */,
|
||||
AB2F3C0B15CF9C6000858373 /* SndOut.cpp in Sources */,
|
||||
AB2F3C0D15CF9C6000858373 /* SPU.cpp in Sources */,
|
||||
AB2F3C0F15CF9C6000858373 /* task.cpp in Sources */,
|
||||
@@ -5121,6 +5120,7 @@
|
||||
AB561C0B2E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
|
||||
AB1E5A3A2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
|
||||
AB1E5A3B2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
|
||||
AB743E492E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -5185,7 +5185,6 @@
|
||||
AB711F2A1481C35F009011C8 /* slot2_paddle.cpp in Sources */,
|
||||
AB711F2B1481C35F009011C8 /* slot2_piano.cpp in Sources */,
|
||||
AB711F2C1481C35F009011C8 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB711F491481C35F009011C8 /* sndOSX.cpp in Sources */,
|
||||
AB711F511481C35F009011C8 /* SndOut.cpp in Sources */,
|
||||
AB711F1D1481C35F009011C8 /* SPU.cpp in Sources */,
|
||||
AB711F401481C35F009011C8 /* task.cpp in Sources */,
|
||||
@@ -5352,6 +5351,7 @@
|
||||
AB561C112E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
|
||||
AB1E5A3E2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
|
||||
AB1E5A3F2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
|
||||
AB743E4B2E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -5416,7 +5416,6 @@
|
||||
AB73A9F51507C9F500A310C8 /* slot2_paddle.cpp in Sources */,
|
||||
AB73A9F61507C9F500A310C8 /* slot2_piano.cpp in Sources */,
|
||||
AB73A9F71507C9F500A310C8 /* slot2_rumblepak.cpp in Sources */,
|
||||
AB73A9F81507C9F500A310C8 /* sndOSX.cpp in Sources */,
|
||||
AB73A9F91507C9F500A310C8 /* SndOut.cpp in Sources */,
|
||||
AB73A9FB1507C9F500A310C8 /* SPU.cpp in Sources */,
|
||||
AB73A9FD1507C9F500A310C8 /* task.cpp in Sources */,
|
||||
@@ -5583,6 +5582,7 @@
|
||||
AB561C0E2E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
|
||||
AB1E5A3C2E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
|
||||
AB1E5A3D2E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
|
||||
AB743E4A2E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -5647,7 +5647,6 @@
|
||||
ABAD0FFD15ACE7A00000EC47 /* slot2_paddle.cpp in Sources */,
|
||||
ABAD0FFE15ACE7A00000EC47 /* slot2_piano.cpp in Sources */,
|
||||
ABAD0FFF15ACE7A00000EC47 /* slot2_rumblepak.cpp in Sources */,
|
||||
ABAD100015ACE7A00000EC47 /* sndOSX.cpp in Sources */,
|
||||
ABAD100115ACE7A00000EC47 /* SndOut.cpp in Sources */,
|
||||
ABAD100315ACE7A00000EC47 /* SPU.cpp in Sources */,
|
||||
ABAD100515ACE7A00000EC47 /* task.cpp in Sources */,
|
||||
@@ -5784,6 +5783,7 @@
|
||||
AB561C052E72AD6E007F88A5 /* ClientVideoOutput.cpp in Sources */,
|
||||
AB1E5A362E73F0AC008AFF9F /* ClientCheatManager.cpp in Sources */,
|
||||
AB1E5A372E73F0AC008AFF9F /* ClientFirmwareControl.cpp in Sources */,
|
||||
AB743E472E766E2E007FB6A2 /* MacCoreAudioOutputEngine.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@@ -189,6 +189,8 @@
|
||||
|
||||
#define WINDOW_STATUS_BAR_HEIGHT 24 // Height of an emulation window status bar in pixels.
|
||||
|
||||
#define DS_FRAMES_PER_SECOND 59.8261 // Number of DS frames per second.
|
||||
|
||||
//#define SPU_SAMPLE_RATE (44100.0 * DS_FRAMES_PER_SECOND / 60.0) // Samples per second
|
||||
#define SPU_SAMPLE_RATE 44100.0 // Samples per second
|
||||
#define SPU_SAMPLE_RESOLUTION 16 // Bits per sample; must be a multiple of 8
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 2012-2022 DeSmuME team
|
||||
Copyright (C) 2012-2025 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "coreaudiosound.h"
|
||||
#include "MacCoreAudioOutputEngine.h"
|
||||
|
||||
#include <CoreAudio/CoreAudio.h>
|
||||
#include "ClientInputHandler.h"
|
||||
@@ -903,206 +904,6 @@ void CoreAudioInputDefaultHardwareGainChangedCallback(float normalizedGain, void
|
||||
|
||||
#pragma mark -
|
||||
|
||||
CoreAudioOutput::CoreAudioOutput(size_t bufferSamples, size_t sampleSize)
|
||||
{
|
||||
OSStatus error = noErr;
|
||||
|
||||
_unfairlockAU = apple_unfairlock_create();
|
||||
|
||||
_buffer = new RingBuffer(bufferSamples, sampleSize);
|
||||
_volume = 1.0f;
|
||||
|
||||
// Create a new audio unit
|
||||
#if !defined(FORCE_AUDIOCOMPONENT_10_5) && defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
|
||||
if (IsOSXVersionSupported(10, 6, 0))
|
||||
{
|
||||
AudioComponentDescription audioDesc;
|
||||
audioDesc.componentType = kAudioUnitType_Output;
|
||||
audioDesc.componentSubType = kAudioUnitSubType_DefaultOutput;
|
||||
audioDesc.componentManufacturer = kAudioUnitManufacturer_Apple;
|
||||
audioDesc.componentFlags = 0;
|
||||
audioDesc.componentFlagsMask = 0;
|
||||
|
||||
CreateAudioUnitInstance(&_au, &audioDesc);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ComponentDescription audioDesc;
|
||||
audioDesc.componentType = kAudioUnitType_Output;
|
||||
audioDesc.componentSubType = kAudioUnitSubType_DefaultOutput;
|
||||
audioDesc.componentManufacturer = kAudioUnitManufacturer_Apple;
|
||||
audioDesc.componentFlags = 0;
|
||||
audioDesc.componentFlagsMask = 0;
|
||||
|
||||
CreateAudioUnitInstance(&_au, &audioDesc);
|
||||
}
|
||||
|
||||
// Set the render callback
|
||||
AURenderCallbackStruct callback;
|
||||
callback.inputProc = &CoreAudioOutputRenderCallback;
|
||||
callback.inputProcRefCon = _buffer;
|
||||
|
||||
error = AudioUnitSetProperty(_au,
|
||||
kAudioUnitProperty_SetRenderCallback,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&callback,
|
||||
sizeof(callback) );
|
||||
|
||||
if(error != noErr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up the audio unit for audio streaming
|
||||
AudioStreamBasicDescription outputFormat;
|
||||
outputFormat.mSampleRate = SPU_SAMPLE_RATE;
|
||||
outputFormat.mFormatID = kAudioFormatLinearPCM;
|
||||
outputFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kLinearPCMFormatFlagIsPacked;
|
||||
outputFormat.mBytesPerPacket = SPU_SAMPLE_SIZE;
|
||||
outputFormat.mFramesPerPacket = 1;
|
||||
outputFormat.mBytesPerFrame = SPU_SAMPLE_SIZE;
|
||||
outputFormat.mChannelsPerFrame = SPU_NUMBER_CHANNELS;
|
||||
outputFormat.mBitsPerChannel = SPU_SAMPLE_RESOLUTION;
|
||||
|
||||
error = AudioUnitSetProperty(_au,
|
||||
kAudioUnitProperty_StreamFormat,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&outputFormat,
|
||||
sizeof(outputFormat) );
|
||||
|
||||
if(error != noErr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize our new audio unit
|
||||
error = AudioUnitInitialize(_au);
|
||||
if(error != noErr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CoreAudioOutput::~CoreAudioOutput()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
DestroyAudioUnitInstance(&this->_au);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
|
||||
delete this->_buffer;
|
||||
this->_buffer = NULL;
|
||||
|
||||
apple_unfairlock_destroy(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void CoreAudioOutput::start()
|
||||
{
|
||||
this->clearBuffer();
|
||||
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioUnitReset(this->_au, kAudioUnitScope_Global, 0);
|
||||
AudioOutputUnitStart(this->_au);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void CoreAudioOutput::pause()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioOutputUnitStop(this->_au);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void CoreAudioOutput::unpause()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioOutputUnitStart(this->_au);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void CoreAudioOutput::stop()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioOutputUnitStop(this->_au);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
|
||||
this->clearBuffer();
|
||||
}
|
||||
|
||||
void CoreAudioOutput::writeToBuffer(const void *buffer, size_t numberSampleFrames)
|
||||
{
|
||||
size_t availableSampleFrames = this->_buffer->getAvailableElements();
|
||||
if (availableSampleFrames < numberSampleFrames)
|
||||
{
|
||||
this->_buffer->drop(numberSampleFrames - availableSampleFrames);
|
||||
}
|
||||
|
||||
this->_buffer->write(buffer, numberSampleFrames);
|
||||
}
|
||||
|
||||
void CoreAudioOutput::clearBuffer()
|
||||
{
|
||||
this->_buffer->clear();
|
||||
}
|
||||
|
||||
void CoreAudioOutput::mute()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioUnitSetParameter(this->_au, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, 0.0f, 0);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void CoreAudioOutput::unmute()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioUnitSetParameter(this->_au, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, this->_volume, 0);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
size_t CoreAudioOutput::getAvailableSamples() const
|
||||
{
|
||||
return this->_buffer->getAvailableElements();
|
||||
}
|
||||
|
||||
float CoreAudioOutput::getVolume() const
|
||||
{
|
||||
return this->_volume;
|
||||
}
|
||||
|
||||
void CoreAudioOutput::setVolume(float vol)
|
||||
{
|
||||
this->_volume = vol;
|
||||
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioUnitSetParameter(this->_au, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, vol, 0);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
OSStatus CoreAudioOutputRenderCallback(void *inRefCon,
|
||||
AudioUnitRenderActionFlags *ioActionFlags,
|
||||
const AudioTimeStamp *inTimeStamp,
|
||||
UInt32 inBusNumber,
|
||||
UInt32 inNumberFrames,
|
||||
AudioBufferList *ioData)
|
||||
{
|
||||
RingBuffer *__restrict__ audioBuffer = (RingBuffer *)inRefCon;
|
||||
UInt8 *__restrict__ playbackBuffer = (UInt8 *)ioData->mBuffers[0].mData;
|
||||
const size_t framesRead = audioBuffer->read(playbackBuffer, inNumberFrames);
|
||||
|
||||
// Pad any remaining samples.
|
||||
if (framesRead < inNumberFrames)
|
||||
{
|
||||
const size_t frameSize = audioBuffer->getElementSize();
|
||||
memset(playbackBuffer + (framesRead * frameSize), 0, (inNumberFrames - framesRead) * frameSize);
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
bool CreateAudioUnitInstance(AudioUnit *au, ComponentDescription *auDescription)
|
||||
{
|
||||
bool result = false;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 2012-2022 DeSmuME team
|
||||
Copyright (C) 2012-2025 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -111,31 +111,6 @@ public:
|
||||
virtual uint8_t generateSample();
|
||||
};
|
||||
|
||||
class CoreAudioOutput
|
||||
{
|
||||
private:
|
||||
AudioUnit _au;
|
||||
RingBuffer *_buffer;
|
||||
apple_unfairlock_t _unfairlockAU;
|
||||
float _volume;
|
||||
|
||||
public:
|
||||
CoreAudioOutput(size_t bufferSamples, size_t sampleSize);
|
||||
~CoreAudioOutput();
|
||||
|
||||
void start();
|
||||
void stop();
|
||||
void writeToBuffer(const void *buffer, size_t numberSampleFrames);
|
||||
void clearBuffer();
|
||||
size_t getAvailableSamples() const;
|
||||
void mute();
|
||||
void unmute();
|
||||
void pause();
|
||||
void unpause();
|
||||
float getVolume() const;
|
||||
void setVolume(float vol);
|
||||
};
|
||||
|
||||
OSStatus CoreAudioInputCaptureCallback(void *inRefCon,
|
||||
AudioUnitRenderActionFlags *ioActionFlags,
|
||||
const AudioTimeStamp *inTimeStamp,
|
||||
@@ -168,13 +143,6 @@ void CoreAudioInputAUHALChanged(void *inRefCon,
|
||||
AudioUnitScope inScope,
|
||||
AudioUnitElement inElement);
|
||||
|
||||
OSStatus CoreAudioOutputRenderCallback(void *inRefCon,
|
||||
AudioUnitRenderActionFlags *ioActionFlags,
|
||||
const AudioTimeStamp *inTimeStamp,
|
||||
UInt32 inBusNumber,
|
||||
UInt32 inNumberFrames,
|
||||
AudioBufferList *ioData);
|
||||
|
||||
void CoreAudioInputDefaultHardwareStateChangedCallback(CoreAudioInputDeviceInfo *deviceInfo,
|
||||
const bool isHardwareEnabled,
|
||||
const bool isHardwareLocked,
|
||||
|
@@ -1,164 +0,0 @@
|
||||
/*
|
||||
Copyright (C) 2007 Jeff Bland
|
||||
Copyright (C) 2007-2022 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with the this software. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "sndOSX.h"
|
||||
|
||||
#include "coreaudiosound.h"
|
||||
#include "cocoa_globals.h"
|
||||
|
||||
|
||||
// Global sound playback manager
|
||||
static CoreAudioOutput *coreAudioPlaybackManager = NULL;
|
||||
|
||||
// Sound interface to the SPU
|
||||
SoundInterface_struct SNDOSX = {
|
||||
SNDCORE_OSX,
|
||||
"macOS Core Audio Sound Interface",
|
||||
SNDOSXInit,
|
||||
SNDOSXDeInit,
|
||||
SNDOSXUpdateAudio,
|
||||
SNDOSXGetAudioSpace,
|
||||
SNDOSXMuteAudio,
|
||||
SNDOSXUnMuteAudio,
|
||||
SNDOSXSetVolume,
|
||||
SNDOSXClearBuffer,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
SoundInterface_struct *SNDCoreList[] = {
|
||||
&SNDDummy,
|
||||
&SNDOSX,
|
||||
NULL
|
||||
};
|
||||
|
||||
int SNDOSXInit(int buffer_size)
|
||||
{
|
||||
CoreAudioOutput *oldcoreAudioPlaybackManager = coreAudioPlaybackManager;
|
||||
coreAudioPlaybackManager = new CoreAudioOutput(buffer_size * 4 / SPU_SAMPLE_SIZE, SPU_SAMPLE_SIZE);
|
||||
delete oldcoreAudioPlaybackManager;
|
||||
|
||||
coreAudioPlaybackManager->start();
|
||||
coreAudioPlaybackManager->pause();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SNDOSXDeInit()
|
||||
{
|
||||
delete coreAudioPlaybackManager;
|
||||
coreAudioPlaybackManager = NULL;
|
||||
}
|
||||
|
||||
int SNDOSXReset()
|
||||
{
|
||||
SNDOSXClearBuffer();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SNDOSXUpdateAudio(s16 *buffer, u32 num_samples)
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->writeToBuffer(buffer, num_samples);
|
||||
}
|
||||
|
||||
u32 SNDOSXGetAudioSpace()
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (u32)coreAudioPlaybackManager->getAvailableSamples();
|
||||
}
|
||||
|
||||
void SNDOSXMuteAudio()
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->mute();
|
||||
}
|
||||
|
||||
void SNDOSXUnMuteAudio()
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->unmute();
|
||||
}
|
||||
|
||||
void SNDOSXPauseAudio()
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->pause();
|
||||
}
|
||||
|
||||
void SNDOSXUnpauseAudio()
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->unpause();
|
||||
}
|
||||
|
||||
void SNDOSXSetVolume(int volume)
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float newVolumeScalar = (float)volume / 100.0f;
|
||||
|
||||
if(volume > 100)
|
||||
{
|
||||
newVolumeScalar = 1.0f;
|
||||
}
|
||||
else if(volume < 0)
|
||||
{
|
||||
newVolumeScalar = 0.0f;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->setVolume(newVolumeScalar);
|
||||
}
|
||||
|
||||
void SNDOSXClearBuffer()
|
||||
{
|
||||
if (coreAudioPlaybackManager == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
coreAudioPlaybackManager->clearBuffer();
|
||||
}
|
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
Copyright (C) 2007 Jeff Bland
|
||||
Copyright (C) 2007-2014 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with the this software. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _OSXSOUNDINTERFACE_
|
||||
#define _OSXSOUNDINTERFACE_
|
||||
|
||||
#include <pthread.h>
|
||||
#include "../../SPU.h"
|
||||
#undef BOOL
|
||||
|
||||
#define SNDCORE_OSX 58325 //hopefully this is unique number
|
||||
|
||||
extern SoundInterface_struct SNDOSX; // Sound interface to the SPU
|
||||
|
||||
// Core Audio functions for the sound interface
|
||||
int SNDOSXInit(int buffer_size);
|
||||
void SNDOSXDeInit();
|
||||
int SNDOSXReset();
|
||||
void SNDOSXUpdateAudio(s16 *buffer, u32 num_samples);
|
||||
u32 SNDOSXGetAudioSpace();
|
||||
void SNDOSXMuteAudio();
|
||||
void SNDOSXUnMuteAudio();
|
||||
void SNDOSXPauseAudio();
|
||||
void SNDOSXUnpauseAudio();
|
||||
void SNDOSXSetVolume(int volume);
|
||||
void SNDOSXClearBuffer();
|
||||
|
||||
#endif // _OSXSOUNDINTERFACE_
|
@@ -22600,7 +22600,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
||||
<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||
<object class="NSView" key="NSWindowView" id="279931197">
|
||||
<reference key="NSNextResponder"/>
|
||||
<nil key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<array class="NSMutableArray" key="NSSubviews">
|
||||
<object class="NSBox" id="125800740">
|
||||
@@ -22616,7 +22616,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 52}, {171, 18}}</string>
|
||||
<reference key="NSSuperview" ref="522589149"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">1</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="956791784">
|
||||
@@ -22641,7 +22640,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 32}, {187, 18}}</string>
|
||||
<reference key="NSSuperview" ref="522589149"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">10</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="432570502">
|
||||
@@ -22666,7 +22664,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 12}, {163, 18}}</string>
|
||||
<reference key="NSSuperview" ref="522589149"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="985730003">
|
||||
<int key="NSCellFlags">-2080374784</int>
|
||||
@@ -22688,12 +22685,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {250, 78}}</string>
|
||||
<reference key="NSSuperview" ref="125800740"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 419}, {252, 94}}</string>
|
||||
<reference key="NSSuperview" ref="279931197"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -22722,7 +22717,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{16, 52}, {162, 18}}</string>
|
||||
<reference key="NSSuperview" ref="95449950"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">2</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="287910588">
|
||||
@@ -22747,7 +22741,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{35, 32}, {127, 18}}</string>
|
||||
<reference key="NSSuperview" ref="95449950"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">3</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="160669052">
|
||||
@@ -22772,7 +22765,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{35, 12}, {138, 18}}</string>
|
||||
<reference key="NSSuperview" ref="95449950"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">4</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="237340639">
|
||||
@@ -22795,12 +22787,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {250, 78}}</string>
|
||||
<reference key="NSSuperview" ref="675619133"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 215}, {252, 94}}</string>
|
||||
<reference key="NSSuperview" ref="279931197"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -22829,7 +22819,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{15, 32}, {177, 18}}</string>
|
||||
<reference key="NSSuperview" ref="203390539"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">5</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="53928666">
|
||||
@@ -22854,7 +22843,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{15, 12}, {130, 18}}</string>
|
||||
<reference key="NSSuperview" ref="203390539"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">6</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="594820217">
|
||||
@@ -22879,7 +22867,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">265</int>
|
||||
<string key="NSFrame">{{176, 54}, {27, 27}}</string>
|
||||
<reference key="NSSuperview" ref="203390539"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="926147032">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -22902,7 +22889,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{15, 61}, {157, 14}}</string>
|
||||
<reference key="NSSuperview" ref="203390539"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="273562193">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -22919,12 +22905,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {250, 85}}</string>
|
||||
<reference key="NSSuperview" ref="64774571"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 110}, {252, 101}}</string>
|
||||
<reference key="NSSuperview" ref="279931197"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -22945,7 +22929,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{62, 9}, {162, 19}}</string>
|
||||
<reference key="NSSuperview" ref="279931197"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="640490615">
|
||||
<int key="NSCellFlags">-2080374784</int>
|
||||
@@ -22979,7 +22962,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{15, 32}, {128, 18}}</string>
|
||||
<reference key="NSSuperview" ref="258424114"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">9</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="726346192">
|
||||
@@ -23004,7 +22986,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{15, 12}, {105, 18}}</string>
|
||||
<reference key="NSSuperview" ref="258424114"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="410848915">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -23026,12 +23007,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {250, 58}}</string>
|
||||
<reference key="NSSuperview" ref="872295948"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 32}, {252, 74}}</string>
|
||||
<reference key="NSSuperview" ref="279931197"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -23060,7 +23039,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{18, 38}, {145, 38}}</string>
|
||||
<reference key="NSSuperview" ref="959807644"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
<int key="NSNumRows">2</int>
|
||||
@@ -23302,7 +23280,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{198, 11}, {19, 27}}</string>
|
||||
<reference key="NSSuperview" ref="959807644"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSStepperCell" key="NSCell" id="400516713">
|
||||
<int key="NSCellFlags">67895328</int>
|
||||
@@ -23322,7 +23299,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{157, 16}, {40, 19}}</string>
|
||||
<reference key="NSSuperview" ref="959807644"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="992041947">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23382,7 +23358,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{74, 18}, {78, 14}}</string>
|
||||
<reference key="NSSuperview" ref="959807644"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="788309847">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23399,12 +23374,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</array>
|
||||
<string key="NSFrame">{{1, 1}, {250, 86}}</string>
|
||||
<reference key="NSSuperview" ref="625333914"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrame">{{17, 313}, {252, 102}}</string>
|
||||
<reference key="NSSuperview" ref="279931197"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSOffsets">{0, 0}</string>
|
||||
<object class="NSTextFieldCell" key="NSTitleCell">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -23422,8 +23395,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrameSize">{286, 533}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1920, 1177}}</string>
|
||||
<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||
@@ -23431,7 +23402,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<bool key="NSWindowIsRestorable">YES</bool>
|
||||
</object>
|
||||
<object class="NSCustomView" id="1047589062">
|
||||
<nil key="NSNextResponder"/>
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<array class="NSMutableArray" key="NSSubviews">
|
||||
<object class="NSTabView" id="765488716">
|
||||
@@ -23439,6 +23410,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">12</int>
|
||||
<string key="NSFrame">{{13, 131}, {240, 173}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<array class="NSMutableArray" key="NSTabViewItems">
|
||||
<object class="NSTabViewItem" id="677111712">
|
||||
<string key="NSIdentifier">APProfile1</string>
|
||||
@@ -23451,6 +23423,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{-1, 113}, {78, 14}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="248134801">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23469,6 +23442,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{105, 113}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="215725751">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23487,6 +23461,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{141, 113}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="693495382">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23505,6 +23480,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{177, 113}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="712625450">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23523,6 +23499,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{78, 111}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="813689229">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23583,6 +23560,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{114, 111}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="523568071">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23643,6 +23621,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{150, 111}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="759244391">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23703,6 +23682,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{186, 111}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="802945601">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23763,6 +23743,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{-1, 61}, {78, 14}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="335414139">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23781,6 +23762,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{105, 61}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="599056379">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23799,6 +23781,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{141, 61}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="508993908">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23817,6 +23800,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{177, 61}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="729663006">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -23835,6 +23819,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{78, 59}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="39780428">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23895,6 +23880,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{114, 59}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="337353623">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -23955,6 +23941,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{150, 59}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="188117828">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24015,6 +24002,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{186, 59}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="1002936840">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24075,6 +24063,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{-1, 34}, {78, 14}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="466379411">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24093,6 +24082,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{105, 34}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="1017974847">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24111,6 +24101,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{141, 34}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="118350312">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24129,6 +24120,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{177, 34}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="317987369">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24147,6 +24139,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{78, 32}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="696342921">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24207,6 +24200,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{114, 32}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="774996430">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24267,6 +24261,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{150, 32}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="334371039">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24327,6 +24322,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{186, 32}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="944476722">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24387,6 +24383,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{-1, 8}, {78, 14}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="217667141">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24405,6 +24402,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{105, 8}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="33184596">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24423,6 +24421,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{141, 8}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="860400728">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24441,6 +24440,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{177, 8}, {12, 17}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="976910532">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24459,6 +24459,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{78, 6}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="83858405">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24519,6 +24520,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{114, 6}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="589602506">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24579,6 +24581,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{150, 6}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="789924947">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24639,6 +24642,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{186, 6}, {30, 19}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="419271545">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -24699,6 +24703,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{1, 86}, {76, 14}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="562527656">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24717,6 +24722,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{93, 86}, {126, 14}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="263307556">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -24736,6 +24742,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{75, 81}, {19, 27}}</string>
|
||||
<reference key="NSSuperview" ref="218651205"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSStepperCell" key="NSCell" id="83887509">
|
||||
<int key="NSCellFlags">67895328</int>
|
||||
@@ -24752,6 +24759,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</array>
|
||||
<string key="NSFrame">{{10, 25}, {220, 135}}</string>
|
||||
<reference key="NSSuperview" ref="765488716"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
<string key="NSLabel">Profile 1</string>
|
||||
<reference key="NSColor" ref="266180242"/>
|
||||
@@ -27402,6 +27410,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{105, 305}, {140, 28}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="752111897">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -27423,6 +27432,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{109, 331}, {134, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="925349783">
|
||||
<int key="NSCellFlags">70254657</int>
|
||||
@@ -27442,6 +27452,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 331}, {88, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="548329957">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -27460,6 +27471,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{53, 9}, {154, 19}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="31187818">
|
||||
<int key="NSCellFlags">-2080374784</int>
|
||||
@@ -27481,6 +27493,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{107, 406}, {136, 22}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSPopUpButtonCell" key="NSCell" id="123761775">
|
||||
<int key="NSCellFlags">-2076180416</int>
|
||||
@@ -27705,6 +27718,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{107, 353}, {136, 22}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSPopUpButtonCell" key="NSCell" id="1065443010">
|
||||
<int key="NSCellFlags">-2076180416</int>
|
||||
@@ -27804,6 +27818,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 36}, {226, 98}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="848793508">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
@@ -27822,6 +27837,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{110, 381}, {133, 27}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSDatePickerCell" key="NSCell" id="239726529">
|
||||
<int key="NSCellFlags">71303168</int>
|
||||
@@ -27841,6 +27857,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 358}, {88, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="498265556">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -27859,6 +27876,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 385}, {88, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="316957117">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -27877,6 +27895,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 411}, {88, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="752577603">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -27895,6 +27914,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 457}, {88, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="540778151">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -27913,6 +27933,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 483}, {88, 14}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="299410061">
|
||||
<int key="NSCellFlags">68157504</int>
|
||||
@@ -27931,6 +27952,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{110, 434}, {130, 40}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="307489802">
|
||||
<int key="NSCellFlags">-1805647871</int>
|
||||
@@ -27951,6 +27973,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{110, 481}, {130, 19}}</string>
|
||||
<reference key="NSSuperview" ref="1047589062"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="962862279">
|
||||
<int key="NSCellFlags">-1804599231</int>
|
||||
@@ -27968,6 +27991,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</object>
|
||||
</array>
|
||||
<string key="NSFrameSize">{260, 513}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSClassName">NSView</string>
|
||||
</object>
|
||||
<object class="NSDrawer" id="401056227">
|
||||
@@ -46006,102 +46031,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
</object>
|
||||
<int key="connectionID">6663</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeAudioEngine:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="816179057"/>
|
||||
</object>
|
||||
<int key="connectionID">6680</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeAudioEngine:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="849068260"/>
|
||||
</object>
|
||||
<int key="connectionID">6681</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuAdvancedLogic:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="976158202"/>
|
||||
</object>
|
||||
<int key="connectionID">6682</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuInterpolationMode:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="819803843"/>
|
||||
</object>
|
||||
<int key="connectionID">6683</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuInterpolationMode:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="653769551"/>
|
||||
</object>
|
||||
<int key="connectionID">6684</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuInterpolationMode:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="483451617"/>
|
||||
</object>
|
||||
<int key="connectionID">6685</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuSyncMethod:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="60981736"/>
|
||||
</object>
|
||||
<int key="connectionID">6686</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuSyncMethod:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="954922427"/>
|
||||
</object>
|
||||
<int key="connectionID">6687</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuSyncMethod:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="393684306"/>
|
||||
</object>
|
||||
<int key="connectionID">6688</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuSyncMode:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="211612809"/>
|
||||
</object>
|
||||
<int key="connectionID">6689</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeSpuSyncMode:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="399829571"/>
|
||||
</object>
|
||||
<int key="connectionID">6690</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">changeVolume:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="856140601"/>
|
||||
</object>
|
||||
<int key="connectionID">6691</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">writeDefaults3DRenderingSettings:</string>
|
||||
@@ -84137,7 +84066,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
||||
<object class="IBToolTipAttribute" key="NS.object.0">
|
||||
<string key="name">ToolTip</string>
|
||||
<reference key="object" ref="849068260"/>
|
||||
<string key="toolTip">Native audio output engine for Mac OS X. Low CPU usage.</string>
|
||||
<string key="toolTip">Native audio output engine for macOS. Low CPU usage.</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="4003.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
|
@@ -27,19 +27,13 @@
|
||||
#endif
|
||||
|
||||
|
||||
class MacCoreAudioOutput : public ClientAudioOutput
|
||||
{
|
||||
public:
|
||||
MacCoreAudioOutput() {};
|
||||
~MacCoreAudioOutput() {};
|
||||
|
||||
// ClientEmulationOutput methods
|
||||
virtual void SetIdle(bool theState);
|
||||
};
|
||||
class DummyAudioOutputEngine;
|
||||
class MacCoreAudioOutputEngine;
|
||||
|
||||
@interface CocoaAudioController : NSObjectController
|
||||
{
|
||||
MacCoreAudioOutput *_audioOutput;
|
||||
MacCoreAudioOutputEngine *_audioEngineMacCoreAudio;
|
||||
ClientAudioOutput *_audioOutput;
|
||||
|
||||
NSNumber *_engineID;
|
||||
NSNumber *_volume;
|
||||
@@ -65,7 +59,7 @@ public:
|
||||
}
|
||||
|
||||
@property (assign, nonatomic, getter=darkMode, setter=setDarkMode:) BOOL _darkMode;
|
||||
@property (readonly, nonatomic, getter=audioOutput) MacCoreAudioOutput *_audioOutput;
|
||||
@property (readonly, nonatomic, getter=audioOutput) ClientAudioOutput *_audioOutput;
|
||||
@property (assign, nonatomic, getter=engineID, setter=setEngineID:) NSNumber *_engineID;
|
||||
@property (assign, nonatomic, getter=volume, setter=setVolume:) NSNumber *_volume;
|
||||
@property (assign, getter=speakerVolumeIcon, setter=setSpeakerVolumeIcon:) NSImage *_speakerVolumeIcon;
|
||||
|
@@ -18,26 +18,10 @@
|
||||
#import "CocoaAudioController.h"
|
||||
#import "cocoa_util.h"
|
||||
|
||||
#include "MacCoreAudioOutputEngine.h"
|
||||
#include "cocoa_globals.h"
|
||||
#include "sndOSX.h"
|
||||
|
||||
|
||||
void MacCoreAudioOutput::SetIdle(bool theState)
|
||||
{
|
||||
if (theState)
|
||||
{
|
||||
SNDOSXPauseAudio();
|
||||
}
|
||||
else
|
||||
{
|
||||
SNDOSXUnpauseAudio();
|
||||
}
|
||||
|
||||
ClientAudioOutput::SetIdle(theState);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation CocoaAudioController
|
||||
|
||||
@dynamic _darkMode;
|
||||
@@ -76,13 +60,14 @@ void MacCoreAudioOutput::SetIdle(bool theState)
|
||||
|
||||
_speakerVolumeIcon = (_darkMode) ? _iconSpeakerVolumeFullDM : _iconSpeakerVolumeFull;
|
||||
|
||||
_audioOutput = new MacCoreAudioOutput;
|
||||
_audioEngineMacCoreAudio = NULL;
|
||||
_audioOutput = new ClientAudioOutput;
|
||||
|
||||
_engineID = [[NSNumber numberWithInt:_audioOutput->GetEngineByID()] retain];
|
||||
_volume = [[NSNumber numberWithInt:_audioOutput->GetEngineByID()] retain];
|
||||
_spuInterpolationModeID = [[NSNumber numberWithInt:_audioOutput->GetEngineByID()] retain];
|
||||
_spuSyncModeID = [[NSNumber numberWithInt:_audioOutput->GetEngineByID()] retain];
|
||||
_spuSyncMethodID = [[NSNumber numberWithInt:_audioOutput->GetEngineByID()] retain];
|
||||
_volume = [[NSNumber numberWithFloat:_audioOutput->GetVolume()] retain];
|
||||
_spuInterpolationModeID = [[NSNumber numberWithInt:_audioOutput->GetSPUInterpolationModeByID()] retain];
|
||||
_spuSyncModeID = [[NSNumber numberWithInt:_audioOutput->GetSPUSyncModeByID()] retain];
|
||||
_spuSyncMethodID = [[NSNumber numberWithInt:_audioOutput->GetSPUSyncMethodByID()] retain];
|
||||
|
||||
_engineString = [[NSString stringWithCString:_audioOutput->GetEngineString() encoding:NSUTF8StringEncoding] retain];
|
||||
_spuInterpolationModeString = [[NSString stringWithCString:_audioOutput->GetSPUInterpolationModeString() encoding:NSUTF8StringEncoding] retain];
|
||||
@@ -96,6 +81,9 @@ void MacCoreAudioOutput::SetIdle(bool theState)
|
||||
delete _audioOutput;
|
||||
_audioOutput = NULL;
|
||||
|
||||
delete _audioEngineMacCoreAudio;
|
||||
_audioEngineMacCoreAudio = NULL;
|
||||
|
||||
[_engineID release];
|
||||
[_volume release];
|
||||
[_spuInterpolationModeID release];
|
||||
@@ -138,7 +126,36 @@ void MacCoreAudioOutput::SetIdle(bool theState)
|
||||
- (void) setEngineID:(NSNumber *)idNumber
|
||||
{
|
||||
int newEngineID = [idNumber intValue];
|
||||
_audioOutput->SetEngineByID(newEngineID);
|
||||
ClientAudioOutputEngine *newEngineObject = NULL;
|
||||
|
||||
if (newEngineID == _audioOutput->GetEngineByID())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (newEngineID)
|
||||
{
|
||||
case SNDCORE_MAC_COREAUDIO:
|
||||
{
|
||||
if (_audioEngineMacCoreAudio == NULL)
|
||||
{
|
||||
_audioEngineMacCoreAudio = new MacCoreAudioOutputEngine;
|
||||
newEngineObject = _audioEngineMacCoreAudio;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (newEngineID != SNDCORE_MAC_COREAUDIO)
|
||||
{
|
||||
delete _audioEngineMacCoreAudio;
|
||||
_audioEngineMacCoreAudio = NULL;
|
||||
}
|
||||
|
||||
_audioOutput->SetEngine(newEngineObject);
|
||||
[self setEngineString:_engineString];
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,241 @@
|
||||
/*
|
||||
Copyright (C) 2012-2025 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with the this software. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "MacCoreAudioOutputEngine.h"
|
||||
#include "coreaudiosound.h"
|
||||
|
||||
#include <CoreAudio/CoreAudio.h>
|
||||
#include "ringbuffer.h"
|
||||
#include "utilities.h"
|
||||
#include "cocoa_globals.h"
|
||||
|
||||
//#define FORCE_AUDIOCOMPONENT_10_5
|
||||
|
||||
|
||||
OSStatus CoreAudioOutputRenderCallback(void *inRefCon,
|
||||
AudioUnitRenderActionFlags *ioActionFlags,
|
||||
const AudioTimeStamp *inTimeStamp,
|
||||
UInt32 inBusNumber,
|
||||
UInt32 inNumberFrames,
|
||||
AudioBufferList *ioData)
|
||||
{
|
||||
RingBuffer *__restrict__ audioBuffer = (RingBuffer *)inRefCon;
|
||||
UInt8 *__restrict__ playbackBuffer = (UInt8 *)ioData->mBuffers[0].mData;
|
||||
const size_t framesRead = audioBuffer->read(playbackBuffer, inNumberFrames);
|
||||
|
||||
// Pad any remaining samples.
|
||||
if (framesRead < inNumberFrames)
|
||||
{
|
||||
const size_t frameSize = audioBuffer->getElementSize();
|
||||
memset(playbackBuffer + (framesRead * frameSize), 0, (inNumberFrames - framesRead) * frameSize);
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
MacCoreAudioOutputEngine::MacCoreAudioOutputEngine()
|
||||
{
|
||||
_engineID = SNDCORE_MAC_COREAUDIO;
|
||||
_engineString = "macOS Core Audio Sound Interface";
|
||||
_bufferSizeForSPUInit = SPU_BUFFER_BYTES;
|
||||
|
||||
OSStatus error = noErr;
|
||||
|
||||
_unfairlockAU = apple_unfairlock_create();
|
||||
|
||||
_buffer = new RingBuffer(_bufferSizeForSPUInit * 4 / SPU_SAMPLE_SIZE, SPU_SAMPLE_SIZE);
|
||||
_coreAudioVolume = 1.0f;
|
||||
|
||||
// Create a new audio unit
|
||||
#if !defined(FORCE_AUDIOCOMPONENT_10_5) && defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
|
||||
if (IsOSXVersionSupported(10, 6, 0))
|
||||
{
|
||||
AudioComponentDescription audioDesc;
|
||||
audioDesc.componentType = kAudioUnitType_Output;
|
||||
audioDesc.componentSubType = kAudioUnitSubType_DefaultOutput;
|
||||
audioDesc.componentManufacturer = kAudioUnitManufacturer_Apple;
|
||||
audioDesc.componentFlags = 0;
|
||||
audioDesc.componentFlagsMask = 0;
|
||||
|
||||
CreateAudioUnitInstance(&_au, &audioDesc);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ComponentDescription audioDesc;
|
||||
audioDesc.componentType = kAudioUnitType_Output;
|
||||
audioDesc.componentSubType = kAudioUnitSubType_DefaultOutput;
|
||||
audioDesc.componentManufacturer = kAudioUnitManufacturer_Apple;
|
||||
audioDesc.componentFlags = 0;
|
||||
audioDesc.componentFlagsMask = 0;
|
||||
|
||||
CreateAudioUnitInstance(&_au, &audioDesc);
|
||||
}
|
||||
|
||||
// Set the render callback
|
||||
AURenderCallbackStruct callback;
|
||||
callback.inputProc = &CoreAudioOutputRenderCallback;
|
||||
callback.inputProcRefCon = _buffer;
|
||||
|
||||
error = AudioUnitSetProperty(_au,
|
||||
kAudioUnitProperty_SetRenderCallback,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&callback,
|
||||
sizeof(callback) );
|
||||
|
||||
if (error != noErr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up the audio unit for audio streaming
|
||||
AudioStreamBasicDescription outputFormat;
|
||||
outputFormat.mSampleRate = SPU_SAMPLE_RATE;
|
||||
outputFormat.mFormatID = kAudioFormatLinearPCM;
|
||||
outputFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kLinearPCMFormatFlagIsPacked;
|
||||
outputFormat.mBytesPerPacket = SPU_SAMPLE_SIZE;
|
||||
outputFormat.mFramesPerPacket = 1;
|
||||
outputFormat.mBytesPerFrame = SPU_SAMPLE_SIZE;
|
||||
outputFormat.mChannelsPerFrame = SPU_NUMBER_CHANNELS;
|
||||
outputFormat.mBitsPerChannel = SPU_SAMPLE_RESOLUTION;
|
||||
|
||||
error = AudioUnitSetProperty(_au,
|
||||
kAudioUnitProperty_StreamFormat,
|
||||
kAudioUnitScope_Input,
|
||||
0,
|
||||
&outputFormat,
|
||||
sizeof(outputFormat) );
|
||||
|
||||
if (error != noErr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize our new audio unit
|
||||
error = AudioUnitInitialize(_au);
|
||||
if (error != noErr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MacCoreAudioOutputEngine::~MacCoreAudioOutputEngine()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
DestroyAudioUnitInstance(&this->_au);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
|
||||
delete this->_buffer;
|
||||
this->_buffer = NULL;
|
||||
|
||||
apple_unfairlock_destroy(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::Start()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioOutputUnitStop(this->_au);
|
||||
AudioUnitReset(this->_au, kAudioUnitScope_Global, 0);
|
||||
this->_buffer->clear();
|
||||
|
||||
if (!this->_isPaused)
|
||||
{
|
||||
AudioOutputUnitStart(this->_au);
|
||||
}
|
||||
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::Stop()
|
||||
{
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioOutputUnitStop(this->_au);
|
||||
AudioUnitReset(this->_au, kAudioUnitScope_Global, 0);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
|
||||
this->_buffer->clear();
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::SetMute(bool theState)
|
||||
{
|
||||
float vol = (theState) ? 0.0f : this->_coreAudioVolume;
|
||||
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioUnitSetParameter(this->_au, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, vol, 0);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::SetPause(bool theState)
|
||||
{
|
||||
ClientAudioOutputEngine::SetPause(theState);
|
||||
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
|
||||
if (theState)
|
||||
{
|
||||
AudioOutputUnitStop(this->_au);
|
||||
}
|
||||
else
|
||||
{
|
||||
AudioOutputUnitStart(this->_au);
|
||||
}
|
||||
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::SetVolume(int volume)
|
||||
{
|
||||
float newVolumeScalar = (float)volume / 100.0f;
|
||||
|
||||
if (volume > 100)
|
||||
{
|
||||
newVolumeScalar = 1.0f;
|
||||
}
|
||||
else if (volume < 0)
|
||||
{
|
||||
newVolumeScalar = 0.0f;
|
||||
}
|
||||
this->_coreAudioVolume = newVolumeScalar;
|
||||
|
||||
apple_unfairlock_lock(this->_unfairlockAU);
|
||||
AudioUnitSetParameter(this->_au, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, newVolumeScalar, 0);
|
||||
apple_unfairlock_unlock(this->_unfairlockAU);
|
||||
}
|
||||
|
||||
size_t MacCoreAudioOutputEngine::GetAvailableSamples() const
|
||||
{
|
||||
return this->_buffer->getAvailableElements();
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::WriteToBuffer(const void *inSamples, size_t numberSampleFrames)
|
||||
{
|
||||
size_t availableSampleFrames = this->_buffer->getAvailableElements();
|
||||
if (availableSampleFrames < numberSampleFrames)
|
||||
{
|
||||
this->_buffer->drop(numberSampleFrames - availableSampleFrames);
|
||||
}
|
||||
|
||||
this->_buffer->write(inSamples, numberSampleFrames);
|
||||
}
|
||||
|
||||
void MacCoreAudioOutputEngine::ClearBuffer()
|
||||
{
|
||||
this->_buffer->clear();
|
||||
}
|
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright (C) 2025 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with the this software. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _MAC_COREAUDIO_OUTPUT_H_
|
||||
#define _MAC_COREAUDIO_OUTPUT_H_
|
||||
|
||||
#include <CoreServices/CoreServices.h>
|
||||
#include <AudioUnit/AudioUnit.h>
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
#include "ClientAudioOutput.h"
|
||||
|
||||
#define SNDCORE_MAC_COREAUDIO 58325 //hopefully this is unique number
|
||||
|
||||
|
||||
class RingBuffer;
|
||||
|
||||
class MacCoreAudioOutputEngine : public ClientAudioOutputEngine
|
||||
{
|
||||
protected:
|
||||
AudioUnit _au;
|
||||
RingBuffer *_buffer;
|
||||
apple_unfairlock_t _unfairlockAU;
|
||||
float _coreAudioVolume;
|
||||
|
||||
public:
|
||||
MacCoreAudioOutputEngine();
|
||||
~MacCoreAudioOutputEngine();
|
||||
|
||||
// ClientAudioOutputEngine methods
|
||||
virtual void Start();
|
||||
virtual void Stop();
|
||||
virtual void SetMute(bool theState);
|
||||
virtual void SetPause(bool theState);
|
||||
virtual void SetVolume(int volume);
|
||||
|
||||
virtual size_t GetAvailableSamples() const;
|
||||
virtual void WriteToBuffer(const void *inSamples, size_t numberSampleFrames);
|
||||
virtual void ClearBuffer();
|
||||
};
|
||||
|
||||
OSStatus CoreAudioOutputRenderCallback(void *inRefCon,
|
||||
AudioUnitRenderActionFlags *ioActionFlags,
|
||||
const AudioTimeStamp *inTimeStamp,
|
||||
UInt32 inBusNumber,
|
||||
UInt32 inNumberFrames,
|
||||
AudioBufferList *ioData);
|
||||
|
||||
#endif // _MAC_COREAUDIO_OUTPUT_H_
|
Reference in New Issue
Block a user