Browse Source

added the QuickTimeAudioFormat class

tags/2021-05-28
jules 17 years ago
parent
commit
701175832b
8 changed files with 719 additions and 50 deletions
  1. +8
    -0
      build/macosx/Juce.xcodeproj/project.pbxproj
  2. +8
    -0
      build/win32/vc8/JUCE.vcproj
  3. +54
    -50
      extras/audio plugins/demo/build/AudioUnit/JuceDemoAU.xcodeproj/project.pbxproj
  4. +5
    -0
      juce.h
  5. +7
    -0
      juce_Config.h
  6. +3
    -0
      src/juce_app_includes.h
  7. +553
    -0
      src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp
  8. +81
    -0
      src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h

+ 8
- 0
build/macosx/Juce.xcodeproj/project.pbxproj View File

@@ -97,6 +97,8 @@
8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */; }; 8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */; };
8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */; }; 8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */; };
8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */; }; 8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */; };
84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */; };
84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */; };
846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */; }; 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */; };
846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */; }; 846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */; };
846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */; }; 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */; };
@@ -782,6 +784,8 @@
8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderListener.h; sourceTree = "<group>"; }; 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderListener.h; sourceTree = "<group>"; };
8456EC6508A2A6C80087C412 /* juce_Config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Config.h; path = ../../juce_Config.h; sourceTree = SOURCE_ROOT; }; 8456EC6508A2A6C80087C412 /* juce_Config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Config.h; path = ../../juce_Config.h; sourceTree = SOURCE_ROOT; };
8456EC6908A2A6F00087C412 /* JUCE changelist.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "JUCE changelist.txt"; path = "../../docs/JUCE changelist.txt"; sourceTree = SOURCE_ROOT; }; 8456EC6908A2A6F00087C412 /* JUCE changelist.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "JUCE changelist.txt"; path = "../../docs/JUCE changelist.txt"; sourceTree = SOURCE_ROOT; };
84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_QuickTimeAudioFormat.cpp; sourceTree = "<group>"; };
84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_QuickTimeAudioFormat.h; sourceTree = "<group>"; };
846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnection.cpp; sourceTree = "<group>"; }; 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnection.cpp; sourceTree = "<group>"; };
846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnection.h; sourceTree = "<group>"; }; 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnection.h; sourceTree = "<group>"; };
846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnectionServer.cpp; sourceTree = "<group>"; }; 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnectionServer.cpp; sourceTree = "<group>"; };
@@ -1630,6 +1634,8 @@
8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */, 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */,
8495BB8A0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp */, 8495BB8A0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp */,
8495BB8B0D8067B2001D9C0B /* juce_AudioThumbnailCache.h */, 8495BB8B0D8067B2001D9C0B /* juce_AudioThumbnailCache.h */,
84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */,
84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */,
84A4884708A22E4900752A2B /* juce_WavAudioFormat.cpp */, 84A4884708A22E4900752A2B /* juce_WavAudioFormat.cpp */,
84A4884808A22E4900752A2B /* juce_WavAudioFormat.h */, 84A4884808A22E4900752A2B /* juce_WavAudioFormat.h */,
); );
@@ -2890,6 +2896,7 @@
8495BB8F0D8067B2001D9C0B /* juce_AudioThumbnailCache.h in Headers */, 8495BB8F0D8067B2001D9C0B /* juce_AudioThumbnailCache.h in Headers */,
8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */, 8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */,
8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */, 8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */,
84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -3304,6 +3311,7 @@
8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */, 8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */,
8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */, 8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */,
8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */, 8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */,
84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };


+ 8
- 0
build/win32/vc8/JUCE.vcproj View File

@@ -677,6 +677,14 @@
RelativePath="..\..\..\src\juce_appframework\audio\audio_file_formats\juce_OggVorbisAudioFormat.h" RelativePath="..\..\..\src\juce_appframework\audio\audio_file_formats\juce_OggVorbisAudioFormat.h"
> >
</File> </File>
<File
RelativePath="..\..\..\src\juce_appframework\audio\audio_file_formats\juce_QuickTimeAudioFormat.cpp"
>
</File>
<File
RelativePath="..\..\..\src\juce_appframework\audio\audio_file_formats\juce_QuickTimeAudioFormat.h"
>
</File>
<File <File
RelativePath="..\..\..\src\juce_appframework\audio\audio_file_formats\juce_WavAudioFormat.cpp" RelativePath="..\..\..\src\juce_appframework\audio\audio_file_formats\juce_WavAudioFormat.cpp"
> >


+ 54
- 50
extras/audio plugins/demo/build/AudioUnit/JuceDemoAU.xcodeproj/project.pbxproj View File

