diff --git a/Builds/Linux/Makefile b/Builds/Linux/Makefile
index ef231624b4..a25e638e26 100644
--- a/Builds/Linux/Makefile
+++ b/Builds/Linux/Makefile
@@ -53,6 +53,7 @@ OBJECTS := \
$(OBJDIR)/juce_AudioSubsectionReader_65f61a0a.o \
$(OBJDIR)/juce_AudioThumbnail_cb99b4b4.o \
$(OBJDIR)/juce_AudioThumbnailCache_89a7c678.o \
+ $(OBJDIR)/juce_CoreAudioFormat_1ce243da.o \
$(OBJDIR)/juce_FlacAudioFormat_19c048f1.o \
$(OBJDIR)/juce_OggVorbisAudioFormat_3f214fc9.o \
$(OBJDIR)/juce_QuickTimeAudioFormat_8ad67271.o \
@@ -456,6 +457,11 @@ $(OBJDIR)/juce_AudioThumbnailCache_89a7c678.o: ../../src/audio/audio_file_format
@echo "Compiling juce_AudioThumbnailCache.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+$(OBJDIR)/juce_CoreAudioFormat_1ce243da.o: ../../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp
+ -@mkdir -p $(OBJDIR)
+ @echo "Compiling juce_CoreAudioFormat.cpp"
+ @$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
+
$(OBJDIR)/juce_FlacAudioFormat_19c048f1.o: ../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_FlacAudioFormat.cpp"
diff --git a/Builds/MacOSX/Juce.xcodeproj/project.pbxproj b/Builds/MacOSX/Juce.xcodeproj/project.pbxproj
index f857355f43..8a9163874f 100644
--- a/Builds/MacOSX/Juce.xcodeproj/project.pbxproj
+++ b/Builds/MacOSX/Juce.xcodeproj/project.pbxproj
@@ -20,6 +20,7 @@
FB21B7E6A7CE55D3C0E3C37E = { isa = PBXBuildFile; fileRef = 59597FA0A88A08937801D198; };
C1147D03F1F4D697CC30DD22 = { isa = PBXBuildFile; fileRef = 27C3C51DF2519B519B76E2EE; };
C5CFF5508299C26380465290 = { isa = PBXBuildFile; fileRef = CB32D4EE59D5CA9DB12F944D; };
+ 0ACCAC5ABDE686B0CA42BFED = { isa = PBXBuildFile; fileRef = 203AC66FFB20EAD2E7A594BD; };
2171BD82DA3A6744260CDE58 = { isa = PBXBuildFile; fileRef = E00781B15E47C9CB9E94869D; };
3C22C15ACEEF0454171D231B = { isa = PBXBuildFile; fileRef = DA868174D4D2059AC1BE7E71; };
6D421F7B7EE3A149389653C2 = { isa = PBXBuildFile; fileRef = 7CF036906034FABB44D2108F; };
@@ -395,6 +396,8 @@
7B34E897026857C84399A09C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; };
CB32D4EE59D5CA9DB12F944D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; };
3442FA257104DC3F43E7F870 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; };
+ 203AC66FFB20EAD2E7A594BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
+ C9F1015CA457A61082398E34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
E00781B15E47C9CB9E94869D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
7C06BD13BF7E0097EB0A8D08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
DA868174D4D2059AC1BE7E71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -1145,6 +1148,8 @@
7B34E897026857C84399A09C,
CB32D4EE59D5CA9DB12F944D,
3442FA257104DC3F43E7F870,
+ 203AC66FFB20EAD2E7A594BD,
+ C9F1015CA457A61082398E34,
E00781B15E47C9CB9E94869D,
7C06BD13BF7E0097EB0A8D08,
DA868174D4D2059AC1BE7E71,
@@ -2078,6 +2083,7 @@
FB21B7E6A7CE55D3C0E3C37E,
C1147D03F1F4D697CC30DD22,
C5CFF5508299C26380465290,
+ 0ACCAC5ABDE686B0CA42BFED,
2171BD82DA3A6744260CDE58,
3C22C15ACEEF0454171D231B,
6D421F7B7EE3A149389653C2,
diff --git a/Builds/VisualStudio2005/Juce.vcproj b/Builds/VisualStudio2005/Juce.vcproj
index ef4d86b81f..1be6dadff2 100644
--- a/Builds/VisualStudio2005/Juce.vcproj
+++ b/Builds/VisualStudio2005/Juce.vcproj
@@ -134,6 +134,8 @@
+
+
diff --git a/Builds/VisualStudio2008/Juce.vcproj b/Builds/VisualStudio2008/Juce.vcproj
index ab9c68ec36..1d0b930d3d 100644
--- a/Builds/VisualStudio2008/Juce.vcproj
+++ b/Builds/VisualStudio2008/Juce.vcproj
@@ -134,6 +134,8 @@
+
+
diff --git a/Builds/VisualStudio2008_DLL/Juce.vcproj b/Builds/VisualStudio2008_DLL/Juce.vcproj
index 771b7f60a6..656e6ade54 100644
--- a/Builds/VisualStudio2008_DLL/Juce.vcproj
+++ b/Builds/VisualStudio2008_DLL/Juce.vcproj
@@ -136,6 +136,8 @@
+
+
diff --git a/Builds/VisualStudio2010/Juce.vcxproj b/Builds/VisualStudio2010/Juce.vcxproj
index 199dabcbd6..55c454fb45 100644
--- a/Builds/VisualStudio2010/Juce.vcxproj
+++ b/Builds/VisualStudio2010/Juce.vcxproj
@@ -136,6 +136,7 @@
+
@@ -471,6 +472,7 @@
+
diff --git a/Builds/VisualStudio2010/Juce.vcxproj.filters b/Builds/VisualStudio2010/Juce.vcxproj.filters
index 6650399d7e..5e46f51d30 100644
--- a/Builds/VisualStudio2010/Juce.vcxproj.filters
+++ b/Builds/VisualStudio2010/Juce.vcxproj.filters
@@ -229,6 +229,9 @@
Juce\Source\audio\audio_file_formats
+
+ Juce\Source\audio\audio_file_formats
+
Juce\Source\audio\audio_file_formats
@@ -1341,6 +1344,9 @@
Juce\Source\audio\audio_file_formats
+
+ Juce\Source\audio\audio_file_formats
+
Juce\Source\audio\audio_file_formats
diff --git a/Builds/iOS/Juce.xcodeproj/project.pbxproj b/Builds/iOS/Juce.xcodeproj/project.pbxproj
index 69fce832dc..4579574a97 100644
--- a/Builds/iOS/Juce.xcodeproj/project.pbxproj
+++ b/Builds/iOS/Juce.xcodeproj/project.pbxproj
@@ -20,6 +20,7 @@
FB21B7E6A7CE55D3C0E3C37E = { isa = PBXBuildFile; fileRef = 59597FA0A88A08937801D198; };
C1147D03F1F4D697CC30DD22 = { isa = PBXBuildFile; fileRef = 27C3C51DF2519B519B76E2EE; };
C5CFF5508299C26380465290 = { isa = PBXBuildFile; fileRef = CB32D4EE59D5CA9DB12F944D; };
+ 0ACCAC5ABDE686B0CA42BFED = { isa = PBXBuildFile; fileRef = 203AC66FFB20EAD2E7A594BD; };
2171BD82DA3A6744260CDE58 = { isa = PBXBuildFile; fileRef = E00781B15E47C9CB9E94869D; };
3C22C15ACEEF0454171D231B = { isa = PBXBuildFile; fileRef = DA868174D4D2059AC1BE7E71; };
6D421F7B7EE3A149389653C2 = { isa = PBXBuildFile; fileRef = 7CF036906034FABB44D2108F; };
@@ -395,6 +396,8 @@
7B34E897026857C84399A09C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; };
CB32D4EE59D5CA9DB12F944D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; };
3442FA257104DC3F43E7F870 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../src/audio/audio_file_formats/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; };
+ 203AC66FFB20EAD2E7A594BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
+ C9F1015CA457A61082398E34 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
E00781B15E47C9CB9E94869D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
7C06BD13BF7E0097EB0A8D08 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../src/audio/audio_file_formats/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; };
DA868174D4D2059AC1BE7E71 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -1145,6 +1148,8 @@
7B34E897026857C84399A09C,
CB32D4EE59D5CA9DB12F944D,
3442FA257104DC3F43E7F870,
+ 203AC66FFB20EAD2E7A594BD,
+ C9F1015CA457A61082398E34,
E00781B15E47C9CB9E94869D,
7C06BD13BF7E0097EB0A8D08,
DA868174D4D2059AC1BE7E71,
@@ -2082,6 +2087,7 @@
FB21B7E6A7CE55D3C0E3C37E,
C1147D03F1F4D697CC30DD22,
C5CFF5508299C26380465290,
+ 0ACCAC5ABDE686B0CA42BFED,
2171BD82DA3A6744260CDE58,
3C22C15ACEEF0454171D231B,
6D421F7B7EE3A149389653C2,
diff --git a/Juce.jucer b/Juce.jucer
index dea524483b..0528d22767 100644
--- a/Juce.jucer
+++ b/Juce.jucer
@@ -101,6 +101,10 @@
resource="0" file="src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp"/>
+
+
writeToStream (mo, String::empty);
-
- if (! FileHelpers::overwriteFileWithNewDataIfDifferent (projectFile, mo))
- errors.add ("Couldn't write to the target file!");
+ replaceFileIfDifferent (projectFile, mo);
}
}
@@ -278,17 +276,6 @@ private:
}
}
- bool replaceFileIfDifferent (const File& f, const MemoryOutputStream& newData)
- {
- if (! FileHelpers::overwriteFileWithNewDataIfDifferent (f, newData))
- {
- errors.add ("Can't write to file: " + f.getFullPathName());
- return false;
- }
-
- return true;
- }
-
void writeBinaryDataFiles()
{
binaryDataCpp = project.getGeneratedCodeFolder().getChildFile ("BinaryData.cpp");
@@ -323,9 +310,7 @@ private:
ScopedPointer exporter (project.createExporter (i));
std::cout << "Writing files for: " << exporter->getName() << std::endl;
- const File targetFolder (exporter->getTargetFolder());
-
- if (targetFolder.createDirectory())
+ if (exporter->getTargetFolder().createDirectory())
{
// start with a copy of the basic files, as each exporter may modify it.
const ValueTree generatedGroupCopy (generatedFilesGroup.getNode().createCopy());
@@ -357,11 +342,15 @@ private:
}
}
- File getSourceWrapperCpp (int fileIndex) const
+ bool replaceFileIfDifferent (const File& f, const MemoryOutputStream& newData)
{
- return project.getGeneratedCodeFolder()
- .getChildFile (project.getJuceSourceFilenameRoot() + (fileIndex != 0 ? String (fileIndex) : String::empty))
- .withFileExtension (".cpp");
+ if (! FileHelpers::overwriteFileWithNewDataIfDifferent (f, newData))
+ {
+ errors.add ("Can't write to file: " + f.getFullPathName());
+ return false;
+ }
+
+ return true;
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjectSaver);
diff --git a/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj b/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj
index cc2247cd3e..f5a53c20e1 100644
--- a/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj
+++ b/extras/JuceDemo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
F1BAE9DCD179C8784FF28F8D = { isa = PBXBuildFile; fileRef = 4A96850C150C1C6D87A0D21A; };
B9911F3AC6CADFB47D1EA8D7 = { isa = PBXBuildFile; fileRef = 4D3E0D18D24F78B6BDE0E5DA; };
452052BBDBAF17DCC06EF521 = { isa = PBXBuildFile; fileRef = E0C3359BB4B5260CEB917D46; };
+ 36AEC0EAE7AB9D061AD9EFEF = { isa = PBXBuildFile; fileRef = 7B6D428682221857EAEA1C7D; };
C0A3C433D146C7E1FFCADFB2 = { isa = PBXBuildFile; fileRef = 4ADECB09FD213B2E910EA229; };
78A66C2F9A9E2E6D011D8E5E = { isa = PBXBuildFile; fileRef = 885A20D277AD743C21C822B5; };
CE5C46E66485B7D77B5ADB4E = { isa = PBXBuildFile; fileRef = 42291DB48BF81754D90FE200; };
@@ -56,6 +57,7 @@
4A96850C150C1C6D87A0D21A = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
4D3E0D18D24F78B6BDE0E5DA = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
E0C3359BB4B5260CEB917D46 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+ 7B6D428682221857EAEA1C7D = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
39B98C60B57B831FE5215CDD = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
1A9DEA62F6A3CD1FB5CF105B = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = "SOURCE_ROOT"; };
4ADECB09FD213B2E910EA229 = { isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; };
@@ -169,7 +171,8 @@
85E860BFDA9D53EF77C08873,
4A96850C150C1C6D87A0D21A,
4D3E0D18D24F78B6BDE0E5DA,
- E0C3359BB4B5260CEB917D46 ); name = Frameworks; sourceTree = ""; };
+ E0C3359BB4B5260CEB917D46,
+ 7B6D428682221857EAEA1C7D ); name = Frameworks; sourceTree = ""; };
3F406773369804D0FBF2789A = { isa = PBXGroup; children = (
39B98C60B57B831FE5215CDD ); name = Products; sourceTree = ""; };
D6A4B94A747BFCF299B17932 = { isa = PBXGroup; children = (
@@ -289,7 +292,8 @@
C1437C4A64EB72D2A86729D3,
F1BAE9DCD179C8784FF28F8D,
B9911F3AC6CADFB47D1EA8D7,
- 452052BBDBAF17DCC06EF521 ); runOnlyForDeploymentPostprocessing = 0; };
+ 452052BBDBAF17DCC06EF521,
+ 36AEC0EAE7AB9D061AD9EFEF ); runOnlyForDeploymentPostprocessing = 0; };
F26B86DEACDEE5DFB60E10B1 = { isa = PBXNativeTarget; buildConfigurationList = C264FE1BF62B589B345E0C81; buildPhases = (
AE930F136F638C3C939F7146,
7A3A0C722E5F96990CA1B5F2,
diff --git a/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj b/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj
index 6f68b391ac..aa86540b4a 100644
--- a/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj
+++ b/extras/amalgamator/Builds/MacOSX/Amalgamator.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
B1AED479824B53CD42E2CF43 = { isa = PBXBuildFile; fileRef = 099980A9C6DE98B28A9113C0; };
88941AD8669C6AF9710FE99D = { isa = PBXBuildFile; fileRef = 0D21F7B58311040CB1C01680; };
14235D597C71A211C34E35D7 = { isa = PBXBuildFile; fileRef = BFB630386598A251EE72BEFC; };
+ F5A1BB88887D285B1DBA1FA4 = { isa = PBXBuildFile; fileRef = 3B604C2333F4A4ACEDDA5D33; };
E88444FD7BDE1A966EC392A5 = { isa = PBXBuildFile; fileRef = 195A51222E92C3A93F2D6FFA; };
4D2A24E908E9A226C5A3D259 = { isa = PBXBuildFile; fileRef = F4A7A8C689EAE11C52879AFF; };
EA2AB86C7C92284FED89D52F = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
@@ -30,6 +31,7 @@
099980A9C6DE98B28A9113C0 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
0D21F7B58311040CB1C01680 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
BFB630386598A251EE72BEFC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+ 3B604C2333F4A4ACEDDA5D33 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
F8AC870D665D0F64E9129D83 = { isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = amalgamator; sourceTree = "BUILT_PRODUCTS_DIR"; };
195A51222E92C3A93F2D6FFA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; };
AE2AAA898543257DC9074051 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; };
@@ -53,7 +55,8 @@
44DC6A5C8B7FDF348BB1B939,
099980A9C6DE98B28A9113C0,
0D21F7B58311040CB1C01680,
- BFB630386598A251EE72BEFC ); name = Frameworks; sourceTree = ""; };
+ BFB630386598A251EE72BEFC,
+ 3B604C2333F4A4ACEDDA5D33 ); name = Frameworks; sourceTree = ""; };
FE436211E76A80250EE3B950 = { isa = PBXGroup; children = (
F8AC870D665D0F64E9129D83 ); name = Products; sourceTree = ""; };
5DCB99F3A59154C29483AE9B = { isa = PBXGroup; children = (
@@ -141,7 +144,8 @@
804677E715BD0D17AB576A99,
B1AED479824B53CD42E2CF43,
88941AD8669C6AF9710FE99D,
- 14235D597C71A211C34E35D7 ); runOnlyForDeploymentPostprocessing = 0; };
+ 14235D597C71A211C34E35D7,
+ F5A1BB88887D285B1DBA1FA4 ); runOnlyForDeploymentPostprocessing = 0; };
C15E717C5DA07024CAFE5177 = { isa = PBXNativeTarget; buildConfigurationList = 9257F9B896FDE4D0483F4D47; buildPhases = (
6D960AB00F450781A680A10C,
492D061FDF3111EE0092E6B8,
diff --git a/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj b/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj
index dca6ef0ac7..7ee223b59a 100644
--- a/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj
+++ b/extras/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
0344374EE00EBC906608CCB7 = { isa = PBXBuildFile; fileRef = 4C20D27E2491F086AEA71044; };
CB3A6CACC45FC3DD9525E611 = { isa = PBXBuildFile; fileRef = 4FC85A8AE0D46CDFD5E61304; };
57CAAF2DDA340BF5E764325B = { isa = PBXBuildFile; fileRef = F25D830DC35A0A240297BA70; };
+ 48371E4CE630812E31DF1C28 = { isa = PBXBuildFile; fileRef = 8D069FF891B70C7001E05AB7; };
F653CD6DB1550002BFB3EE47 = { isa = PBXBuildFile; fileRef = 77964D54171CB8F24F616C9F; };
71D47E0ED5F6A90682A5707C = { isa = PBXBuildFile; fileRef = BFD865C4B317E01BDD319AB0; };
A778E9C39DD11828306AF2E8 = { isa = PBXBuildFile; fileRef = 178E79E571E8D29BCC89FDD8; };
@@ -39,6 +40,7 @@
4C20D27E2491F086AEA71044 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
4FC85A8AE0D46CDFD5E61304 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
F25D830DC35A0A240297BA70 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+ 8D069FF891B70C7001E05AB7 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
77964D54171CB8F24F616C9F = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
BFD865C4B317E01BDD319AB0 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
3B43D9C2C41077380D379A07 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plugin Host.app"; sourceTree = "BUILT_PRODUCTS_DIR"; };
@@ -89,6 +91,7 @@
4C20D27E2491F086AEA71044,
4FC85A8AE0D46CDFD5E61304,
F25D830DC35A0A240297BA70,
+ 8D069FF891B70C7001E05AB7,
77964D54171CB8F24F616C9F,
BFD865C4B317E01BDD319AB0 ); name = Frameworks; sourceTree = ""; };
31DAB5E5452DF8F91208B6C4 = { isa = PBXGroup; children = (
@@ -190,6 +193,7 @@
0344374EE00EBC906608CCB7,
CB3A6CACC45FC3DD9525E611,
57CAAF2DDA340BF5E764325B,
+ 48371E4CE630812E31DF1C28,
F653CD6DB1550002BFB3EE47,
71D47E0ED5F6A90682A5707C ); runOnlyForDeploymentPostprocessing = 0; };
04F5D340BA63D9F8DE145DFB = { isa = PBXNativeTarget; buildConfigurationList = D4FE5C8CF4B04CB35C5449CB; buildPhases = (
diff --git a/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj b/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj
index 190250d5d0..7023e3f029 100644
--- a/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj
+++ b/extras/audio plugins/demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
68746D242F6A6102FDD5D03D = { isa = PBXBuildFile; fileRef = B050085463EEB5F8367314CB; };
205AA28314AC784F2CF1FA98 = { isa = PBXBuildFile; fileRef = B4F88060202011416CB3278B; };
CBE9E6042991B0677E3136D2 = { isa = PBXBuildFile; fileRef = 678CC9E413A7CF979964CEF7; };
+ AC674433358C3691C8AC20AF = { isa = PBXBuildFile; fileRef = E226D5DEE103B1E298BD6E3E; };
5B83F34400A1B5844680E1CE = { isa = PBXBuildFile; fileRef = DBC6733A66786D64D63E7016; };
E504A4E425435E78197183F3 = { isa = PBXBuildFile; fileRef = 2307ABAB0264959E640E9E37; };
AC674433358C3691C8AC20AF = { isa = PBXBuildFile; fileRef = E226D5DEE103B1E298BD6E3E; };
@@ -63,6 +64,7 @@
B050085463EEB5F8367314CB = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
B4F88060202011416CB3278B = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
678CC9E413A7CF979964CEF7 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+ E226D5DEE103B1E298BD6E3E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
DBC6733A66786D64D63E7016 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
2307ABAB0264959E640E9E37 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
E226D5DEE103B1E298BD6E3E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
@@ -218,6 +220,7 @@
B050085463EEB5F8367314CB,
B4F88060202011416CB3278B,
678CC9E413A7CF979964CEF7,
+ E226D5DEE103B1E298BD6E3E,
DBC6733A66786D64D63E7016,
2307ABAB0264959E640E9E37,
E226D5DEE103B1E298BD6E3E ); name = Frameworks; sourceTree = ""; };
@@ -354,6 +357,7 @@
68746D242F6A6102FDD5D03D,
205AA28314AC784F2CF1FA98,
CBE9E6042991B0677E3136D2,
+ AC674433358C3691C8AC20AF,
5B83F34400A1B5844680E1CE,
E504A4E425435E78197183F3,
AC674433358C3691C8AC20AF ); runOnlyForDeploymentPostprocessing = 0; };
diff --git a/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj b/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
index f73c1423c9..c38db0fe66 100644
--- a/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
+++ b/extras/binarybuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
489C322518A3C4F4DC8E8FE4 = { isa = PBXBuildFile; fileRef = 9088DD545C3708EA053CC371; };
008367830DF5DB21FBAAA93F = { isa = PBXBuildFile; fileRef = 94105561197974333B7BD632; };
9B12BA0402DA13494DFAE588 = { isa = PBXBuildFile; fileRef = 36A58EE4FBF01289682D7DAD; };
+ 8C9019232ED599839765DF56 = { isa = PBXBuildFile; fileRef = C25FAADEC95C14D468751DD4; };
707392A801368BCEE86E5256 = { isa = PBXBuildFile; fileRef = 9049BFDEB4FA33D1BAC82FAC; };
D51982959E41125E4F4E92FA = { isa = PBXBuildFile; fileRef = 8B9506611F425243DD224A90; };
7119161802FA9887683494D0 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
@@ -30,6 +31,7 @@
9088DD545C3708EA053CC371 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
94105561197974333B7BD632 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
36A58EE4FBF01289682D7DAD = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+ C25FAADEC95C14D468751DD4 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
7FABD4A9FCB57F9C63BD5D34 = { isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = BinaryBuilder; sourceTree = "BUILT_PRODUCTS_DIR"; };
9049BFDEB4FA33D1BAC82FAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; };
351908352BAB95A544A300F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; };
@@ -53,7 +55,8 @@
DBDAB8F811D84F6C055C78DA,
9088DD545C3708EA053CC371,
94105561197974333B7BD632,
- 36A58EE4FBF01289682D7DAD ); name = Frameworks; sourceTree = ""; };
+ 36A58EE4FBF01289682D7DAD,
+ C25FAADEC95C14D468751DD4 ); name = Frameworks; sourceTree = ""; };
8532B0CC7DC2F05D888E79F2 = { isa = PBXGroup; children = (
7FABD4A9FCB57F9C63BD5D34 ); name = Products; sourceTree = ""; };
07E3546C6DFA9084D23A33E9 = { isa = PBXGroup; children = (
@@ -141,7 +144,8 @@
0735D492AB157E5F26F2293A,
489C322518A3C4F4DC8E8FE4,
008367830DF5DB21FBAAA93F,
- 9B12BA0402DA13494DFAE588 ); runOnlyForDeploymentPostprocessing = 0; };
+ 9B12BA0402DA13494DFAE588,
+ 8C9019232ED599839765DF56 ); runOnlyForDeploymentPostprocessing = 0; };
495DDE27E308E15C44991018 = { isa = PBXNativeTarget; buildConfigurationList = 195657633D555407C2EA0CE8; buildPhases = (
F485685C969D78B9212B61AD,
C02C54CA659982168A3DA559,
diff --git a/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj b/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj
index 4d3064c520..8cde3f120c 100644
--- a/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj
+++ b/extras/example projects/Builds/MacOSX/HelloWorld.xcodeproj/project.pbxproj
@@ -17,6 +17,7 @@
9EA4F1C0E2356AB5C07CE95E = { isa = PBXBuildFile; fileRef = E6809DE026C8BEAB082B3DEB; };
569A272ED68671F2FE9903B8 = { isa = PBXBuildFile; fileRef = EA28150CE20A1AF43E5A30AB; };
E12A6AAFEC6BB91A41D85FF2 = { isa = PBXBuildFile; fileRef = 8DBD4D8FD571C84A6C0CD817; };
+ D397D8CEF8663F449B4439C0 = { isa = PBXBuildFile; fileRef = 18665A7A93EDBA956B64774E; };
C67B5243DBC7218FEC5DBCC0 = { isa = PBXBuildFile; fileRef = E7507E799D8BDA92BDB78915; };
9B11A7532637EC12F1DC4B2E = { isa = PBXBuildFile; fileRef = 0DB195C2B3538434D7D20B51; };
CFFBB821ECB7D85603624533 = { isa = PBXBuildFile; fileRef = 57FFE120531343D50B7D2D28; };
@@ -34,6 +35,7 @@
E6809DE026C8BEAB082B3DEB = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
EA28150CE20A1AF43E5A30AB = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
8DBD4D8FD571C84A6C0CD817 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
+ 18665A7A93EDBA956B64774E = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
D5A29444C637255D66ACB7AE = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
B786F246076E6F5D363A6A2C = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = "SOURCE_ROOT"; };
E7507E799D8BDA92BDB78915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; };
@@ -69,7 +71,8 @@
22D27893FB59F52DF84AD344,
E6809DE026C8BEAB082B3DEB,
EA28150CE20A1AF43E5A30AB,
- 8DBD4D8FD571C84A6C0CD817 ); name = Frameworks; sourceTree = ""; };
+ 8DBD4D8FD571C84A6C0CD817,
+ 18665A7A93EDBA956B64774E ); name = Frameworks; sourceTree = ""; };
DC3A70675753A61E8C7CD36B = { isa = PBXGroup; children = (
D5A29444C637255D66ACB7AE ); name = Products; sourceTree = ""; };
4297D3C9A6348BA224516847 = { isa = PBXGroup; children = (
@@ -163,7 +166,8 @@
6D3C942E85A6141029E184A4,
9EA4F1C0E2356AB5C07CE95E,
569A272ED68671F2FE9903B8,
- E12A6AAFEC6BB91A41D85FF2 ); runOnlyForDeploymentPostprocessing = 0; };
+ E12A6AAFEC6BB91A41D85FF2,
+ D397D8CEF8663F449B4439C0 ); runOnlyForDeploymentPostprocessing = 0; };
9F559EB2CC99871D47887B82 = { isa = PBXNativeTarget; buildConfigurationList = 6F5E160F06E7FAD8B5C96752; buildPhases = (
4B8D17F77F2E2E7A2419CB17,
172414663F1A38D78D2B00C3,
diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp
index 9e67b1ea67..a4557bcdc3 100644
--- a/juce_amalgamated.cpp
+++ b/juce_amalgamated.cpp
@@ -10433,6 +10433,7 @@ public:
static String createRandomWideCharString()
{
juce_wchar buffer [50] = { 0 };
+ Random r;
for (int i = 0; i < numElementsInArray (buffer) - 1; ++i)
{
@@ -22587,6 +22588,7 @@ void AudioFormatManager::registerBasicFormats()
#if JUCE_MAC
registerFormat (new AiffAudioFormat(), true);
registerFormat (new WavAudioFormat(), false);
+ registerFormat (new CoreAudioFormat(), false);
#else
registerFormat (new WavAudioFormat(), true);
registerFormat (new AiffAudioFormat(), false);
@@ -108434,6 +108436,219 @@ END_JUCE_NAMESPACE
#if JUCE_BUILD_NATIVE && ! JUCE_ONLY_BUILD_CORE_LIBRARY
+/*** Start of inlined file: juce_CoreAudioFormat.cpp ***/
+#if JUCE_MAC || JUCE_IOS
+
+#include
+
+BEGIN_JUCE_NAMESPACE
+
+namespace
+{
+ const char* const coreAudioFormatName = "CoreAudio supported file";
+
+ StringArray findFileExtensionsForCoreAudioCodecs()
+ {
+ StringArray extensionsArray;
+ CFMutableArrayRef extensions = CFArrayCreateMutable (0, 0, 0);
+ UInt32 sizeOfArray = sizeof (CFMutableArrayRef);
+
+ if (AudioFileGetGlobalInfo (kAudioFileGlobalInfo_AllExtensions, 0, 0, &sizeOfArray, &extensions) == noErr)
+ {
+ const CFIndex numValues = CFArrayGetCount (extensions);
+
+ for (CFIndex i = 0; i < numValues; ++i)
+ extensionsArray.add ("." + String::fromCFString ((CFStringRef) CFArrayGetValueAtIndex (extensions, i)));
+ }
+
+ return extensionsArray;
+ }
+}
+
+class CoreAudioReader : public AudioFormatReader
+{
+public:
+
+ CoreAudioReader (InputStream* const inp)
+ : AudioFormatReader (inp, TRANS (coreAudioFormatName)),
+ ok (false)
+ {
+ usesFloatingPointData = true;
+
+ OSStatus status = AudioFileOpenWithCallbacks (this,
+ &readCallback,
+ 0, // write needs to be null to avoid permisisions errors
+ &getSizeCallback,
+ 0, // setSize needs to be null to avoid permisisions errors
+ 0, // AudioFileTypeID inFileTypeHint
+ &audioFileID);
+ if (status == noErr)
+ {
+ status = ExtAudioFileWrapAudioFileID (audioFileID, false, &audioFileRef);
+
+ if (status == noErr)
+ {
+ AudioStreamBasicDescription sourceAudioFormat;
+ UInt32 audioStreamBasicDescriptionSize = sizeof (AudioStreamBasicDescription);
+ ExtAudioFileGetProperty (audioFileRef,
+ kExtAudioFileProperty_FileDataFormat,
+ &audioStreamBasicDescriptionSize,
+ &sourceAudioFormat);
+
+ numChannels = sourceAudioFormat.mChannelsPerFrame;
+ sampleRate = sourceAudioFormat.mSampleRate;
+ bitsPerSample = sourceAudioFormat.mBitsPerChannel;
+
+ UInt32 sizeOfLengthProperty = sizeof (int64);
+ ExtAudioFileGetProperty (audioFileRef,
+ kExtAudioFileProperty_FileLengthFrames,
+ &sizeOfLengthProperty,
+ &lengthInSamples);
+
+ destinationAudioFormat.mSampleRate = sampleRate;
+ destinationAudioFormat.mFormatID = kAudioFormatLinearPCM;
+ destinationAudioFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsNonInterleaved;
+ destinationAudioFormat.mBitsPerChannel = sizeof (float) * 8;
+ destinationAudioFormat.mChannelsPerFrame = numChannels;
+ destinationAudioFormat.mBytesPerFrame = sizeof (float);
+ destinationAudioFormat.mFramesPerPacket = 1;
+ destinationAudioFormat.mBytesPerPacket = destinationAudioFormat.mFramesPerPacket * destinationAudioFormat.mBytesPerFrame;
+
+ status = ExtAudioFileSetProperty (audioFileRef,
+ kExtAudioFileProperty_ClientDataFormat,
+ sizeof (AudioStreamBasicDescription),
+ &destinationAudioFormat);
+ if (status == noErr)
+ {
+ bufferList.malloc (1, sizeof (AudioBufferList) + numChannels * sizeof (AudioBuffer));
+ bufferList->mNumberBuffers = numChannels;
+ ok = true;
+ }
+ }
+ }
+ }
+
+ ~CoreAudioReader()
+ {
+ ExtAudioFileDispose (audioFileRef);
+ AudioFileClose (audioFileID);
+ }
+
+ bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
+ int64 startSampleInFile, int numSamples)
+ {
+ OSStatus status = ExtAudioFileSeek (audioFileRef, startSampleInFile);
+ if (status != noErr)
+ return false;
+
+ const int numBytes = numSamples * sizeof (float);
+ audioDataBlock.ensureSize (numBytes * numChannels, false);
+ float* data = static_cast (audioDataBlock.getData());
+
+ for (int j = numChannels; --j >= 0;)
+ {
+ bufferList->mBuffers[j].mNumberChannels = 1;
+ bufferList->mBuffers[j].mDataByteSize = numBytes;
+ bufferList->mBuffers[j].mData = data;
+ data += numSamples;
+ }
+
+ UInt32 numFramesToRead = numSamples;
+ status = ExtAudioFileRead (audioFileRef, &numFramesToRead, bufferList);
+ if (status != noErr)
+ return false;
+
+ for (int i = numDestChannels; --i >= 0;)
+ {
+ if (destSamples[i] != nullptr)
+ {
+ if (i < numChannels)
+ memcpy (destSamples[i] + startOffsetInDestBuffer, bufferList->mBuffers[i].mData, numBytes);
+ else
+ zeromem (destSamples[i] + startOffsetInDestBuffer, numBytes);
+ }
+ }
+
+ return true;
+ }
+
+ bool ok;
+
+private:
+ AudioFileID audioFileID;
+ ExtAudioFileRef audioFileRef;
+ AudioStreamBasicDescription destinationAudioFormat;
+ MemoryBlock audioDataBlock;
+ HeapBlock bufferList;
+
+ static SInt64 getSizeCallback (void* inClientData)
+ {
+ return static_cast (inClientData)->input->getTotalLength();
+ }
+
+ static OSStatus readCallback (void* inClientData,
+ SInt64 inPosition,
+ UInt32 requestCount,
+ void* buffer,
+ UInt32* actualCount)
+ {
+ CoreAudioReader* const reader = static_cast (inClientData);
+
+ reader->input->setPosition (inPosition);
+ *actualCount = reader->input->read (buffer, requestCount);
+
+ return noErr;
+ }
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreAudioReader);
+};
+
+CoreAudioFormat::CoreAudioFormat()
+ : AudioFormat (TRANS (coreAudioFormatName), findFileExtensionsForCoreAudioCodecs())
+{
+}
+
+CoreAudioFormat::~CoreAudioFormat() {}
+
+const Array CoreAudioFormat::getPossibleSampleRates() { return Array(); }
+const Array CoreAudioFormat::getPossibleBitDepths() { return Array(); }
+
+bool CoreAudioFormat::canDoStereo() { return true; }
+bool CoreAudioFormat::canDoMono() { return true; }
+
+AudioFormatReader* CoreAudioFormat::createReaderFor (InputStream* sourceStream,
+ bool deleteStreamIfOpeningFails)
+{
+ ScopedPointer r (new CoreAudioReader (sourceStream));
+
+ if (r->ok)
+ return r.release();
+
+ if (! deleteStreamIfOpeningFails)
+ r->input = nullptr;
+
+ return nullptr;
+}
+
+AudioFormatWriter* CoreAudioFormat::createWriterFor (OutputStream* streamToWriteTo,
+ double sampleRateToUse,
+ unsigned int numberOfChannels,
+ int bitsPerSample,
+ const StringPairArray& metadataValues,
+ int qualityOptionIndex)
+{
+ jassertfalse; // not yet implemented!
+ return nullptr;
+}
+
+END_JUCE_NAMESPACE
+
+#endif
+
+/*** End of inlined file: juce_CoreAudioFormat.cpp ***/
+
+
+
/*** Start of inlined file: juce_FlacAudioFormat.cpp ***/
#if JUCE_USE_FLAC
@@ -131684,7 +131899,6 @@ END_JUCE_NAMESPACE
/*** End of inlined file: juce_FlacAudioFormat.cpp ***/
-
/*** Start of inlined file: juce_OggVorbisAudioFormat.cpp ***/
#if JUCE_USE_OGGVORBIS
@@ -194694,8 +194908,7 @@ public:
{
for (int i = numDestChannels; --i >= 0;)
if (destSamples[i] != nullptr)
- zeromem (destSamples[i] + startOffsetInDestBuffer,
- sizeof (int) * numSamples);
+ zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * numSamples);
}
return true;
@@ -281982,8 +282195,8 @@ bool NSViewComponentPeer::handleKeyEvent (NSEvent* ev, bool isKeyDown)
String unmodified (nsStringToJuce ([ev charactersIgnoringModifiers]));
int keyCode = getKeyCodeFromEvent (ev);
- DBG ("unicode: " + unicode + " " + String::toHexString ((int) unicode[0]));
- DBG ("unmodified: " + unmodified + " " + String::toHexString ((int) unmodified[0]));
+ //DBG ("unicode: " + unicode + " " + String::toHexString ((int) unicode[0]));
+ //DBG ("unmodified: " + unmodified + " " + String::toHexString ((int) unmodified[0]));
if (unicode.isNotEmpty() || keyCode != 0)
{
diff --git a/juce_amalgamated.h b/juce_amalgamated.h
index 3a36176029..09f681f635 100644
--- a/juce_amalgamated.h
+++ b/juce_amalgamated.h
@@ -73,7 +73,7 @@ namespace JuceDummyNamespace {}
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 54
-#define JUCE_BUILDNUMBER 17
+#define JUCE_BUILDNUMBER 18
/** Current Juce version number.
@@ -36941,7 +36941,7 @@ public:
int qualityOptionIndex);
private:
- JUCE_LEAK_DETECTOR (AiffAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AiffAudioFormat);
};
#endif // __JUCE_AIFFAUDIOFORMAT_JUCEHEADER__
@@ -37725,6 +37725,58 @@ private:
/*** End of inlined file: juce_AudioThumbnailCache.h ***/
+#endif
+#ifndef __JUCE_COREAUDIOFORMAT_JUCEHEADER__
+
+/*** Start of inlined file: juce_CoreAudioFormat.h ***/
+#ifndef __JUCE_COREAUDIOFORMAT_JUCEHEADER__
+#define __JUCE_COREAUDIOFORMAT_JUCEHEADER__
+
+#if JUCE_MAC || JUCE_IOS
+
+/**
+ OSX and iOS only - This uses the AudioToolbox framework to read any audio
+ format that the system has a codec for.
+
+ This should be able to understand formats such as mp3, m4a, etc.
+
+ @see AudioFormat
+ */
+class JUCE_API CoreAudioFormat : public AudioFormat
+{
+public:
+
+ /** Creates a format object. */
+ CoreAudioFormat();
+
+ /** Destructor. */
+ ~CoreAudioFormat();
+
+ const Array getPossibleSampleRates();
+ const Array getPossibleBitDepths();
+ bool canDoStereo();
+ bool canDoMono();
+
+ AudioFormatReader* createReaderFor (InputStream* sourceStream,
+ bool deleteStreamIfOpeningFails);
+
+ AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo,
+ double sampleRateToUse,
+ unsigned int numberOfChannels,
+ int bitsPerSample,
+ const StringPairArray& metadataValues,
+ int qualityOptionIndex);
+
+private:
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreAudioFormat);
+};
+
+#endif
+#endif // __JUCE_COREAUDIOFORMAT_JUCEHEADER__
+
+/*** End of inlined file: juce_CoreAudioFormat.h ***/
+
+
#endif
#ifndef __JUCE_FLACAUDIOFORMAT_JUCEHEADER__
@@ -37767,7 +37819,7 @@ public:
const StringPairArray& metadataValues,
int qualityOptionIndex);
private:
- JUCE_LEAK_DETECTOR (FlacAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FlacAudioFormat);
};
#endif
@@ -37829,7 +37881,7 @@ public:
int qualityOptionIndex);
private:
- JUCE_LEAK_DETECTOR (OggVorbisAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OggVorbisAudioFormat);
};
#endif
@@ -37881,7 +37933,7 @@ public:
int qualityOptionIndex);
private:
- JUCE_LEAK_DETECTOR (QuickTimeAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (QuickTimeAudioFormat);
};
#endif
@@ -38007,7 +38059,7 @@ public:
bool replaceMetadataInFile (const File& wavFile, const StringPairArray& newMetadata);
private:
- JUCE_LEAK_DETECTOR (WavAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavAudioFormat);
};
#endif // __JUCE_WAVAUDIOFORMAT_JUCEHEADER__
diff --git a/src/audio/audio_file_formats/juce_AiffAudioFormat.h b/src/audio/audio_file_formats/juce_AiffAudioFormat.h
index b5659e2761..eabe86dc13 100644
--- a/src/audio/audio_file_formats/juce_AiffAudioFormat.h
+++ b/src/audio/audio_file_formats/juce_AiffAudioFormat.h
@@ -68,7 +68,7 @@ public:
private:
- JUCE_LEAK_DETECTOR (AiffAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AiffAudioFormat);
};
diff --git a/src/audio/audio_file_formats/juce_AudioFormatManager.cpp b/src/audio/audio_file_formats/juce_AudioFormatManager.cpp
index 566b2ae1ae..878d9484ba 100644
--- a/src/audio/audio_file_formats/juce_AudioFormatManager.cpp
+++ b/src/audio/audio_file_formats/juce_AudioFormatManager.cpp
@@ -32,6 +32,7 @@ BEGIN_JUCE_NAMESPACE
#include "juce_WavAudioFormat.h"
#include "juce_FlacAudioFormat.h"
#include "juce_OggVorbisAudioFormat.h"
+#include "juce_CoreAudioFormat.h"
#include "../../io/files/juce_FileInputStream.h"
#include "../../memory/juce_ScopedPointer.h"
@@ -75,6 +76,7 @@ void AudioFormatManager::registerBasicFormats()
#if JUCE_MAC
registerFormat (new AiffAudioFormat(), true);
registerFormat (new WavAudioFormat(), false);
+ registerFormat (new CoreAudioFormat(), false);
#else
registerFormat (new WavAudioFormat(), true);
registerFormat (new AiffAudioFormat(), false);
diff --git a/src/audio/audio_file_formats/juce_FlacAudioFormat.h b/src/audio/audio_file_formats/juce_FlacAudioFormat.h
index 1bbe01c906..2084eed077 100644
--- a/src/audio/audio_file_formats/juce_FlacAudioFormat.h
+++ b/src/audio/audio_file_formats/juce_FlacAudioFormat.h
@@ -67,7 +67,7 @@ public:
const StringPairArray& metadataValues,
int qualityOptionIndex);
private:
- JUCE_LEAK_DETECTOR (FlacAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FlacAudioFormat);
};
diff --git a/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp b/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp
index eebbb45c7b..457f21f657 100644
--- a/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp
+++ b/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp
@@ -208,8 +208,7 @@ public:
{
for (int i = numDestChannels; --i >= 0;)
if (destSamples[i] != nullptr)
- zeromem (destSamples[i] + startOffsetInDestBuffer,
- sizeof (int) * numSamples);
+ zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * numSamples);
}
return true;
diff --git a/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h b/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h
index 9896e60d25..679fcf8562 100644
--- a/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h
+++ b/src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h
@@ -80,7 +80,7 @@ public:
int qualityOptionIndex);
private:
- JUCE_LEAK_DETECTOR (OggVorbisAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OggVorbisAudioFormat);
};
diff --git a/src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h b/src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h
index eaea70ac7e..30f5f864e0 100644
--- a/src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h
+++ b/src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h
@@ -68,7 +68,7 @@ public:
private:
- JUCE_LEAK_DETECTOR (QuickTimeAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (QuickTimeAudioFormat);
};
diff --git a/src/audio/audio_file_formats/juce_WavAudioFormat.h b/src/audio/audio_file_formats/juce_WavAudioFormat.h
index 0bc3e67aad..dca4a5aadf 100644
--- a/src/audio/audio_file_formats/juce_WavAudioFormat.h
+++ b/src/audio/audio_file_formats/juce_WavAudioFormat.h
@@ -145,7 +145,7 @@ public:
private:
- JUCE_LEAK_DETECTOR (WavAudioFormat);
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavAudioFormat);
};
diff --git a/src/core/juce_StandardHeader.h b/src/core/juce_StandardHeader.h
index f1aaa11dfe..c26adad169 100644
--- a/src/core/juce_StandardHeader.h
+++ b/src/core/juce_StandardHeader.h
@@ -33,7 +33,7 @@
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 54
-#define JUCE_BUILDNUMBER 17
+#define JUCE_BUILDNUMBER 18
/** Current Juce version number.
diff --git a/src/io/streams/juce_MemoryInputStream.cpp b/src/io/streams/juce_MemoryInputStream.cpp
index 4d9c72c95b..f46c17a0ac 100644
--- a/src/io/streams/juce_MemoryInputStream.cpp
+++ b/src/io/streams/juce_MemoryInputStream.cpp
@@ -144,6 +144,7 @@ public:
static String createRandomWideCharString()
{
juce_wchar buffer [50] = { 0 };
+ Random r;
for (int i = 0; i < numElementsInArray (buffer) - 1; ++i)
{
diff --git a/src/juce_app_includes.h b/src/juce_app_includes.h
index c3e06a1546..fe0b506899 100644
--- a/src/juce_app_includes.h
+++ b/src/juce_app_includes.h
@@ -74,6 +74,9 @@
#ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__
#include "audio/audio_file_formats/juce_AudioThumbnailCache.h"
#endif
+#ifndef __JUCE_COREAUDIOFORMAT_JUCEHEADER__
+ #include "audio/audio_file_formats/juce_CoreAudioFormat.h"
+#endif
#ifndef __JUCE_FLACAUDIOFORMAT_JUCEHEADER__
#include "audio/audio_file_formats/juce_FlacAudioFormat.h"
#endif