SoundEngine.h
上传用户:jsxyqc
上传日期:2015-08-08
资源大小:1251k
文件大小:16k
源码类别:

MacOS编程

开发平台:

Objective-C

  1. /*
  2. ===== IMPORTANT =====
  3. This is sample code demonstrating API, technology or techniques in development.
  4. Although this sample code has been reviewed for technical accuracy, it is not
  5. final. Apple is supplying this information to help you plan for the adoption of
  6. the technologies and programming interfaces described herein. This information
  7. is subject to change, and software implemented based on this sample code should
  8. be tested with final operating system software and final documentation. Newer
  9. versions of this sample code may be provided with future seeds of the API or
  10. technology. For information about updates to this and other developer
  11. documentation, view the New & Updated sidebars in subsequent documentation
  12. seeds.
  13. =====================
  14. File: SoundEngine.h
  15. Abstract: These functions play background music tracks, multiple sound effects,
  16. and support stereo panning with a low-latency response.
  17. Version: 1.6
  18. Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Inc.
  19. ("Apple") in consideration of your agreement to the following terms, and your
  20. use, installation, modification or redistribution of this Apple software
  21. constitutes acceptance of these terms.  If you do not agree with these terms,
  22. please do not use, install, modify or redistribute this Apple software.
  23. In consideration of your agreement to abide by the following terms, and subject
  24. to these terms, Apple grants you a personal, non-exclusive license, under
  25. Apple's copyrights in this original Apple software (the "Apple Software"), to
  26. use, reproduce, modify and redistribute the Apple Software, with or without
  27. modifications, in source and/or binary forms; provided that if you redistribute
  28. the Apple Software in its entirety and without modifications, you must retain
  29. this notice and the following text and disclaimers in all such redistributions
  30. of the Apple Software.
  31. Neither the name, trademarks, service marks or logos of Apple Inc. may be used
  32. to endorse or promote products derived from the Apple Software without specific
  33. prior written permission from Apple.  Except as expressly stated in this notice,
  34. no other rights or licenses, express or implied, are granted by Apple herein,
  35. including but not limited to any patent rights that may be infringed by your
  36. derivative works or by other works in which the Apple Software may be
  37. incorporated.
  38. The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
  39. WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
  40. WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  41. PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
  42. COMBINATION WITH YOUR PRODUCTS.
  43. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
  44. CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  45. GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  46. ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR
  47. DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF
  48. CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
  49. APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  50. Copyright (C) 2008 Apple Inc. All Rights Reserved.
  51. */
  52. /*==================================================================================================
  53. SoundEngine.h
  54. ==================================================================================================*/
  55. #if !defined(__SoundEngine_h__)
  56. #define __SoundEngine_h__
  57. //==================================================================================================
  58. // Includes
  59. //==================================================================================================
  60. // System Includes
  61. #include <CoreAudio/CoreAudioTypes.h>
  62. #include <AudioToolbox/AudioToolbox.h>
  63. #if defined(__cplusplus)
  64. extern "C"
  65. {
  66. #endif
  67. //==================================================================================================
  68. // Sound Engine
  69. //==================================================================================================
  70. /*!
  71.     @enum SoundEngine error codes
  72.     @abstract   These are the error codes returned from the SoundEngine API.
  73.     @constant   kSoundEngineErrUnitialized 
  74. The SoundEngine has not been initialized. Use SoundEngine_Initialize().
  75.     @constant   kSoundEngineErrInvalidID 
  76. The specified EffectID was not found. This can occur if the effect has not been loaded, or
  77. if an unloaded is trying to be accessed.
  78.     @constant   kSoundEngineErrFileNotFound 
  79. The specified file was not found.
  80.     @constant   kSoundEngineErrInvalidFileFormat 
  81. The format of the file is invalid. Effect data must be little-endian 8 or 16 bit LPCM.
  82.     @constant   kSoundEngineErrDeviceNotFound 
  83. The output device was not found.
  84. */
  85. enum {
  86. kSoundEngineErrUnitialized = 1,
  87. kSoundEngineErrInvalidID = 2,
  88. kSoundEngineErrFileNotFound = 3,
  89. kSoundEngineErrInvalidFileFormat = 4,
  90. kSoundEngineErrDeviceNotFound = 5
  91. };
  92. /*!
  93.     @function       SoundEngine_Initialize
  94.     @abstract       Initializes and sets up the sound engine. Calling after a previous initialize will
  95. reset the state of the SoundEngine, with all previous effects and music tracks
  96. erased. Note: This is not required, loading an effect or background track will 
  97. initialize as necessary.
  98.     @param          inMixerOutputRate
  99.                         A Float32 that represents the output sample rate of the mixer unit. Setting this to 
  100. 0 will use the default rate (the sample rate of the device)
  101. @result         A OSStatus indicating success or failure.
  102. */
  103. OSStatus  SoundEngine_Initialize(Float32 inMixerOutputRate);
  104. /*!
  105.     @function       SoundEngine_Teardown
  106.     @abstract       Tearsdown the sound engine.
  107.     @result         A OSStatus indicating success or failure.
  108. */
  109. OSStatus  SoundEngine_Teardown();
  110. /*!
  111.     @function       SoundEngine_SetMasterVolume
  112.     @abstract       Sets the overall volume of all sounds coming from the process
  113.     @param          inValue
  114.                         A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
  115.     @result         A OSStatus indicating success or failure.
  116. */
  117. OSStatus  SoundEngine_SetMasterVolume(Float32 inValue);
  118. /*!
  119.     @function       SoundEngine_SetListenerPosition
  120.     @abstract       Sets the position of the listener in the 3D space
  121.     @param          inX
  122.                         A Float32 that represents the listener's position along the X axis.
  123.     @param          inY
  124.                         A Float32 that represents the listener's position along the Y axis.
  125.     @param          inZ
  126.                         A Float32 that represents the listener's position along the Z axis.
  127.     @result         A OSStatus indicating success or failure.
  128. */
  129. OSStatus  SoundEngine_SetListenerPosition(Float32 inX, Float32 inY, Float32 inZ);
  130. /*!
  131.     @function       SoundEngine_SetListenerGain
  132.     @abstract       Sets the gain of the listener. Must be >= 0.0
  133.     @param          inValue
  134.                         A Float32 that represents the listener's gain
  135.     @result         A OSStatus indicating success or failure.
  136. */
  137. OSStatus  SoundEngine_SetListenerGain(Float32 inValue);
  138. /*!
  139.     @function       SoundEngine_LoadBackgroundMusicTrack
  140.     @abstract       Tells the background music player which file to play
  141.     @param          inPath
  142.                         The absolute path to the file to play.
  143.     @param          inAddToQueue
  144.                         If true, file will be added to the current background music queue. If
  145. false, queue will be cleared and only loop the specified file.
  146.     @param          inLoadAtOnce
  147.                         If true, file will be loaded completely into memory. If false, data will be 
  148. streamed from the file as needed. For games without large memory pressure and/or
  149. small background music files, this can save memory access and improve power efficiency
  150. @result         A OSStatus indicating success or failure.
  151. */
  152. OSStatus  SoundEngine_LoadBackgroundMusicTrack(const char* inPath, Boolean inAddToQueue, Boolean inLoadAtOnce);
  153. /*!
  154.     @function       SoundEngine_UnloadBackgroundMusicTrack
  155.     @abstract       Tells the background music player to release all resources and stop playing.
  156.     @result         A OSStatus indicating success or failure.
  157. */
  158. OSStatus  SoundEngine_UnloadBackgroundMusicTrack();
  159. /*!
  160.     @function       SoundEngine_StartBackgroundMusic
  161.     @abstract       Tells the background music player to start playing.
  162.     @result         A OSStatus indicating success or failure.
  163. */
  164. OSStatus  SoundEngine_StartBackgroundMusic();
  165. /*!
  166.     @function       SoundEngine_StopBackgroundMusic
  167.     @abstract       Tells the background music player to stop playing.
  168.     @param          inAddToQueue
  169.                         If true, playback will stop when all tracks have completed. If false, playback
  170. will stop immediately.
  171.     @result         A OSStatus indicating success or failure.
  172. */
  173. OSStatus  SoundEngine_StopBackgroundMusic(Boolean inStopAtEnd);
  174. /*!
  175.     @function       SoundEngine_SetBackgroundMusicVolume
  176.     @abstract       Sets the volume for the background music player
  177.     @param          inValue
  178.                         A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
  179.     @result         A OSStatus indicating success or failure.
  180. */
  181. OSStatus  SoundEngine_SetBackgroundMusicVolume(Float32 inValue);
  182. /*!
  183.     @function       SoundEngine_LoadLoopingEffect
  184.     @abstract       Loads a sound effect from a file and return an ID to refer to that effect. Note: The files
  185. MUST all be in the same data format and sample rate
  186.     @param          inLoopFilePath
  187.                         The absolute path to the file to load. This is the file that will loop continually.
  188.     @param          inAttackFilePath
  189.                         The absolute path to the file to load. This will play once at the start of the effect.
  190. Set to NULL if no attack is desired, looping file will play immediately.
  191.     @param          inDecayFilePath
  192.                         The absolute path to the file to load. This will play once after looping has been ended. 
  193. Triggered using SoundEngine_StopEffect with the inDoDecay set to true. Set to NULL if no
  194. decay is desired, looping file will stop immediately. 
  195. @param outEffectID
  196. A UInt32 ID that refers to the effect.
  197.     @result         A OSStatus indicating success or failure.
  198. */
  199. OSStatus  SoundEngine_LoadLoopingEffect(const char* inLoopFilePath, const char* inAttackFilePath, const char* inDecayFilePath, UInt32* outEffectID);
  200. /*!
  201.     @function       SoundEngine_LoadEffect
  202.     @abstract       Loads a sound effect from a file and return an ID to refer to that effect.
  203.     @param          inPath
  204.                         The absolute path to the file to load.
  205. @param outEffectID
  206. A UInt32 ID that refers to the effect.
  207.     @result         A OSStatus indicating success or failure.
  208. */
  209. OSStatus  SoundEngine_LoadEffect(const char* inPath, UInt32* outEffectID);
  210. /*!
  211.     @function       SoundEngine_UnloadEffect
  212.     @abstract       Releases all resources associated with the given effect ID
  213.     @param          inEffectID
  214.                         The ID of the effect to unload.
  215.     @result         A OSStatus indicating success or failure.
  216. */
  217. OSStatus  SoundEngine_UnloadEffect(UInt32 inEffectID);
  218. /*!
  219.     @function       SoundEngine_StartEffect
  220.     @abstract       Starts playback of an effect
  221.     @param          inEffectID
  222.                         The ID of the effect to start.
  223.     @result         A OSStatus indicating success or failure.
  224. */
  225. OSStatus  SoundEngine_StartEffect(UInt32 inEffectID);
  226. /*!
  227.     @function       SoundEngine_StopEffect
  228.     @abstract       Stops playback of an effect
  229.     @param          inEffectID
  230.                         The ID of the effect to stop.
  231.     @param          inDoDecay
  232.                         Whether to play the decay file or stop immmediately (this is ignored
  233. for non-looping effects)
  234.     @result         A OSStatus indicating success or failure.
  235. */
  236. OSStatus  SoundEngine_StopEffect(UInt32 inEffectID, Boolean inDoDecay);
  237. /*!
  238.     @function       SoundEngine_Vibrate
  239.     @abstract       Tells the device to vibrate
  240. */
  241. #if TARGET_OS_IPHONE
  242. #define SoundEngine_Vibrate() AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
  243. #endif
  244. /*!
  245.     @function       SoundEngine_SetEffectPitch
  246.     @abstract       Applies pitch shifting to an effect
  247.     @param          inEffectID
  248.                         The ID of the effect to adjust
  249.     @param          inValue
  250.                         A Float32 that represents the pitch scalar, with 1.0 being unchanged. Must 
  251. be greater than 0.
  252.     @result         A OSStatus indicating success or failure.
  253. */
  254. OSStatus  SoundEngine_SetEffectPitch(UInt32 inEffectID, Float32 inValue);
  255. /*!
  256.     @function       SoundEngine_SetEffectVolume
  257.     @abstract       Sets the volume for an effect
  258.     @param          inEffectID
  259.                         The ID of the effect to adjust
  260.     @param          inValue
  261.                         A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
  262.     @result         A OSStatus indicating success or failure.
  263. */
  264. OSStatus  SoundEngine_SetEffectLevel(UInt32 inEffectID, Float32 inValue);
  265. /*!
  266.     @function       SoundEngine_SetEffectPosition
  267.     @abstract       Tells the engine whether a given effect should loop when played or if it should
  268. play through just once and stop.
  269.     @param          inEffectID
  270.                         The ID of the effect to adjust
  271.     @param          inX
  272.                         A Float32 that represents the effect's position along the X axis. Maximum distance
  273. is 100000.0 (absolute, not per axis), reference distance (distance from which gain 
  274. begins to attenuate) is 1.0
  275.     @param          inY
  276.                         A Float32 that represents the effect's position along the Y axis. Maximum distance
  277. is 100000.0 (absolute, not per axis), reference distance (distance from which gain 
  278. begins to attenuate) is 1.0
  279. @param          inZ
  280.                         A Float32 that represents the effect's position along the Z axis. Maximum distance
  281. is 100000.0 by default (absolute, not per axis), reference distance (distance from 
  282. which gain begins to attenuate) is 1.0
  283. @result         A OSStatus indicating success or failure.
  284. */
  285. OSStatus SoundEngine_SetEffectPosition(UInt32 inEffectID, Float32 inX, Float32 inY, Float32 inZ);
  286. /*!
  287.    @function       SoundEngine_SetEffectsVolume
  288.    @abstract       Sets the overall volume for the effects
  289.    @param          inValue
  290.                        A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
  291.    @result         A OSStatus indicating success or failure.
  292. */
  293. OSStatus  SoundEngine_SetEffectsVolume(Float32 inValue);
  294. /*!
  295.    @function       SoundEngine_SetMaxDistance
  296.    @abstract       Sets the maximum distance for effect attenuation. Gain will attenuate between the
  297.    reference distance and the maximum distance, after which gain will be 0.0
  298.    @param          inValue
  299.                        A Float32 that represents the level. Must be greater than 0.0.
  300.    @result         A OSStatus indicating success or failure.
  301. */
  302. OSStatus SoundEngine_SetMaxDistance(Float32 inValue);
  303. /*!
  304.    @function       SoundEngine_SetReferenceDistance
  305.    @abstract       Sets the distance at which effect gain attenuation begins. It will attenuate between
  306.    the reference distance and the maximum distance. Sounds closer than the reference
  307.    distance will have no attenuation applied
  308.    @param          inValue
  309.                        A Float32 that represents the level. Must be greater than 0.0.
  310.    @result         A OSStatus indicating success or failure.
  311. */
  312. OSStatus SoundEngine_SetReferenceDistance(Float32 inValue);
  313. #if defined(__cplusplus)
  314. }
  315. #endif
  316. #endif