@@ -7,22 +7,10 @@
objects = { objects = {


/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
3E8BF105079CA60300021B09 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199ED03175E1E01CA2136 /* AUBase.h */; };
3E8BF106079CA60300021B09 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199EF03175E1E01CA2136 /* AUDispatch.h */; };
3E8BF107079CA60300021B09 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199F103175E1E01CA2136 /* AUInputElement.h */; };
3E8BF108079CA60300021B09 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199F303175E1E01CA2136 /* AUOutputElement.h */; };
3E8BF109079CA60300021B09 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199F603175E1E01CA2136 /* AUScopeElement.h */; };
3E8BF10A079CA60300021B09 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199FA03175E1E01CA2136 /* ComponentBase.h */; };
3E8BF10B079CA60300021B09 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199FF03175E1E01CA2136 /* AUEffectBase.h */; }; 3E8BF10B079CA60300021B09 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199FF03175E1E01CA2136 /* AUEffectBase.h */; };
3E8BF10C079CA60300021B09 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D19A0F03175E1E01CA2136 /* AUBuffer.h */; }; 3E8BF10C079CA60300021B09 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D19A0F03175E1E01CA2136 /* AUBuffer.h */; };
3E8BF10D079CA60300021B09 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */; }; 3E8BF10D079CA60300021B09 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */; };
3E8BF10E079CA60300021B09 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */; }; 3E8BF10E079CA60300021B09 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */; };
3E8BF113079CA60300021B09 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199EC03175E1E01CA2136 /* AUBase.cpp */; };
3E8BF114079CA60300021B09 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199EE03175E1E01CA2136 /* AUDispatch.cpp */; };
3E8BF115079CA60300021B09 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F003175E1E01CA2136 /* AUInputElement.cpp */; };
3E8BF116079CA60300021B09 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F203175E1E01CA2136 /* AUOutputElement.cpp */; };
3E8BF117079CA60300021B09 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F503175E1E01CA2136 /* AUScopeElement.cpp */; };
3E8BF118079CA60300021B09 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F903175E1E01CA2136 /* ComponentBase.cpp */; };
3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */; }; 3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */; };
3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */; }; 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */; };
3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */; }; 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */; };
@@ -32,6 +20,18 @@
3E8BF121079CA60300021B09 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5DA37E702821D04014500A0 /* Carbon.framework */; }; 3E8BF121079CA60300021B09 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5DA37E702821D04014500A0 /* Carbon.framework */; };
3E8BF122079CA60300021B09 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5D19ABE0317606901CA2136 /* AudioUnit.framework */; }; 3E8BF122079CA60300021B09 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5D19ABE0317606901CA2136 /* AudioUnit.framework */; };
844C50290C71B6E300D0082E /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844C50280C71B6E300D0082E /* IOKit.framework */; }; 844C50290C71B6E300D0082E /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844C50280C71B6E300D0082E /* IOKit.framework */; };
84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F820D917FC700AE1A4C /* AUBase.cpp */; };
84581F900D917FC700AE1A4C /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F830D917FC700AE1A4C /* AUBase.h */; };
84581F910D917FC700AE1A4C /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F840D917FC700AE1A4C /* AUDispatch.cpp */; };
84581F920D917FC700AE1A4C /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F850D917FC700AE1A4C /* AUDispatch.h */; };
84581F930D917FC700AE1A4C /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F860D917FC700AE1A4C /* AUInputElement.cpp */; };
84581F940D917FC700AE1A4C /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F870D917FC700AE1A4C /* AUInputElement.h */; };
84581F950D917FC700AE1A4C /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F880D917FC700AE1A4C /* AUOutputElement.cpp */; };
84581F960D917FC700AE1A4C /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F890D917FC700AE1A4C /* AUOutputElement.h */; };
84581F980D917FC700AE1A4C /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F8B0D917FC700AE1A4C /* AUScopeElement.cpp */; };
84581F990D917FC700AE1A4C /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8C0D917FC700AE1A4C /* AUScopeElement.h */; };
84581F9A0D917FC700AE1A4C /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */; };
84581F9B0D917FC700AE1A4C /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8E0D917FC700AE1A4C /* ComponentBase.h */; };
845FAE5F0A5C0A6A008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */; }; 845FAE5F0A5C0A6A008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */; };
845FAEE10A5C2696008C94D8 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 845FAEE00A5C2696008C94D8 /* QuickTime.framework */; }; 845FAEE10A5C2696008C94D8 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 845FAEE00A5C2696008C94D8 /* QuickTime.framework */; };
84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; }; 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; };
@@ -90,13 +90,24 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */


