| @@ -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); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||