@@ -6,6 +6,11 @@ | |||||
*.ncb | *.ncb | ||||
*.suo | *.suo | ||||
*.obj | *.obj | ||||
*.ilk | |||||
*.pch | |||||
*.pdb | |||||
*.dep | |||||
*.idb | |||||
extras/juce demo/build/macosx/build | extras/juce demo/build/macosx/build | ||||
extras/juce demo/build/win32_vc8/Debug | extras/juce demo/build/win32_vc8/Debug | ||||
extras/juce demo/build/win32_vc8/Release | extras/juce demo/build/win32_vc8/Release | ||||
@@ -41,15 +41,13 @@ function sendCallbackObjectToPlugin() | |||||
</script> | </script> | ||||
<!-- This tag works in IE - for Netscape plugins, remove or rename the classid tag | |||||
and it should use the npapi plugin instead --> | |||||
<object id="plugin" | <object id="plugin" | ||||
type="application/npjucedemo-plugin" | type="application/npjucedemo-plugin" | ||||
classid="CLSID:F683B990-3ADF-11DE-BDFE-F9CB55D89593" | classid="CLSID:F683B990-3ADF-11DE-BDFE-F9CB55D89593" | ||||
width="80%" height="400"> | width="80%" height="400"> | ||||
<embed src="" type="application/npjucedemo-plugin" width="80%" height="400"></embed> | |||||
</object> | </object> | ||||
<br> | <br> | ||||
<form name="formname"> | <form name="formname"> | ||||
<input type=button value="Tell the plugin to show a message" onclick='showAMessage()'> | <input type=button value="Tell the plugin to show a message" onclick='showAMessage()'> | ||||
@@ -73,6 +73,18 @@ | |||||
#define JUCE_ASIO 1 | #define JUCE_ASIO 1 | ||||
#endif | #endif | ||||
/** Comment out this macro to disable the Windows WASAPI audio device type. | |||||
*/ | |||||
#ifndef JUCE_WASAPI | |||||
// #define JUCE_WASAPI 1 | |||||
#endif | |||||
/** Comment out this macro to disable the Windows WASAPI audio device type. | |||||
*/ | |||||
#ifndef JUCE_DIRECTSOUND | |||||
#define JUCE_DIRECTSOUND 1 | |||||
#endif | |||||
/** Comment out this macro to disable building of ALSA device support on Linux. | /** Comment out this macro to disable building of ALSA device support on Linux. | ||||
*/ | */ | ||||
#ifndef JUCE_ALSA | #ifndef JUCE_ALSA | ||||
@@ -118,6 +118,18 @@ | |||||
#define JUCE_ASIO 1 | #define JUCE_ASIO 1 | ||||
#endif | #endif | ||||
/** Comment out this macro to disable the Windows WASAPI audio device type. | |||||
*/ | |||||
#ifndef JUCE_WASAPI | |||||
// #define JUCE_WASAPI 1 | |||||
#endif | |||||
/** Comment out this macro to disable the Windows WASAPI audio device type. | |||||
*/ | |||||
#ifndef JUCE_DIRECTSOUND | |||||
#define JUCE_DIRECTSOUND 1 | |||||
#endif | |||||
/** Comment out this macro to disable building of ALSA device support on Linux. | /** Comment out this macro to disable building of ALSA device support on Linux. | ||||
*/ | */ | ||||
#ifndef JUCE_ALSA | #ifndef JUCE_ALSA | ||||
@@ -8206,6 +8218,7 @@ public: | |||||
Win2000 = 0x4105, | Win2000 = 0x4105, | ||||
WinXP = 0x4106, | WinXP = 0x4106, | ||||
WinVista = 0x4107, | WinVista = 0x4107, | ||||
Windows7 = 0x4108, | |||||
Windows = 0x4000, /**< To test whether any version of Windows is running, | Windows = 0x4000, /**< To test whether any version of Windows is running, | ||||
you can use the expression ((getOperatingSystemType() & Windows) != 0). */ | you can use the expression ((getOperatingSystemType() & Windows) != 0). */ | ||||
@@ -37167,72 +37180,6 @@ private: | |||||
#endif | #endif | ||||
#ifndef __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ | #ifndef __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ | ||||
#endif | |||||
#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_AudioSubsectionReader.h *********/ | |||||
#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
#define __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
/** | |||||
This class is used to wrap an AudioFormatReader and only read from a | |||||
subsection of the file. | |||||
So if you have a reader which can read a 1000 sample file, you could wrap it | |||||
in one of these to only access, e.g. samples 100 to 200, and any samples | |||||
outside that will come back as 0. Accessing sample 0 from this reader will | |||||
actually read the first sample from the other's subsection, which might | |||||
be at a non-zero position. | |||||
@see AudioFormatReader | |||||
*/ | |||||
class JUCE_API AudioSubsectionReader : public AudioFormatReader | |||||
{ | |||||
public: | |||||
/** Creates a AudioSubsectionReader for a given data source. | |||||
@param sourceReader the source reader from which we'll be taking data | |||||
@param subsectionStartSample the sample within the source reader which will be | |||||
mapped onto sample 0 for this reader. | |||||
@param subsectionLength the number of samples from the source that will | |||||
make up the subsection. If this reader is asked for | |||||
any samples beyond this region, it will return zero. | |||||
@param deleteSourceWhenDeleted if true, the sourceReader object will be deleted when | |||||
this object is deleted. | |||||
*/ | |||||
AudioSubsectionReader (AudioFormatReader* const sourceReader, | |||||
const int64 subsectionStartSample, | |||||
const int64 subsectionLength, | |||||
const bool deleteSourceWhenDeleted); | |||||
/** Destructor. */ | |||||
~AudioSubsectionReader(); | |||||
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, | |||||
int64 startSampleInFile, int numSamples); | |||||
void readMaxLevels (int64 startSample, | |||||
int64 numSamples, | |||||
float& lowestLeft, | |||||
float& highestLeft, | |||||
float& lowestRight, | |||||
float& highestRight); | |||||
juce_UseDebuggingNewOperator | |||||
private: | |||||
AudioFormatReader* const source; | |||||
int64 startSample, length; | |||||
const bool deleteSourceWhenDeleted; | |||||
AudioSubsectionReader (const AudioSubsectionReader&); | |||||
const AudioSubsectionReader& operator= (const AudioSubsectionReader&); | |||||
}; | |||||
#endif // __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
/********* End of inlined file: juce_AudioSubsectionReader.h *********/ | |||||
#endif | #endif | ||||
#ifndef __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ | #ifndef __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ | ||||
@@ -37387,6 +37334,72 @@ private: | |||||
#endif // __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ | #endif // __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ | ||||
/********* End of inlined file: juce_AudioThumbnail.h *********/ | /********* End of inlined file: juce_AudioThumbnail.h *********/ | ||||
#endif | |||||
#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_AudioSubsectionReader.h *********/ | |||||
#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
#define __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
/** | |||||
This class is used to wrap an AudioFormatReader and only read from a | |||||
subsection of the file. | |||||
So if you have a reader which can read a 1000 sample file, you could wrap it | |||||
in one of these to only access, e.g. samples 100 to 200, and any samples | |||||
outside that will come back as 0. Accessing sample 0 from this reader will | |||||
actually read the first sample from the other's subsection, which might | |||||
be at a non-zero position. | |||||
@see AudioFormatReader | |||||
*/ | |||||
class JUCE_API AudioSubsectionReader : public AudioFormatReader | |||||
{ | |||||
public: | |||||
/** Creates a AudioSubsectionReader for a given data source. | |||||
@param sourceReader the source reader from which we'll be taking data | |||||
@param subsectionStartSample the sample within the source reader which will be | |||||
mapped onto sample 0 for this reader. | |||||
@param subsectionLength the number of samples from the source that will | |||||
make up the subsection. If this reader is asked for | |||||
any samples beyond this region, it will return zero. | |||||
@param deleteSourceWhenDeleted if true, the sourceReader object will be deleted when | |||||
this object is deleted. | |||||
*/ | |||||
AudioSubsectionReader (AudioFormatReader* const sourceReader, | |||||
const int64 subsectionStartSample, | |||||
const int64 subsectionLength, | |||||
const bool deleteSourceWhenDeleted); | |||||
/** Destructor. */ | |||||
~AudioSubsectionReader(); | |||||
bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, | |||||
int64 startSampleInFile, int numSamples); | |||||
void readMaxLevels (int64 startSample, | |||||
int64 numSamples, | |||||
float& lowestLeft, | |||||
float& highestLeft, | |||||
float& lowestRight, | |||||
float& highestRight); | |||||
juce_UseDebuggingNewOperator | |||||
private: | |||||
AudioFormatReader* const source; | |||||
int64 startSample, length; | |||||
const bool deleteSourceWhenDeleted; | |||||
AudioSubsectionReader (const AudioSubsectionReader&); | |||||
const AudioSubsectionReader& operator= (const AudioSubsectionReader&); | |||||
}; | |||||
#endif // __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
/********* End of inlined file: juce_AudioSubsectionReader.h *********/ | |||||
#endif | #endif | ||||
#ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ | #ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ | ||||
@@ -37501,114 +37514,6 @@ public: | |||||
#endif // __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ | #endif // __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ | ||||
/********* End of inlined file: juce_FlacAudioFormat.h *********/ | /********* End of inlined file: juce_FlacAudioFormat.h *********/ | ||||
#endif | |||||
#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_OggVorbisAudioFormat.h *********/ | |||||
#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
#define __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
#if JUCE_USE_OGGVORBIS || defined (DOXYGEN) | |||||
/** | |||||
Reads and writes the Ogg-Vorbis audio format. | |||||
To compile this, you'll need to set the JUCE_USE_OGGVORBIS flag in juce_Config.h, | |||||
and make sure your include search path and library search path are set up to find | |||||
the Vorbis and Ogg header files and static libraries. | |||||
@see AudioFormat, | |||||
*/ | |||||
class JUCE_API OggVorbisAudioFormat : public AudioFormat | |||||
{ | |||||
public: | |||||
OggVorbisAudioFormat(); | |||||
~OggVorbisAudioFormat(); | |||||
const Array <int> getPossibleSampleRates(); | |||||
const Array <int> getPossibleBitDepths(); | |||||
bool canDoStereo(); | |||||
bool canDoMono(); | |||||
bool isCompressed(); | |||||
const StringArray getQualityOptions(); | |||||
/** Tries to estimate the quality level of an ogg file based on its size. | |||||
If it can't read the file for some reason, this will just return 1 (medium quality), | |||||
otherwise it will return the approximate quality setting that would have been used | |||||
to create the file. | |||||
@see getQualityOptions | |||||
*/ | |||||
int estimateOggFileQuality (const File& source); | |||||
AudioFormatReader* createReaderFor (InputStream* sourceStream, | |||||
const bool deleteStreamIfOpeningFails); | |||||
AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, | |||||
double sampleRateToUse, | |||||
unsigned int numberOfChannels, | |||||
int bitsPerSample, | |||||
const StringPairArray& metadataValues, | |||||
int qualityOptionIndex); | |||||
juce_UseDebuggingNewOperator | |||||
}; | |||||
#endif | |||||
#endif // __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
/********* End of inlined file: juce_OggVorbisAudioFormat.h *********/ | |||||
#endif | |||||
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_QuickTimeAudioFormat.h *********/ | |||||
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
#define __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
#if JUCE_QUICKTIME | |||||
/** | |||||
Uses QuickTime to read the audio track a movie or media file. | |||||
As well as QuickTime movies, this should also manage to open other audio | |||||
files that quicktime can understand, like mp3, m4a, etc. | |||||
@see AudioFormat | |||||
*/ | |||||
class JUCE_API QuickTimeAudioFormat : public AudioFormat | |||||
{ | |||||
public: | |||||
/** Creates a format object. */ | |||||
QuickTimeAudioFormat(); | |||||
/** Destructor. */ | |||||
~QuickTimeAudioFormat(); | |||||
const Array <int> getPossibleSampleRates(); | |||||
const Array <int> getPossibleBitDepths(); | |||||
bool canDoStereo(); | |||||
bool canDoMono(); | |||||
AudioFormatReader* createReaderFor (InputStream* sourceStream, | |||||
const bool deleteStreamIfOpeningFails); | |||||
AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, | |||||
double sampleRateToUse, | |||||
unsigned int numberOfChannels, | |||||
int bitsPerSample, | |||||
const StringPairArray& metadataValues, | |||||
int qualityOptionIndex); | |||||
juce_UseDebuggingNewOperator | |||||
}; | |||||
#endif | |||||
#endif // __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
/********* End of inlined file: juce_QuickTimeAudioFormat.h *********/ | |||||
#endif | #endif | ||||
#ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ | #ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ | ||||
@@ -37731,6 +37636,114 @@ public: | |||||
#endif // __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ | #endif // __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ | ||||
/********* End of inlined file: juce_WavAudioFormat.h *********/ | /********* End of inlined file: juce_WavAudioFormat.h *********/ | ||||
#endif | |||||
#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_OggVorbisAudioFormat.h *********/ | |||||
#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
#define __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
#if JUCE_USE_OGGVORBIS || defined (DOXYGEN) | |||||
/** | |||||
Reads and writes the Ogg-Vorbis audio format. | |||||
To compile this, you'll need to set the JUCE_USE_OGGVORBIS flag in juce_Config.h, | |||||
and make sure your include search path and library search path are set up to find | |||||
the Vorbis and Ogg header files and static libraries. | |||||
@see AudioFormat, | |||||
*/ | |||||
class JUCE_API OggVorbisAudioFormat : public AudioFormat | |||||
{ | |||||
public: | |||||
OggVorbisAudioFormat(); | |||||
~OggVorbisAudioFormat(); | |||||
const Array <int> getPossibleSampleRates(); | |||||
const Array <int> getPossibleBitDepths(); | |||||
bool canDoStereo(); | |||||
bool canDoMono(); | |||||
bool isCompressed(); | |||||
const StringArray getQualityOptions(); | |||||
/** Tries to estimate the quality level of an ogg file based on its size. | |||||
If it can't read the file for some reason, this will just return 1 (medium quality), | |||||
otherwise it will return the approximate quality setting that would have been used | |||||
to create the file. | |||||
@see getQualityOptions | |||||
*/ | |||||
int estimateOggFileQuality (const File& source); | |||||
AudioFormatReader* createReaderFor (InputStream* sourceStream, | |||||
const bool deleteStreamIfOpeningFails); | |||||
AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, | |||||
double sampleRateToUse, | |||||
unsigned int numberOfChannels, | |||||
int bitsPerSample, | |||||
const StringPairArray& metadataValues, | |||||
int qualityOptionIndex); | |||||
juce_UseDebuggingNewOperator | |||||
}; | |||||
#endif | |||||
#endif // __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | |||||
/********* End of inlined file: juce_OggVorbisAudioFormat.h *********/ | |||||
#endif | |||||
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_QuickTimeAudioFormat.h *********/ | |||||
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
#define __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
#if JUCE_QUICKTIME | |||||
/** | |||||
Uses QuickTime to read the audio track a movie or media file. | |||||
As well as QuickTime movies, this should also manage to open other audio | |||||
files that quicktime can understand, like mp3, m4a, etc. | |||||
@see AudioFormat | |||||
*/ | |||||
class JUCE_API QuickTimeAudioFormat : public AudioFormat | |||||
{ | |||||
public: | |||||
/** Creates a format object. */ | |||||
QuickTimeAudioFormat(); | |||||
/** Destructor. */ | |||||
~QuickTimeAudioFormat(); | |||||
const Array <int> getPossibleSampleRates(); | |||||
const Array <int> getPossibleBitDepths(); | |||||
bool canDoStereo(); | |||||
bool canDoMono(); | |||||
AudioFormatReader* createReaderFor (InputStream* sourceStream, | |||||
const bool deleteStreamIfOpeningFails); | |||||
AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, | |||||
double sampleRateToUse, | |||||
unsigned int numberOfChannels, | |||||
int bitsPerSample, | |||||
const StringPairArray& metadataValues, | |||||
int qualityOptionIndex); | |||||
juce_UseDebuggingNewOperator | |||||
}; | |||||
#endif | |||||
#endif // __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | |||||
/********* End of inlined file: juce_QuickTimeAudioFormat.h *********/ | |||||
#endif | #endif | ||||
#ifndef __JUCE_ACTIONBROADCASTER_JUCEHEADER__ | #ifndef __JUCE_ACTIONBROADCASTER_JUCEHEADER__ | ||||
@@ -41118,7 +41131,11 @@ private: | |||||
/********* End of inlined file: juce_ImageFileFormat.h *********/ | /********* End of inlined file: juce_ImageFileFormat.h *********/ | ||||
#endif | #endif | ||||
#ifndef __JUCE_DRAWABLE_JUCEHEADER__ | |||||
#ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_DrawableComposite.h *********/ | |||||
#ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | |||||
#define __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_Drawable.h *********/ | /********* Start of inlined file: juce_Drawable.h *********/ | ||||
#ifndef __JUCE_DRAWABLE_JUCEHEADER__ | #ifndef __JUCE_DRAWABLE_JUCEHEADER__ | ||||
@@ -41274,13 +41291,6 @@ private: | |||||
#endif // __JUCE_DRAWABLE_JUCEHEADER__ | #endif // __JUCE_DRAWABLE_JUCEHEADER__ | ||||
/********* End of inlined file: juce_Drawable.h *********/ | /********* End of inlined file: juce_Drawable.h *********/ | ||||
#endif | |||||
#ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | |||||
/********* Start of inlined file: juce_DrawableComposite.h *********/ | |||||
#ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | |||||
#define __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | |||||
/** | /** | ||||
A drawable object which acts as a container for a set of other Drawables. | A drawable object which acts as a container for a set of other Drawables. | ||||
@@ -41399,6 +41409,9 @@ private: | |||||
#endif // __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | #endif // __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | ||||
/********* End of inlined file: juce_DrawableComposite.h *********/ | /********* End of inlined file: juce_DrawableComposite.h *********/ | ||||
#endif | |||||
#ifndef __JUCE_DRAWABLE_JUCEHEADER__ | |||||
#endif | #endif | ||||
#ifndef __JUCE_DRAWABLEIMAGE_JUCEHEADER__ | #ifndef __JUCE_DRAWABLEIMAGE_JUCEHEADER__ | ||||
@@ -204,7 +204,7 @@ void AudioFormatReader::readMaxLevels (int64 startSampleInFile, | |||||
numSamples -= numToDo; | numSamples -= numToDo; | ||||
startSampleInFile += numToDo; | startSampleInFile += numToDo; | ||||
for (int j = numChannels; --j >= 0;) | for (int j = numChannels; --j >= 0;) | ||||
{ | { | ||||
int bufMax = INT_MIN; | int bufMax = INT_MIN; | ||||
@@ -107,30 +107,36 @@ const OwnedArray <AudioIODeviceType>& AudioDeviceManager::getAvailableDeviceType | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
extern AudioIODeviceType* juce_createDefaultAudioIODeviceType(); | |||||
#if JUCE_WIN32 && JUCE_ASIO | |||||
extern AudioIODeviceType* juce_createASIOAudioIODeviceType(); | |||||
#endif | |||||
#if JUCE_WIN32 && JUCE_WDM_AUDIO | |||||
extern AudioIODeviceType* juce_createWDMAudioIODeviceType(); | |||||
#endif | |||||
AudioIODeviceType* juce_createAudioIODeviceType_CoreAudio(); | |||||
AudioIODeviceType* juce_createAudioIODeviceType_WASAPI(); | |||||
AudioIODeviceType* juce_createAudioIODeviceType_DirectSound(); | |||||
AudioIODeviceType* juce_createAudioIODeviceType_ASIO(); | |||||
AudioIODeviceType* juce_createAudioIODeviceType_ALSA(); | |||||
void AudioDeviceManager::createAudioDeviceTypes (OwnedArray <AudioIODeviceType>& list) | void AudioDeviceManager::createAudioDeviceTypes (OwnedArray <AudioIODeviceType>& list) | ||||
{ | { | ||||
AudioIODeviceType* const defaultDeviceType = juce_createDefaultAudioIODeviceType(); | |||||
#if JUCE_WIN32 | |||||
#if JUCE_WASAPI | |||||
if (SystemStats::getOperatingSystemType() >= SystemStats::WinVista) | |||||
list.add (juce_createAudioIODeviceType_WASAPI()); | |||||
#endif | |||||
#if JUCE_DIRECTSOUND | |||||
list.add (juce_createAudioIODeviceType_DirectSound()); | |||||
#endif | |||||
if (defaultDeviceType != 0) | |||||
list.add (defaultDeviceType); | |||||
#if JUCE_ASIO | |||||
list.add (juce_createAudioIODeviceType_ASIO()); | |||||
#endif | |||||
#endif | |||||
#if JUCE_WIN32 && JUCE_ASIO | |||||
list.add (juce_createASIOAudioIODeviceType()); | |||||
#endif | |||||
#if JUCE_MAC | |||||
list.add (juce_createAudioIODeviceType_CoreAudio()); | |||||
#endif | |||||
#if JUCE_WIN32 && JUCE_WDM_AUDIO | |||||
list.add (juce_createWDMAudioIODeviceType()); | |||||
#endif | |||||
#if JUCE_LINUX && JUCE_ALSA | |||||
list.add (juce_createAudioIODeviceType_ALSA()); | |||||
#endif | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
@@ -60,6 +60,7 @@ public: | |||||
Win2000 = 0x4105, | Win2000 = 0x4105, | ||||
WinXP = 0x4106, | WinXP = 0x4106, | ||||
WinVista = 0x4107, | WinVista = 0x4107, | ||||
Windows7 = 0x4108, | |||||
Windows = 0x4000, /**< To test whether any version of Windows is running, | Windows = 0x4000, /**< To test whether any version of Windows is running, | ||||
you can use the expression ((getOperatingSystemType() & Windows) != 0). */ | you can use the expression ((getOperatingSystemType() & Windows) != 0). */ | ||||
@@ -203,27 +203,27 @@ | |||||
#ifndef __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ | #ifndef __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ | ||||
#include "audio/audio_file_formats/juce_AudioFormatWriter.h" | #include "audio/audio_file_formats/juce_AudioFormatWriter.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
#include "audio/audio_file_formats/juce_AudioSubsectionReader.h" | |||||
#endif | |||||
#ifndef __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ | #ifndef __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ | ||||
#include "audio/audio_file_formats/juce_AudioThumbnail.h" | #include "audio/audio_file_formats/juce_AudioThumbnail.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ | |||||
#include "audio/audio_file_formats/juce_AudioSubsectionReader.h" | |||||
#endif | |||||
#ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ | #ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ | ||||
#include "audio/audio_file_formats/juce_AudioThumbnailCache.h" | #include "audio/audio_file_formats/juce_AudioThumbnailCache.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ | #ifndef __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ | ||||
#include "audio/audio_file_formats/juce_FlacAudioFormat.h" | #include "audio/audio_file_formats/juce_FlacAudioFormat.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ | |||||
#include "audio/audio_file_formats/juce_WavAudioFormat.h" | |||||
#endif | |||||
#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | #ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ | ||||
#include "audio/audio_file_formats/juce_OggVorbisAudioFormat.h" | #include "audio/audio_file_formats/juce_OggVorbisAudioFormat.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | #ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ | ||||
#include "audio/audio_file_formats/juce_QuickTimeAudioFormat.h" | #include "audio/audio_file_formats/juce_QuickTimeAudioFormat.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ | |||||
#include "audio/audio_file_formats/juce_WavAudioFormat.h" | |||||
#endif | |||||
#ifndef __JUCE_ACTIONBROADCASTER_JUCEHEADER__ | #ifndef __JUCE_ACTIONBROADCASTER_JUCEHEADER__ | ||||
#include "events/juce_ActionBroadcaster.h" | #include "events/juce_ActionBroadcaster.h" | ||||
#endif | #endif | ||||
@@ -371,12 +371,12 @@ | |||||
#ifndef __JUCE_IMAGEFILEFORMAT_JUCEHEADER__ | #ifndef __JUCE_IMAGEFILEFORMAT_JUCEHEADER__ | ||||
#include "gui/graphics/imaging/juce_ImageFileFormat.h" | #include "gui/graphics/imaging/juce_ImageFileFormat.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_DRAWABLE_JUCEHEADER__ | |||||
#include "gui/graphics/drawables/juce_Drawable.h" | |||||
#endif | |||||
#ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | #ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ | ||||
#include "gui/graphics/drawables/juce_DrawableComposite.h" | #include "gui/graphics/drawables/juce_DrawableComposite.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_DRAWABLE_JUCEHEADER__ | |||||
#include "gui/graphics/drawables/juce_Drawable.h" | |||||
#endif | |||||
#ifndef __JUCE_DRAWABLEIMAGE_JUCEHEADER__ | #ifndef __JUCE_DRAWABLEIMAGE_JUCEHEADER__ | ||||
#include "gui/graphics/drawables/juce_DrawableImage.h" | #include "gui/graphics/drawables/juce_DrawableImage.h" | ||||
#endif | #endif | ||||
@@ -105,6 +105,7 @@ BEGIN_JUCE_NAMESPACE | |||||
#include "windows/juce_win32_Midi.cpp" | #include "windows/juce_win32_Midi.cpp" | ||||
#include "windows/juce_win32_ASIO.cpp" | #include "windows/juce_win32_ASIO.cpp" | ||||
#include "windows/juce_win32_DirectSound.cpp" | #include "windows/juce_win32_DirectSound.cpp" | ||||
#include "windows/juce_win32_WASAPI.cpp" | |||||
#include "windows/juce_win32_CameraDevice.cpp" | #include "windows/juce_win32_CameraDevice.cpp" | ||||
#endif | #endif | ||||
@@ -25,9 +25,7 @@ | |||||
// (This file gets included by juce_linux_NativeCode.cpp, rather than being | // (This file gets included by juce_linux_NativeCode.cpp, rather than being | ||||
// compiled on its own). | // compiled on its own). | ||||
#ifdef JUCE_INCLUDED_FILE | |||||
#if JUCE_ALSA | |||||
#ifdef JUCE_INCLUDED_FILE && JUCE_ALSA | |||||
//============================================================================== | //============================================================================== | ||||
static const int maxNumChans = 64; | static const int maxNumChans = 64; | ||||
@@ -992,18 +990,9 @@ private: | |||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
AudioIODeviceType* juce_createDefaultAudioIODeviceType() | |||||
AudioIODeviceType* juce_createAudioIODeviceType_ALSA() | |||||
{ | { | ||||
return new ALSAAudioIODeviceType(); | return new ALSAAudioIODeviceType(); | ||||
} | } | ||||
//============================================================================== | |||||
#else // if ALSA is turned off.. | |||||
AudioIODeviceType* juce_createDefaultAudioIODeviceType() | |||||
{ | |||||
return 0; | |||||
} | |||||
#endif | |||||
#endif | #endif |
@@ -169,7 +169,7 @@ public: | |||||
zerostruct (channelName); | zerostruct (channelName); | ||||
UInt32 nameSize = sizeof (channelName); | UInt32 nameSize = sizeof (channelName); | ||||
if (AudioDeviceGetProperty (deviceID, chanNum + 1, input, kAudioDevicePropertyChannelName, | |||||
if (AudioDeviceGetProperty (deviceID, chanNum + 1, input, kAudioDevicePropertyChannelName, | |||||
&nameSize, &channelName) == noErr) | &nameSize, &channelName) == noErr) | ||||
name = String::fromUTF8 (channelName, nameSize); | name = String::fromUTF8 (channelName, nameSize); | ||||
} | } | ||||
@@ -1310,7 +1310,7 @@ private: | |||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
AudioIODeviceType* juce_createDefaultAudioIODeviceType() | |||||
AudioIODeviceType* juce_createAudioIODeviceType_CoreAudio() | |||||
{ | { | ||||
return new CoreAudioIODeviceType(); | return new CoreAudioIODeviceType(); | ||||
} | } | ||||
@@ -1949,7 +1949,7 @@ private: | |||||
const ASIOAudioIODeviceType& operator= (const ASIOAudioIODeviceType&); | const ASIOAudioIODeviceType& operator= (const ASIOAudioIODeviceType&); | ||||
}; | }; | ||||
AudioIODeviceType* juce_createASIOAudioIODeviceType() | |||||
AudioIODeviceType* juce_createAudioIODeviceType_ASIO() | |||||
{ | { | ||||
return new ASIOAudioIODeviceType(); | return new ASIOAudioIODeviceType(); | ||||
} | } | ||||
@@ -25,7 +25,7 @@ | |||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being | // (This file gets included by juce_win32_NativeCode.cpp, rather than being | ||||
// compiled on its own). | // compiled on its own). | ||||
#if JUCE_INCLUDED_FILE | |||||
#if JUCE_INCLUDED_FILE && JUCE_DIRECTSOUND | |||||
//============================================================================== | //============================================================================== | ||||
END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
@@ -1491,12 +1491,6 @@ private: | |||||
const DSoundAudioIODeviceType& operator= (const DSoundAudioIODeviceType&); | const DSoundAudioIODeviceType& operator= (const DSoundAudioIODeviceType&); | ||||
}; | }; | ||||
//============================================================================== | |||||
AudioIODeviceType* juce_createDefaultAudioIODeviceType() | |||||
{ | |||||
return new DSoundAudioIODeviceType(); | |||||
} | |||||
//============================================================================== | //============================================================================== | ||||
const String DSoundAudioIODevice::openDevice (const BitArray& inputChannels, | const String DSoundAudioIODevice::openDevice (const BitArray& inputChannels, | ||||
const BitArray& outputChannels, | const BitArray& outputChannels, | ||||
@@ -1633,6 +1627,12 @@ const String DSoundAudioIODevice::openDevice (const BitArray& inputChannels, | |||||
return error; | return error; | ||||
} | } | ||||
//============================================================================== | |||||
AudioIODeviceType* juce_createAudioIODeviceType_DirectSound() | |||||
{ | |||||
return new DSoundAudioIODeviceType(); | |||||
} | |||||
#undef log | #undef log | ||||
@@ -133,6 +133,14 @@ | |||||
#include <qedit.h> | #include <qedit.h> | ||||
#endif | #endif | ||||
//============================================================================== | |||||
#if JUCE_WASAPI | |||||
#include <MMReg.h> | |||||
#include <mmdeviceapi.h> | |||||
#include <Audioclient.h> | |||||
#include <functiondiscoverykeys.h> | |||||
#endif | |||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_QUICKTIME | #if JUCE_QUICKTIME | ||||
@@ -258,7 +258,7 @@ SystemStats::OperatingSystemType SystemStats::getOperatingSystemType() throw() | |||||
return (info.dwMinorVersion == 0) ? Win2000 : WinXP; | return (info.dwMinorVersion == 0) ? Win2000 : WinXP; | ||||
case 6: | case 6: | ||||
return WinVista; | |||||
return (info.dwMinorVersion == 0) ? WinVista : Windows7; | |||||
default: | default: | ||||
jassertfalse // !! not a supported OS! | jassertfalse // !! not a supported OS! | ||||
@@ -431,15 +431,161 @@ int64 CharacterFunctions::getInt64Value (const juce_wchar* s) throw() | |||||
#endif | #endif | ||||
} | } | ||||
//============================================================================== | |||||
static double juce_mulexp10 (const double value, int exponent) throw() | |||||
{ | |||||
if (exponent == 0) | |||||
return value; | |||||
if (value == 0) | |||||
return 0; | |||||
const bool negative = (exponent < 0); | |||||
if (negative) | |||||
exponent = -exponent; | |||||
double result = 1.0, power = 10.0; | |||||
for (int bit = 1; exponent != 0; bit <<= 1) | |||||
{ | |||||
if ((exponent & bit) != 0) | |||||
{ | |||||
exponent ^= bit; | |||||
result *= power; | |||||
if (exponent == 0) | |||||
break; | |||||
} | |||||
power *= power; | |||||
} | |||||
return negative ? (value / result) : (value * result); | |||||
} | |||||
template <class CharType> | |||||
double juce_atof (const CharType* const original) throw() | |||||
{ | |||||
double result[3] = { 0, 0, 0 }, accumulator[2] = { 0, 0 }; | |||||
int exponentAdjustment[2] = { 0, 0 }, exponentAccumulator[2] = { -1, -1 }; | |||||
int exponent = 0, decPointIndex = 0, digit = 0; | |||||
int lastDigit = 0, numSignificantDigits = 0; | |||||
bool isNegative = false, digitsFound = false; | |||||
const int maxSignificantDigits = 15 + 2; | |||||
const CharType* s = original; | |||||
while (CharacterFunctions::isWhitespace (*s)) | |||||
++s; | |||||
switch (*s) | |||||
{ | |||||
case '-': isNegative = true; // fall-through.. | |||||
case '+': ++s; | |||||
} | |||||
if (*s == 'n' || *s == 'N' || *s == 'i' || *s == 'I') | |||||
return atof (String (original)); // Let the c library deal with NAN and INF | |||||
for (;;) | |||||
{ | |||||
if (CharacterFunctions::isDigit (*s)) | |||||
{ | |||||
lastDigit = digit; | |||||
digit = *s++ - '0'; | |||||
digitsFound = true; | |||||
if (decPointIndex != 0) | |||||
exponentAdjustment[1]++; | |||||
if (numSignificantDigits == 0 && digit == 0) | |||||
continue; | |||||
if (++numSignificantDigits > maxSignificantDigits) | |||||
{ | |||||
if (digit > 5) | |||||
++accumulator [decPointIndex]; | |||||
else if (digit == 5 && (lastDigit & 1) != 0) | |||||
++accumulator [decPointIndex]; | |||||
if (decPointIndex > 0) | |||||
exponentAdjustment[1]--; | |||||
else | |||||
exponentAdjustment[0]++; | |||||
while (CharacterFunctions::isDigit (*s)) | |||||
{ | |||||
++s; | |||||
if (decPointIndex == 0) | |||||
exponentAdjustment[0]++; | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
const double maxAccumulatorValue = (double) ((UINT_MAX - 9) / 10); | |||||
if (accumulator [decPointIndex] > maxAccumulatorValue) | |||||
{ | |||||
result [decPointIndex] = juce_mulexp10 (result [decPointIndex], exponentAccumulator [decPointIndex]) | |||||
+ accumulator [decPointIndex]; | |||||
accumulator [decPointIndex] = 0; | |||||
exponentAccumulator [decPointIndex] = 0; | |||||
} | |||||
accumulator [decPointIndex] = accumulator[decPointIndex] * 10 + digit; | |||||
exponentAccumulator [decPointIndex]++; | |||||
} | |||||
} | |||||
else if (decPointIndex == 0 && *s == '.') | |||||
{ | |||||
++s; | |||||
decPointIndex = 1; | |||||
if (numSignificantDigits > maxSignificantDigits) | |||||
{ | |||||
while (CharacterFunctions::isDigit (*s)) | |||||
++s; | |||||
break; | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
break; | |||||
} | |||||
} | |||||
result[0] = juce_mulexp10 (result[0], exponentAccumulator[0]) + accumulator[0]; | |||||
if (decPointIndex != 0) | |||||
result[1] = juce_mulexp10 (result[1], exponentAccumulator[1]) + accumulator[1]; | |||||
if ((*s == 'e' || *s == 'E') && digitsFound) | |||||
{ | |||||
bool negativeExponent = false; | |||||
switch (*++s) | |||||
{ | |||||
case '-': negativeExponent = true; // fall-through.. | |||||
case '+': ++s; | |||||
} | |||||
while (CharacterFunctions::isDigit (*s)) | |||||
exponent = (exponent * 10) + (*s++ - '0'); | |||||
if (negativeExponent) | |||||
exponent = -exponent; | |||||
} | |||||
double r = juce_mulexp10 (result[0], exponent + exponentAdjustment[0]); | |||||
if (decPointIndex != 0) | |||||
r += juce_mulexp10 (result[1], exponent - exponentAdjustment[1]); | |||||
return isNegative ? -r : r; | |||||
} | |||||
double CharacterFunctions::getDoubleValue (const char* const s) throw() | double CharacterFunctions::getDoubleValue (const char* const s) throw() | ||||
{ | { | ||||
return atof (s); | |||||
return juce_atof <char> (s); | |||||
} | } | ||||
double CharacterFunctions::getDoubleValue (const juce_wchar* const s) throw() | double CharacterFunctions::getDoubleValue (const juce_wchar* const s) throw() | ||||
{ | { | ||||
wchar_t* endChar; | |||||
return wcstod (s, &endChar); | |||||
return juce_atof <juce_wchar> (s); | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||