/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
3E3AAA740670E29D00C484A8 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; };
3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoJuceAudioUnit.component; sourceTree = BUILT_PRODUCTS_DIR; }; 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoJuceAudioUnit.component; sourceTree = BUILT_PRODUCTS_DIR; };
3E8BF154079CA7A800021B09 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; }; 3E8BF154079CA7A800021B09 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; }; 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; }; 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; }; 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
844C50280C71B6E300D0082E /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = IOKit.framework; sourceTree = "<group>"; }; 844C50280C71B6E300D0082E /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = IOKit.framework; sourceTree = "<group>"; };
84581F820D917FC700AE1A4C /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp; sourceTree = "<absolute>"; };
84581F830D917FC700AE1A4C /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.h; sourceTree = "<absolute>"; };
84581F840D917FC700AE1A4C /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUDispatch.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp; sourceTree = "<absolute>"; };
84581F850D917FC700AE1A4C /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUDispatch.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.h; sourceTree = "<absolute>"; };
84581F860D917FC700AE1A4C /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUInputElement.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUInputElement.cpp; sourceTree = "<absolute>"; };
84581F870D917FC700AE1A4C /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUInputElement.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUInputElement.h; sourceTree = "<absolute>"; };
84581F880D917FC700AE1A4C /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputElement.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUOutputElement.cpp; sourceTree = "<absolute>"; };
84581F890D917FC700AE1A4C /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUOutputElement.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUOutputElement.h; sourceTree = "<absolute>"; };
84581F8B0D917FC700AE1A4C /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUScopeElement.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUScopeElement.cpp; sourceTree = "<absolute>"; };
84581F8C0D917FC700AE1A4C /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUScopeElement.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUScopeElement.h; sourceTree = "<absolute>"; };
84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.cpp; sourceTree = "<absolute>"; };
84581F8E0D917FC700AE1A4C /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.h; sourceTree = "<absolute>"; };
845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
845FAEE00A5C2696008C94D8 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QuickTime.framework; sourceTree = "<group>"; }; 845FAEE00A5C2696008C94D8 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QuickTime.framework; sourceTree = "<group>"; };
84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "<absolute>"; }; 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "<absolute>"; };
@@ -128,18 +139,6 @@
F4E5DC2A0898301D00589A5A /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; }; F4E5DC2A0898301D00589A5A /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; };
F5AA9A2F0281AAB901C34293 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CoreFoundation.framework; sourceTree = "<group>"; }; F5AA9A2F0281AAB901C34293 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CoreFoundation.framework; sourceTree = "<group>"; };
F5AA9A300281AAB901C34293 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CoreServices.framework; sourceTree = "<group>"; }; F5AA9A300281AAB901C34293 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CoreServices.framework; sourceTree = "<group>"; };
F5D199EC03175E1E01CA2136 /* AUBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; };
F5D199ED03175E1E01CA2136 /* AUBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; };
F5D199EE03175E1E01CA2136 /* AUDispatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; };
F5D199EF03175E1E01CA2136 /* AUDispatch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; };
F5D199F003175E1E01CA2136 /* AUInputElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; };
F5D199F103175E1E01CA2136 /* AUInputElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; };
F5D199F203175E1E01CA2136 /* AUOutputElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; };
F5D199F303175E1E01CA2136 /* AUOutputElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; };
F5D199F503175E1E01CA2136 /* AUScopeElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; };
F5D199F603175E1E01CA2136 /* AUScopeElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; };
F5D199F903175E1E01CA2136 /* ComponentBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; };
F5D199FA03175E1E01CA2136 /* ComponentBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; };
F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; }; F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; };
F5D199FF03175E1E01CA2136 /* AUEffectBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; }; F5D199FF03175E1E01CA2136 /* AUEffectBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; };
F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; }; F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
@@ -289,19 +288,18 @@
F5D199EB03175E1E01CA2136 /* AUBase */ = { F5D199EB03175E1E01CA2136 /* AUBase */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
3E3AAA740670E29D00C484A8 /* AUResources.r */,
F5D199EC03175E1E01CA2136 /* AUBase.cpp */,
F5D199ED03175E1E01CA2136 /* AUBase.h */,
F5D199EE03175E1E01CA2136 /* AUDispatch.cpp */,
F5D199EF03175E1E01CA2136 /* AUDispatch.h */,
F5D199F003175E1E01CA2136 /* AUInputElement.cpp */,
F5D199F103175E1E01CA2136 /* AUInputElement.h */,
F5D199F203175E1E01CA2136 /* AUOutputElement.cpp */,
F5D199F303175E1E01CA2136 /* AUOutputElement.h */,
F5D199F503175E1E01CA2136 /* AUScopeElement.cpp */,
F5D199F603175E1E01CA2136 /* AUScopeElement.h */,
F5D199F903175E1E01CA2136 /* ComponentBase.cpp */,
F5D199FA03175E1E01CA2136 /* ComponentBase.h */,
84581F820D917FC700AE1A4C /* AUBase.cpp */,
84581F830D917FC700AE1A4C /* AUBase.h */,
84581F840D917FC700AE1A4C /* AUDispatch.cpp */,
84581F850D917FC700AE1A4C /* AUDispatch.h */,
84581F860D917FC700AE1A4C /* AUInputElement.cpp */,
84581F870D917FC700AE1A4C /* AUInputElement.h */,
84581F880D917FC700AE1A4C /* AUOutputElement.cpp */,
84581F890D917FC700AE1A4C /* AUOutputElement.h */,
84581F8B0D917FC700AE1A4C /* AUScopeElement.cpp */,
84581F8C0D917FC700AE1A4C /* AUScopeElement.h */,
84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */,
84581F8E0D917FC700AE1A4C /* ComponentBase.h */,
); );
path = AUBase; path = AUBase;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -370,12 +368,6 @@
isa = PBXHeadersBuildPhase; isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
3E8BF105079CA60300021B09 /* AUBase.h in Headers */,
3E8BF106079CA60300021B09 /* AUDispatch.h in Headers */,
3E8BF107079CA60300021B09 /* AUInputElement.h in Headers */,
3E8BF108079CA60300021B09 /* AUOutputElement.h in Headers */,
3E8BF109079CA60300021B09 /* AUScopeElement.h in Headers */,
3E8BF10A079CA60300021B09 /* ComponentBase.h in Headers */,
3E8BF10B079CA60300021B09 /* AUEffectBase.h in Headers */, 3E8BF10B079CA60300021B09 /* AUEffectBase.h in Headers */,
3E8BF10C079CA60300021B09 /* AUBuffer.h in Headers */, 3E8BF10C079CA60300021B09 /* AUBuffer.h in Headers */,
3E8BF10D079CA60300021B09 /* CAStreamBasicDescription.h in Headers */, 3E8BF10D079CA60300021B09 /* CAStreamBasicDescription.h in Headers */,
@@ -390,6 +382,12 @@
84F055260906FBCF00AEC8DB /* AUSilentTimeout.h in Headers */, 84F055260906FBCF00AEC8DB /* AUSilentTimeout.h in Headers */,
84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */, 84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */,
84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */, 84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */,
84581F900D917FC700AE1A4C /* AUBase.h in Headers */,
84581F920D917FC700AE1A4C /* AUDispatch.h in Headers */,
84581F940D917FC700AE1A4C /* AUInputElement.h in Headers */,
84581F960D917FC700AE1A4C /* AUOutputElement.h in Headers */,
84581F990D917FC700AE1A4C /* AUScopeElement.h in Headers */,
84581F9B0D917FC700AE1A4C /* ComponentBase.h in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -423,6 +421,7 @@
F5AA99BA0281A61201C34293 /* Project object */ = { F5AA99BA0281A61201C34293 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
buildConfigurationList = A9E884B90874ABE600B2DFE8 /* Build configuration list for PBXProject "JuceDemoAU" */; buildConfigurationList = A9E884B90874ABE600B2DFE8 /* Build configuration list for PBXProject "JuceDemoAU" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1; hasScannedForEncodings = 1;
mainGroup = F5AA99B60281A61201C34293; mainGroup = F5AA99B60281A61201C34293;
productRefGroup = F5AA99C40281A62C01C34293 /* Products */; productRefGroup = F5AA99C40281A62C01C34293 /* Products */;
@@ -433,6 +432,7 @@
ProjectRef = 84F0545A0906865D00AEC8DB /* Juce.xcodeproj */; ProjectRef = 84F0545A0906865D00AEC8DB /* Juce.xcodeproj */;
}, },
); );
projectRoot = "";
targets = ( targets = (
3E8BF102079CA60300021B09 /* JuceAU */, 3E8BF102079CA60300021B09 /* JuceAU */,
); );
@@ -477,19 +477,13 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
3E8BF115079CA60300021B09 /* AUInputElement.cpp in Sources */,
3E8BF116079CA60300021B09 /* AUOutputElement.cpp in Sources */,
3E8BF117079CA60300021B09 /* AUScopeElement.cpp in Sources */,
3E8BF113079CA60300021B09 /* AUBase.cpp in Sources */,
3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */, 3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */,
3E8BF114079CA60300021B09 /* AUDispatch.cpp in Sources */,
3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */, 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */,
3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */, 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */,
84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */, 84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */,
84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */, 84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */,
84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */, 84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */,
84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */, 84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */,
3E8BF118079CA60300021B09 /* ComponentBase.cpp in Sources */,
84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */, 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */,
3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */, 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */,
84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */, 84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */,
@@ -499,6 +493,12 @@
84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */, 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */,
84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */, 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */,
84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */, 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */,
84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */,
84581F910D917FC700AE1A4C /* AUDispatch.cpp in Sources */,
84581F930D917FC700AE1A4C /* AUInputElement.cpp in Sources */,
84581F950D917FC700AE1A4C /* AUOutputElement.cpp in Sources */,
84581F980D917FC700AE1A4C /* AUScopeElement.cpp in Sources */,
84581F9A0D917FC700AE1A4C /* ComponentBase.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -517,6 +517,10 @@
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_USE_GCC3_PFE_SUPPORT = YES; GCC_USE_GCC3_PFE_SUPPORT = YES;
HEADER_SEARCH_PATHS = (
../../../../../,
"$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk/usr/include",
);
INFOPLIST_FILE = "Info-JuceAU.plist"; INFOPLIST_FILE = "Info-JuceAU.plist";
INSTALL_PATH = "/Library/Audio/Plug-Ins/Components/"; INSTALL_PATH = "/Library/Audio/Plug-Ins/Components/";
OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -I / -I /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers"; OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -I / -I /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers";


+ 5
- 0
juce.h View File

@@ -176,6 +176,11 @@ END_JUCE_NAMESPACE
#pragma comment(lib, "OpenGL32.Lib") #pragma comment(lib, "OpenGL32.Lib")
#pragma comment(lib, "GlU32.Lib") #pragma comment(lib, "GlU32.Lib")
#endif #endif
#if JUCE_QUICKTIME_AUDIOFORMAT
#pragma comment (lib, "QTMLClient.lib")
#endif
#endif #endif
#endif #endif


+ 7
- 0
juce_Config.h View File

@@ -90,6 +90,13 @@
#define JUCE_QUICKTIME 1 #define JUCE_QUICKTIME 1
#endif #endif
/** This lets you enable the QuickTimeAudioFormat class.
If you're using this on win32, you'll need to have installed the QuickTime SDK.
*/
#if ! (defined (JUCE_QUICKTIME_AUDIOFORMAT) || defined (LINUX) || (defined (_WIN32) && ! defined (_MSC_VER)))
// #define JUCE_QUICKTIME_AUDIOFORMAT 1
#endif
//============================================================================= //=============================================================================
/** Comment out this macro if you don't want to enable OpenGL or if you don't /** Comment out this macro if you don't want to enable OpenGL or if you don't
have the appropriate headers and libraries available. If it's not enabled, the have the appropriate headers and libraries available. If it's not enabled, the


+ 3
- 0
src/juce_app_includes.h View File

@@ -230,6 +230,9 @@
#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ #ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__
#include "juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.h" #include "juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.h"
#endif #endif
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__
#include "juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h"
#endif
#ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ #ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__
#include "juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h" #include "juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h"
#endif #endif


+ 553
- 0
src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp View File

@@ -0,0 +1,553 @@
/*
==============================================================================

This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.

------------------------------------------------------------------------------

JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.

JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA

------------------------------------------------------------------------------

If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.

==============================================================================
*/

#include "../../../../juce_Config.h"

#if JUCE_QUICKTIME_AUDIOFORMAT

#if ! defined (_WIN32)
#include <Quicktime/Movies.h>
#include <Quicktime/QTML.h>
#include <Quicktime/QuickTimeComponents.h>
#include <Quicktime/MediaHandlers.h>
#include <Quicktime/ImageCodec.h>
#else
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable : 4100)
#endif

#include <Movies.h>
#include <QTML.h>
#include <QuickTimeComponents.h>
#include <MediaHandlers.h>
#include <ImageCodec.h>

#ifdef _MSC_VER
#pragma warning (pop)
#endif
#endif

#include "../../../juce_core/basics/juce_StandardHeader.h"

BEGIN_JUCE_NAMESPACE

#include "juce_QuickTimeAudioFormat.h"
#include "../../../juce_core/text/juce_LocalisedStrings.h"
#include "../../../juce_core/threads/juce_Thread.h"
#include "../../../juce_core/io/files/juce_FileInputStream.h"

#define qtFormatName TRANS("QuickTime file")
static const tchar* const extensions[] = { T(".mov"), T(".mp3"), 0 };

//==============================================================================
class QTAudioReader : public AudioFormatReader
{
public:
QTAudioReader (InputStream* const input_, const int trackNum_)
: AudioFormatReader (input_, qtFormatName),
ok (false),
movie (0),
trackNum (trackNum_),
extractor (0),
lastSampleRead (0),
lastThreadId (0)
{
bufferList = (AudioBufferList*) juce_calloc (256);

#ifdef WIN32
if (InitializeQTML (0) != noErr)
return;
#endif
if (EnterMovies() != noErr)
return;

#if JUCE_MAC
EnterMoviesOnThread (0);
#endif

if (! openMovie (input_))
return;

{
const int numTracks = GetMovieTrackCount (movie);
int trackCount = 0;

for (int i = 1; i <= numTracks; ++i)
{
track = GetMovieIndTrack (movie, i);
media = GetTrackMedia (track);

OSType mediaType;
GetMediaHandlerDescription (media, &mediaType, 0, 0);

if (mediaType == SoundMediaType
&& trackCount++ == trackNum_)
{
ok = true;
break;
}
}
}

if (! ok)
return;

ok = false;

lengthInSamples = GetMediaDecodeDuration (media);
usesFloatingPointData = false;

samplesPerFrame = (int) (GetMediaDecodeDuration (media) / GetMediaSampleCount (media));

trackUnitsPerFrame = GetMovieTimeScale (movie) * samplesPerFrame
/ GetMediaTimeScale (media);

OSStatus err = MovieAudioExtractionBegin (movie, 0, &extractor);

unsigned long output_layout_size;
err = MovieAudioExtractionGetPropertyInfo (extractor,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout,
0, &output_layout_size, 0);
if (err != noErr)
return;

AudioChannelLayout* const qt_audio_channel_layout
= (AudioChannelLayout*) juce_calloc (output_layout_size);

err = MovieAudioExtractionGetProperty (extractor,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout,
output_layout_size, qt_audio_channel_layout, 0);

qt_audio_channel_layout->mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;

err = MovieAudioExtractionSetProperty (extractor,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout,
sizeof (qt_audio_channel_layout),
qt_audio_channel_layout);

juce_free (qt_audio_channel_layout);

err = MovieAudioExtractionGetProperty (extractor,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription,
sizeof (inputStreamDesc),
&inputStreamDesc, 0);
if (err != noErr)
return;

inputStreamDesc.mFormatFlags = kAudioFormatFlagIsSignedInteger
| kAudioFormatFlagIsPacked
| kAudioFormatFlagsNativeEndian;
inputStreamDesc.mBitsPerChannel = sizeof (SInt16) * 8;
inputStreamDesc.mChannelsPerFrame = jmin (2, inputStreamDesc.mChannelsPerFrame);
inputStreamDesc.mBytesPerFrame = sizeof (SInt16) * inputStreamDesc.mChannelsPerFrame;
inputStreamDesc.mBytesPerPacket = inputStreamDesc.mBytesPerFrame;

err = MovieAudioExtractionSetProperty (extractor,
kQTPropertyClass_MovieAudioExtraction_Audio,
kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription,
sizeof (inputStreamDesc),
&inputStreamDesc);
if (err != noErr)
return;

Boolean allChannelsDiscrete = false;
err = MovieAudioExtractionSetProperty (extractor,
kQTPropertyClass_MovieAudioExtraction_Movie,
kQTMovieAudioExtractionMoviePropertyID_AllChannelsDiscrete,
sizeof (allChannelsDiscrete),
&allChannelsDiscrete);

if (err != noErr)
return;

bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mNumberChannels = inputStreamDesc.mChannelsPerFrame;
bufferList->mBuffers[0].mDataByteSize = (UInt32) (samplesPerFrame * inputStreamDesc.mBytesPerFrame) + 16;
bufferList->mBuffers[0].mData = malloc (bufferList->mBuffers[0].mDataByteSize);

sampleRate = inputStreamDesc.mSampleRate;
bitsPerSample = 16;
numChannels = inputStreamDesc.mChannelsPerFrame;

detachThread();
ok = true;
}

~QTAudioReader()
{
if (extractor != 0)
{
MovieAudioExtractionEnd (extractor);
extractor = 0;
}

checkThreadIsAttached();
DisposeMovie (movie);

juce_free (bufferList->mBuffers[0].mData);
juce_free (bufferList);
}

bool read (int** destSamples,
int64 startSample,
int numSamples)
{
checkThreadIsAttached();
int done = 0;

while (numSamples > 0)
{
if (! loadFrame ((int) startSample))
return false;

const int numToDo = jmin (numSamples, samplesPerFrame);

for (unsigned int j = 0; j < inputStreamDesc.mChannelsPerFrame; ++j)
{
if (destSamples[j] != 0)
{
const short* const src = ((const short*) bufferList->mBuffers[0].mData) + j;

for (int i = 0; i < numToDo; ++i)
destSamples[j][done + i] = src [i << 1] << 16;
}
}

done += numToDo;
startSample += numToDo;
numSamples -= numToDo;
}

detachThread();
return true;
}

bool loadFrame (const int sampleNum)
{
if (lastSampleRead != sampleNum)
{
TimeRecord time;
time.scale = (TimeScale) inputStreamDesc.mSampleRate;
time.base = 0;
time.value.hi = 0;
time.value.lo = (UInt32) sampleNum;

OSStatus err = MovieAudioExtractionSetProperty (extractor,
kQTPropertyClass_MovieAudioExtraction_Movie,
kQTMovieAudioExtractionMoviePropertyID_CurrentTime,
sizeof (time), &time);

if (err != noErr)
return false;
}

bufferList->mBuffers[0].mDataByteSize = inputStreamDesc.mBytesPerFrame * samplesPerFrame;

UInt32 outFlags = 0;
UInt32 actualNumSamples = samplesPerFrame;
OSStatus err = MovieAudioExtractionFillBuffer (extractor, &actualNumSamples,
bufferList, &outFlags);

lastSampleRead = sampleNum + samplesPerFrame;

return err == noErr;
}

juce_UseDebuggingNewOperator

bool ok;

private:
Movie movie;
Media media;
Track track;
const int trackNum;
double trackUnitsPerFrame;
int samplesPerFrame;
int lastSampleRead, lastThreadId;
MovieAudioExtractionRef extractor;
AudioStreamBasicDescription inputStreamDesc;
AudioBufferList* bufferList;

/*OSErr readMovieStream (long offset, long size, void* dataPtr)
{
input->setPosition (offset);
input->read (dataPtr, size);
return noErr;
}

static OSErr readMovieStreamProc (long offset, long size, void* dataPtr, void* userRef)
{
return ((QTAudioReader*) userRef)->readMovieStream (offset, size, dataPtr);
}*/

static Handle createHandleDataRef (Handle dataHandle, const char* fileName)
{
Handle dataRef = 0;
OSStatus err = PtrToHand (&dataHandle, &dataRef, sizeof (Handle));
if (err == noErr)
{
Str255 suffix;
#if JUCE_WIN32
strcpy_s ((char*) suffix, 128, fileName);
#else
strcpy ((char*) suffix, fileName);
#endif
StringPtr name = suffix;
err = PtrAndHand (name, dataRef, name[0]+1);

if (err == noErr)
{
long atoms[3];
atoms[0] = EndianU32_NtoB (3 * sizeof (long));
atoms[1] = EndianU32_NtoB (kDataRefExtensionMacOSFileType);
atoms[2] = EndianU32_NtoB (MovieFileType);

err = PtrAndHand (atoms, dataRef, 3 * sizeof (long));

if (err == noErr)
return dataRef;
}

DisposeHandle (dataRef);
}

return 0;
}

static CFStringRef juceStringToCFString (const String& s)
{
const int len = s.length();
const juce_wchar* const t = (const juce_wchar*) s;

UniChar* temp = (UniChar*) juce_malloc (sizeof (UniChar) * len + 4);

for (int i = 0; i <= len; ++i)
temp[i] = t[i];

CFStringRef result = CFStringCreateWithCharacters (kCFAllocatorDefault, temp, len);
juce_free (temp);

return result;
}

//==============================================================================
bool openMovie (InputStream* const input)
{
bool ok = false;

QTNewMoviePropertyElement props[5];
zeromem (props, sizeof (props));
int prop = 0;

FileInputStream* fin = dynamic_cast <FileInputStream*> (input);

if (fin != 0)
{
CFStringRef pathString = juceStringToCFString (T("file://") + fin->getFile().getFullPathName().replaceCharacter (T('\\'), T('/')));
CFURLRef urlRef = CFURLCreateWithString (kCFAllocatorDefault, pathString, 0);
CFRelease (pathString);

props[prop].propClass = kQTPropertyClass_DataLocation;
props[prop].propID = kQTDataLocationPropertyID_CFURL;
props[prop].propValueSize = sizeof (urlRef);
props[prop].propValueAddress = &urlRef;
++prop;

ok = openMovie (props, prop);
}
else
{
// sanity-check because this currently needs to load the whole stream into memory..
jassert (input->getTotalLength() < 50 * 1024 * 1024);

Handle dataHandle = NewHandle ((Size) input->getTotalLength());
HLock (dataHandle);
// read the entire stream into memory - this is a pain, but can't get it to work
// properly using a custom callback to supply the data.
input->read (*dataHandle, (int) input->getTotalLength());
HUnlock (dataHandle);

// different types to get QT to try. (We should really be a bit smarter here by
// working out in advance which one the stream contains, rather than just trying
// each one)
const char* const suffixesToTry[] = { "\04.mov", "\04.mp3",
"\04.avi", "\04.m4a" };

for (int i = 0; i < numElementsInArray (suffixesToTry) && ! ok; ++i)
{
Handle dataRef = createHandleDataRef (dataHandle, suffixesToTry [i]);

/* // this fails for some bizarre reason - it can be bodged to work with
// movies, but can't seem to do it for other file types..
QTNewMovieUserProcRecord procInfo;
procInfo.getMovieUserProc = NewGetMovieUPP (readMovieStreamProc);
procInfo.getMovieUserProcRefcon = this;
procInfo.defaultDataRef.dataRef = dataRef;
procInfo.defaultDataRef.dataRefType = HandleDataHandlerSubType;

props[prop].propClass = kQTPropertyClass_DataLocation;
props[prop].propID = kQTDataLocationPropertyID_MovieUserProc;
props[prop].propValueSize = sizeof (procInfo);
props[prop].propValueAddress = (void*) &procInfo;
++prop; */

DataReferenceRecord dr;
dr.dataRef = dataRef;
dr.dataRefType = HandleDataHandlerSubType;
props[prop].propClass = kQTPropertyClass_DataLocation;
props[prop].propID = kQTDataLocationPropertyID_DataReference;
props[prop].propValueSize = sizeof (dr);
props[prop].propValueAddress = (void*) &dr;
++prop;

ok = openMovie (props, prop);

DisposeHandle (dataRef);
}

DisposeHandle (dataHandle);
}

return ok;
}

bool openMovie (QTNewMoviePropertyElement* props, int prop)
{
Boolean trueBool = true;
props[prop].propClass = kQTPropertyClass_MovieInstantiation;
props[prop].propID = kQTMovieInstantiationPropertyID_DontResolveDataRefs;
props[prop].propValueSize = sizeof (trueBool);
props[prop].propValueAddress = &trueBool;
++prop;

Boolean isActive = true;
props[prop].propClass = kQTPropertyClass_NewMovieProperty;
props[prop].propID = kQTNewMoviePropertyID_Active;
props[prop].propValueSize = sizeof (isActive);
props[prop].propValueAddress = &isActive;
++prop;

#if JUCE_MAC
SetPort (0);
#else
MacSetPort (0);
#endif

return NewMovieFromProperties (prop, props, 0, 0, &movie) == noErr;
}

//==============================================================================
void checkThreadIsAttached()
{
#if JUCE_MAC
if (Thread::getCurrentThreadId() != lastThreadId)
EnterMoviesOnThread (0);
AttachMovieToCurrentThread (movie);
#endif
}

void detachThread()
{
#if JUCE_MAC
DetachMovieFromCurrentThread (movie);
#endif
}
};


//==============================================================================
QuickTimeAudioFormat::QuickTimeAudioFormat()
: AudioFormat (qtFormatName, (const tchar**) extensions)
{
}

QuickTimeAudioFormat::~QuickTimeAudioFormat()
{
}

const Array <int> QuickTimeAudioFormat::getPossibleSampleRates()
{
return Array<int>();
}

const Array <int> QuickTimeAudioFormat::getPossibleBitDepths()
{
return Array<int>();
}

bool QuickTimeAudioFormat::canDoStereo()
{
return true;
}

bool QuickTimeAudioFormat::canDoMono()
{
return true;
}

//==============================================================================
AudioFormatReader* QuickTimeAudioFormat::createReaderFor (InputStream* sourceStream,
const bool deleteStreamIfOpeningFails)
{
QTAudioReader* r = new QTAudioReader (sourceStream, 0);

if (! r->ok)
{
if (! deleteStreamIfOpeningFails)
r->input = 0;

deleteAndZero (r);
}

return r;
}

AudioFormatWriter* QuickTimeAudioFormat::createWriterFor (OutputStream* /*streamToWriteTo*/,
double /*sampleRateToUse*/,
unsigned int /*numberOfChannels*/,
int /*bitsPerSample*/,
const StringPairArray& /*metadataValues*/,
int /*qualityOptionIndex*/)
{
jassertfalse // not yet implemented!
return 0;
}


END_JUCE_NAMESPACE

#endif

+ 81
- 0
src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h View File

@@ -0,0 +1,81 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__
#define __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__
#include "juce_AudioFormat.h"
//==============================================================================
/**
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 // __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__

Loading…
Cancel
Save