├── AudioSample-Info.plist
├── AudioSample.xcodeproj
├── alex.mode1v3
├── alex.pbxuser
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcuserdata
│ │ └── alex.xcuserdatad
│ │ └── WorkspaceSettings.xcsettings
└── xcuserdata
│ └── alex.xcuserdatad
│ ├── xcdebugger
│ └── Breakpoints.xcbkptlist
│ └── xcschemes
│ ├── AudioSample.xcscheme
│ └── xcschememanagement.plist
├── AudioSample_Prefix.pch
├── Classes
├── AppleOpenALSupport.c
├── AppleOpenALSupport.h
├── AudioSampleAppDelegate.h
├── AudioSampleAppDelegate.m
├── CMOpenALSound.h
├── CMOpenALSound.m
├── CMOpenALSoundManager.h
├── CMOpenALSoundManager.m
├── DebugOutput.h
├── DebugOutput.m
├── RootViewController.h
├── RootViewController.m
└── SynthesizeSingleton.h
├── License
├── MainWindow.xib
├── Readme.markdown
├── RootViewController.xib
├── Start.caf
├── backgroundLoop.m4a
├── engine.caf
├── main.m
├── screen.png
├── volumedown.png
└── volumeup.png
/AudioSample-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIconFile
12 |
13 | CFBundleIdentifier
14 | com.yourcompany.${PRODUCT_NAME:rfc1034identifier}
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundleName
18 | ${PRODUCT_NAME}
19 | CFBundlePackageType
20 | APPL
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1.0
25 | LSRequiresIPhoneOS
26 |
27 | NSMainNibFile
28 | MainWindow
29 |
30 |
31 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/alex.mode1v3:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ActivePerspectiveName
6 | Project
7 | AllowedModules
8 |
9 |
10 | BundleLoadPath
11 |
12 | MaxInstances
13 | n
14 | Module
15 | PBXSmartGroupTreeModule
16 | Name
17 | Groups and Files Outline View
18 |
19 |
20 | BundleLoadPath
21 |
22 | MaxInstances
23 | n
24 | Module
25 | PBXNavigatorGroup
26 | Name
27 | Editor
28 |
29 |
30 | BundleLoadPath
31 |
32 | MaxInstances
33 | n
34 | Module
35 | XCTaskListModule
36 | Name
37 | Task List
38 |
39 |
40 | BundleLoadPath
41 |
42 | MaxInstances
43 | n
44 | Module
45 | XCDetailModule
46 | Name
47 | File and Smart Group Detail Viewer
48 |
49 |
50 | BundleLoadPath
51 |
52 | MaxInstances
53 | 1
54 | Module
55 | PBXBuildResultsModule
56 | Name
57 | Detailed Build Results Viewer
58 |
59 |
60 | BundleLoadPath
61 |
62 | MaxInstances
63 | 1
64 | Module
65 | PBXProjectFindModule
66 | Name
67 | Project Batch Find Tool
68 |
69 |
70 | BundleLoadPath
71 |
72 | MaxInstances
73 | n
74 | Module
75 | XCProjectFormatConflictsModule
76 | Name
77 | Project Format Conflicts List
78 |
79 |
80 | BundleLoadPath
81 |
82 | MaxInstances
83 | n
84 | Module
85 | PBXBookmarksModule
86 | Name
87 | Bookmarks Tool
88 |
89 |
90 | BundleLoadPath
91 |
92 | MaxInstances
93 | n
94 | Module
95 | PBXClassBrowserModule
96 | Name
97 | Class Browser
98 |
99 |
100 | BundleLoadPath
101 |
102 | MaxInstances
103 | n
104 | Module
105 | PBXCVSModule
106 | Name
107 | Source Code Control Tool
108 |
109 |
110 | BundleLoadPath
111 |
112 | MaxInstances
113 | n
114 | Module
115 | PBXDebugBreakpointsModule
116 | Name
117 | Debug Breakpoints Tool
118 |
119 |
120 | BundleLoadPath
121 |
122 | MaxInstances
123 | n
124 | Module
125 | XCDockableInspector
126 | Name
127 | Inspector
128 |
129 |
130 | BundleLoadPath
131 |
132 | MaxInstances
133 | n
134 | Module
135 | PBXOpenQuicklyModule
136 | Name
137 | Open Quickly Tool
138 |
139 |
140 | BundleLoadPath
141 |
142 | MaxInstances
143 | 1
144 | Module
145 | PBXDebugSessionModule
146 | Name
147 | Debugger
148 |
149 |
150 | BundleLoadPath
151 |
152 | MaxInstances
153 | 1
154 | Module
155 | PBXDebugCLIModule
156 | Name
157 | Debug Console
158 |
159 |
160 | BundleLoadPath
161 |
162 | MaxInstances
163 | n
164 | Module
165 | XCSnapshotModule
166 | Name
167 | Snapshots Tool
168 |
169 |
170 | BundlePath
171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources
172 | Description
173 | DefaultDescriptionKey
174 | DockingSystemVisible
175 |
176 | Extension
177 | mode1v3
178 | FavBarConfig
179 |
180 | PBXProjectModuleGUID
181 | FA3D99A5105EA8C50075FE34
182 | XCBarModuleItemNames
183 |
184 | XCBarModuleItems
185 |
186 |
187 | FirstTimeWindowDisplayed
188 |
189 | Identifier
190 | com.apple.perspectives.project.mode1v3
191 | MajorVersion
192 | 33
193 | MinorVersion
194 | 0
195 | Name
196 | Default
197 | Notifications
198 |
199 | OpenEditors
200 |
201 | PerspectiveWidths
202 |
203 | -1
204 | -1
205 |
206 | Perspectives
207 |
208 |
209 | ChosenToolbarItems
210 |
211 | action
212 | active-target-popup
213 | active-buildstyle-popup
214 | active-platform-popup
215 | NSToolbarFlexibleSpaceItem
216 | debugger-enable-breakpoints
217 | buildOrClean
218 | build-and-go
219 | com.apple.ide.PBXToolbarStopButton
220 | get-info
221 | toggle-editor
222 | NSToolbarFlexibleSpaceItem
223 | com.apple.pbx.toolbar.searchfield
224 |
225 | ControllerClassBaseName
226 |
227 | IconName
228 | WindowOfProjectWithEditor
229 | Identifier
230 | perspective.project
231 | IsVertical
232 |
233 | Layout
234 |
235 |
236 | ContentConfiguration
237 |
238 | PBXBottomSmartGroupGIDs
239 |
240 | 1C37FBAC04509CD000000102
241 | 1C37FAAC04509CD000000102
242 | 1C37FABC05509CD000000102
243 | 1C37FABC05539CD112110102
244 | E2644B35053B69B200211256
245 | 1C37FABC04509CD000100104
246 | 1CC0EA4004350EF90044410B
247 | 1CC0EA4004350EF90041110B
248 |
249 | PBXProjectModuleGUID
250 | 1CE0B1FE06471DED0097A5F4
251 | PBXProjectModuleLabel
252 | Files
253 | PBXProjectStructureProvided
254 | yes
255 | PBXSmartGroupTreeModuleColumnData
256 |
257 | PBXSmartGroupTreeModuleColumnWidthsKey
258 |
259 | 245
260 |
261 | PBXSmartGroupTreeModuleColumnsKey_v4
262 |
263 | MainColumn
264 |
265 |
266 | PBXSmartGroupTreeModuleOutlineStateKey_v7
267 |
268 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
269 |
270 | 29B97314FDCFA39411CA2CEA
271 | 080E96DDFE201D6D7F000001
272 | FA3D9983105EA88A0075FE34
273 | FA3D9977105EA8850075FE34
274 | 29B97317FDCFA39411CA2CEA
275 | 1C37FBAC04509CD000000102
276 | 1C37FABC05509CD000000102
277 |
278 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
279 |
280 |
281 | 13
282 | 6
283 | 1
284 | 0
285 |
286 |
287 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
288 | {{0, 0}, {245, 760}}
289 |
290 | PBXTopSmartGroupGIDs
291 |
292 | XCIncludePerspectivesSwitch
293 |
294 | XCSharingToken
295 | com.apple.Xcode.GFSharingToken
296 |
297 | GeometryConfiguration
298 |
299 | Frame
300 | {{0, 0}, {262, 778}}
301 | GroupTreeTableConfiguration
302 |
303 | MainColumn
304 | 245
305 |
306 | RubberWindowFrame
307 | 0 59 1440 819 0 0 1440 878
308 |
309 | Module
310 | PBXSmartGroupTreeModule
311 | Proportion
312 | 262pt
313 |
314 |
315 | Dock
316 |
317 |
318 | BecomeActive
319 |
320 | ContentConfiguration
321 |
322 | PBXProjectModuleGUID
323 | 1CE0B20306471E060097A5F4
324 | PBXProjectModuleLabel
325 | CMOpenALSound.m
326 | PBXSplitModuleInNavigatorKey
327 |
328 | Split0
329 |
330 | PBXProjectModuleGUID
331 | 1CE0B20406471E060097A5F4
332 | PBXProjectModuleLabel
333 | CMOpenALSound.m
334 | _historyCapacity
335 | 10
336 | bookmark
337 | FA692CE912020774009A2DE5
338 | history
339 |
340 | FADB4FC910BC4C3200BFA7F7
341 | FADB4FCA10BC4C3200BFA7F7
342 | FADB4FCB10BC4C3200BFA7F7
343 | FAFCD07A10D06B9300B54D9F
344 | FAAC1EA910D6DC8000139279
345 | FAAC1EB910D6DE0900139279
346 | FAAC1EF210D6E48D00139279
347 | FAC6C95D11FE95FE006E2F21
348 | FAC6C95E11FE95FE006E2F21
349 | FAC6C96011FE95FE006E2F21
350 |
351 |
352 | SplitCount
353 | 1
354 |
355 | StatusBarVisibility
356 |
357 |
358 | GeometryConfiguration
359 |
360 | Frame
361 | {{0, 0}, {1173, 773}}
362 | RubberWindowFrame
363 | 0 59 1440 819 0 0 1440 878
364 |
365 | Module
366 | PBXNavigatorGroup
367 | Proportion
368 | 773pt
369 |
370 |
371 | ContentConfiguration
372 |
373 | PBXProjectModuleGUID
374 | 1CE0B20506471E060097A5F4
375 | PBXProjectModuleLabel
376 | Detail
377 |
378 | GeometryConfiguration
379 |
380 | Frame
381 | {{0, 778}, {1173, 0}}
382 | RubberWindowFrame
383 | 0 59 1440 819 0 0 1440 878
384 |
385 | Module
386 | XCDetailModule
387 | Proportion
388 | 0pt
389 |
390 |
391 | Proportion
392 | 1173pt
393 |
394 |
395 | Name
396 | Project
397 | ServiceClasses
398 |
399 | XCModuleDock
400 | PBXSmartGroupTreeModule
401 | XCModuleDock
402 | PBXNavigatorGroup
403 | XCDetailModule
404 |
405 | TableOfContents
406 |
407 | FA692CE61202046F009A2DE5
408 | 1CE0B1FE06471DED0097A5F4
409 | FA692CE71202046F009A2DE5
410 | 1CE0B20306471E060097A5F4
411 | 1CE0B20506471E060097A5F4
412 |
413 | ToolbarConfigUserDefaultsMinorVersion
414 | 2
415 | ToolbarConfiguration
416 | xcode.toolbar.config.defaultV3
417 |
418 |
419 | ControllerClassBaseName
420 |
421 | IconName
422 | WindowOfProject
423 | Identifier
424 | perspective.morph
425 | IsVertical
426 | 0
427 | Layout
428 |
429 |
430 | BecomeActive
431 | 1
432 | ContentConfiguration
433 |
434 | PBXBottomSmartGroupGIDs
435 |
436 | 1C37FBAC04509CD000000102
437 | 1C37FAAC04509CD000000102
438 | 1C08E77C0454961000C914BD
439 | 1C37FABC05509CD000000102
440 | 1C37FABC05539CD112110102
441 | E2644B35053B69B200211256
442 | 1C37FABC04509CD000100104
443 | 1CC0EA4004350EF90044410B
444 | 1CC0EA4004350EF90041110B
445 |
446 | PBXProjectModuleGUID
447 | 11E0B1FE06471DED0097A5F4
448 | PBXProjectModuleLabel
449 | Files
450 | PBXProjectStructureProvided
451 | yes
452 | PBXSmartGroupTreeModuleColumnData
453 |
454 | PBXSmartGroupTreeModuleColumnWidthsKey
455 |
456 | 186
457 |
458 | PBXSmartGroupTreeModuleColumnsKey_v4
459 |
460 | MainColumn
461 |
462 |
463 | PBXSmartGroupTreeModuleOutlineStateKey_v7
464 |
465 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
466 |
467 | 29B97314FDCFA39411CA2CEA
468 | 1C37FABC05509CD000000102
469 |
470 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
471 |
472 |
473 | 0
474 |
475 |
476 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
477 | {{0, 0}, {186, 337}}
478 |
479 | PBXTopSmartGroupGIDs
480 |
481 | XCIncludePerspectivesSwitch
482 | 1
483 | XCSharingToken
484 | com.apple.Xcode.GFSharingToken
485 |
486 | GeometryConfiguration
487 |
488 | Frame
489 | {{0, 0}, {203, 355}}
490 | GroupTreeTableConfiguration
491 |
492 | MainColumn
493 | 186
494 |
495 | RubberWindowFrame
496 | 373 269 690 397 0 0 1440 878
497 |
498 | Module
499 | PBXSmartGroupTreeModule
500 | Proportion
501 | 100%
502 |
503 |
504 | Name
505 | Morph
506 | PreferredWidth
507 | 300
508 | ServiceClasses
509 |
510 | XCModuleDock
511 | PBXSmartGroupTreeModule
512 |
513 | TableOfContents
514 |
515 | 11E0B1FE06471DED0097A5F4
516 |
517 | ToolbarConfiguration
518 | xcode.toolbar.config.default.shortV3
519 |
520 |
521 | PerspectivesBarVisible
522 |
523 | ShelfIsVisible
524 |
525 | SourceDescription
526 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'
527 | StatusbarIsVisible
528 |
529 | TimeStamp
530 | 0.0
531 | ToolbarDisplayMode
532 | 1
533 | ToolbarIsVisible
534 |
535 | ToolbarSizeMode
536 | 1
537 | Type
538 | Perspectives
539 | UpdateMessage
540 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?
541 | WindowJustification
542 | 5
543 | WindowOrderList
544 |
545 | FA3D9990105EA8BF0075FE34
546 | /Users/alex/Desktop/Work/Iphone/Tests/SoundEngine/AudioSample.xcodeproj
547 |
548 | WindowString
549 | 0 59 1440 819 0 0 1440 878
550 | WindowToolsV3
551 |
552 |
553 | FirstTimeWindowDisplayed
554 |
555 | Identifier
556 | windowTool.build
557 | IsVertical
558 |
559 | Layout
560 |
561 |
562 | Dock
563 |
564 |
565 | ContentConfiguration
566 |
567 | PBXProjectModuleGUID
568 | 1CD0528F0623707200166675
569 | PBXProjectModuleLabel
570 |
571 | StatusBarVisibility
572 |
573 |
574 | GeometryConfiguration
575 |
576 | Frame
577 | {{0, 0}, {500, 218}}
578 | RubberWindowFrame
579 | 502 355 500 500 0 0 1440 878
580 |
581 | Module
582 | PBXNavigatorGroup
583 | Proportion
584 | 218pt
585 |
586 |
587 | ContentConfiguration
588 |
589 | PBXProjectModuleGUID
590 | XCMainBuildResultsModuleGUID
591 | PBXProjectModuleLabel
592 | Build Results
593 | XCBuildResultsTrigger_Collapse
594 | 1021
595 | XCBuildResultsTrigger_Open
596 | 1011
597 |
598 | GeometryConfiguration
599 |
600 | Frame
601 | {{0, 223}, {500, 236}}
602 | RubberWindowFrame
603 | 502 355 500 500 0 0 1440 878
604 |
605 | Module
606 | PBXBuildResultsModule
607 | Proportion
608 | 236pt
609 |
610 |
611 | Proportion
612 | 459pt
613 |
614 |
615 | Name
616 | Build Results
617 | ServiceClasses
618 |
619 | PBXBuildResultsModule
620 |
621 | StatusbarIsVisible
622 |
623 | TableOfContents
624 |
625 | FA3D9990105EA8BF0075FE34
626 | FA692CE81202046F009A2DE5
627 | 1CD0528F0623707200166675
628 | XCMainBuildResultsModuleGUID
629 |
630 | ToolbarConfiguration
631 | xcode.toolbar.config.buildV3
632 | WindowString
633 | 502 355 500 500 0 0 1440 878
634 | WindowToolGUID
635 | FA3D9990105EA8BF0075FE34
636 | WindowToolIsVisible
637 |
638 |
639 |
640 | FirstTimeWindowDisplayed
641 |
642 | Identifier
643 | windowTool.debugger
644 | IsVertical
645 |
646 | Layout
647 |
648 |
649 | Dock
650 |
651 |
652 | ContentConfiguration
653 |
654 | Debugger
655 |
656 | HorizontalSplitView
657 |
658 | _collapsingFrameDimension
659 | 0.0
660 | _indexOfCollapsedView
661 | 0
662 | _percentageOfCollapsedView
663 | 0.0
664 | isCollapsed
665 | yes
666 | sizes
667 |
668 | {{0, 0}, {316, 203}}
669 | {{316, 0}, {378, 203}}
670 |
671 |
672 | VerticalSplitView
673 |
674 | _collapsingFrameDimension
675 | 0.0
676 | _indexOfCollapsedView
677 | 0
678 | _percentageOfCollapsedView
679 | 0.0
680 | isCollapsed
681 | yes
682 | sizes
683 |
684 | {{0, 0}, {694, 203}}
685 | {{0, 203}, {694, 178}}
686 |
687 |
688 |
689 | LauncherConfigVersion
690 | 8
691 | PBXProjectModuleGUID
692 | 1C162984064C10D400B95A72
693 | PBXProjectModuleLabel
694 | Debug - GLUTExamples (Underwater)
695 |
696 | GeometryConfiguration
697 |
698 | DebugConsoleVisible
699 | None
700 | DebugConsoleWindowFrame
701 | {{200, 200}, {500, 300}}
702 | DebugSTDIOWindowFrame
703 | {{200, 200}, {500, 300}}
704 | Frame
705 | {{0, 0}, {694, 381}}
706 | PBXDebugSessionStackFrameViewKey
707 |
708 | DebugVariablesTableConfiguration
709 |
710 | Name
711 | 120
712 | Value
713 | 85
714 | Summary
715 | 148
716 |
717 | Frame
718 | {{316, 0}, {378, 203}}
719 | RubberWindowFrame
720 | 502 433 694 422 0 0 1440 878
721 |
722 | RubberWindowFrame
723 | 502 433 694 422 0 0 1440 878
724 |
725 | Module
726 | PBXDebugSessionModule
727 | Proportion
728 | 381pt
729 |
730 |
731 | Proportion
732 | 381pt
733 |
734 |
735 | Name
736 | Debugger
737 | ServiceClasses
738 |
739 | PBXDebugSessionModule
740 |
741 | StatusbarIsVisible
742 |
743 | TableOfContents
744 |
745 | 1CD10A99069EF8BA00B06720
746 | FA9190AE1190B9F100B678BE
747 | 1C162984064C10D400B95A72
748 | FA9190AF1190B9F100B678BE
749 | FA9190B01190B9F100B678BE
750 | FA9190B11190B9F100B678BE
751 | FA9190B21190B9F100B678BE
752 | FA9190B31190B9F100B678BE
753 |
754 | ToolbarConfiguration
755 | xcode.toolbar.config.debugV3
756 | WindowString
757 | 502 433 694 422 0 0 1440 878
758 | WindowToolGUID
759 | 1CD10A99069EF8BA00B06720
760 | WindowToolIsVisible
761 |
762 |
763 |
764 | FirstTimeWindowDisplayed
765 |
766 | Identifier
767 | windowTool.find
768 | IsVertical
769 |
770 | Layout
771 |
772 |
773 | Dock
774 |
775 |
776 | Dock
777 |
778 |
779 | BecomeActive
780 |
781 | ContentConfiguration
782 |
783 | PBXProjectModuleGUID
784 | 1CDD528C0622207200134675
785 | PBXProjectModuleLabel
786 | CMOpenALSoundManager.m
787 | StatusBarVisibility
788 |
789 |
790 | GeometryConfiguration
791 |
792 | Frame
793 | {{0, 0}, {935, 427}}
794 | RubberWindowFrame
795 | 21 170 935 685 0 0 1440 878
796 |
797 | Module
798 | PBXNavigatorGroup
799 | Proportion
800 | 935pt
801 |
802 |
803 | Proportion
804 | 427pt
805 |
806 |
807 | ContentConfiguration
808 |
809 | PBXProjectModuleGUID
810 | 1CD0528E0623707200166675
811 | PBXProjectModuleLabel
812 | Project Find
813 |
814 | GeometryConfiguration
815 |
816 | Frame
817 | {{0, 432}, {935, 212}}
818 | RubberWindowFrame
819 | 21 170 935 685 0 0 1440 878
820 |
821 | Module
822 | PBXProjectFindModule
823 | Proportion
824 | 212pt
825 |
826 |
827 | Proportion
828 | 644pt
829 |
830 |
831 | Name
832 | Project Find
833 | ServiceClasses
834 |
835 | PBXProjectFindModule
836 |
837 | StatusbarIsVisible
838 |
839 | TableOfContents
840 |
841 | 1C530D57069F1CE1000CFCEE
842 | FA4129FE114AA2AE0041FAC7
843 | FA4129FF114AA2AE0041FAC7
844 | 1CDD528C0622207200134675
845 | 1CD0528E0623707200166675
846 |
847 | WindowString
848 | 21 170 935 685 0 0 1440 878
849 | WindowToolGUID
850 | 1C530D57069F1CE1000CFCEE
851 | WindowToolIsVisible
852 |
853 |
854 |
855 | Identifier
856 | MENUSEPARATOR
857 |
858 |
859 | FirstTimeWindowDisplayed
860 |
861 | Identifier
862 | windowTool.debuggerConsole
863 | IsVertical
864 |
865 | Layout
866 |
867 |
868 | Dock
869 |
870 |
871 | BecomeActive
872 |
873 | ContentConfiguration
874 |
875 | PBXProjectModuleGUID
876 | 1C78EAAC065D492600B07095
877 | PBXProjectModuleLabel
878 | Debugger Console
879 |
880 | GeometryConfiguration
881 |
882 | Frame
883 | {{0, 0}, {650, 209}}
884 | RubberWindowFrame
885 | 372 615 650 250 0 0 1440 878
886 |
887 | Module
888 | PBXDebugCLIModule
889 | Proportion
890 | 209pt
891 |
892 |
893 | Proportion
894 | 209pt
895 |
896 |
897 | Name
898 | Debugger Console
899 | ServiceClasses
900 |
901 | PBXDebugCLIModule
902 |
903 | StatusbarIsVisible
904 |
905 | TableOfContents
906 |
907 | 1C78EAAD065D492600B07095
908 | FA9190B41190B9F100B678BE
909 | 1C78EAAC065D492600B07095
910 |
911 | ToolbarConfiguration
912 | xcode.toolbar.config.consoleV3
913 | WindowString
914 | 372 615 650 250 0 0 1440 878
915 | WindowToolGUID
916 | 1C78EAAD065D492600B07095
917 | WindowToolIsVisible
918 |
919 |
920 |
921 | Identifier
922 | windowTool.snapshots
923 | Layout
924 |
925 |
926 | Dock
927 |
928 |
929 | Module
930 | XCSnapshotModule
931 | Proportion
932 | 100%
933 |
934 |
935 | Proportion
936 | 100%
937 |
938 |
939 | Name
940 | Snapshots
941 | ServiceClasses
942 |
943 | XCSnapshotModule
944 |
945 | StatusbarIsVisible
946 | Yes
947 | ToolbarConfiguration
948 | xcode.toolbar.config.snapshots
949 | WindowString
950 | 315 824 300 550 0 0 1440 878
951 | WindowToolIsVisible
952 | Yes
953 |
954 |
955 | Identifier
956 | windowTool.scm
957 | Layout
958 |
959 |
960 | Dock
961 |
962 |
963 | ContentConfiguration
964 |
965 | PBXProjectModuleGUID
966 | 1C78EAB2065D492600B07095
967 | PBXProjectModuleLabel
968 | <No Editor>
969 | PBXSplitModuleInNavigatorKey
970 |
971 | Split0
972 |
973 | PBXProjectModuleGUID
974 | 1C78EAB3065D492600B07095
975 |
976 | SplitCount
977 | 1
978 |
979 | StatusBarVisibility
980 | 1
981 |
982 | GeometryConfiguration
983 |
984 | Frame
985 | {{0, 0}, {452, 0}}
986 | RubberWindowFrame
987 | 743 379 452 308 0 0 1280 1002
988 |
989 | Module
990 | PBXNavigatorGroup
991 | Proportion
992 | 0pt
993 |
994 |
995 | BecomeActive
996 | 1
997 | ContentConfiguration
998 |
999 | PBXProjectModuleGUID
1000 | 1CD052920623707200166675
1001 | PBXProjectModuleLabel
1002 | SCM
1003 |
1004 | GeometryConfiguration
1005 |
1006 | ConsoleFrame
1007 | {{0, 259}, {452, 0}}
1008 | Frame
1009 | {{0, 7}, {452, 259}}
1010 | RubberWindowFrame
1011 | 743 379 452 308 0 0 1280 1002
1012 | TableConfiguration
1013 |
1014 | Status
1015 | 30
1016 | FileName
1017 | 199
1018 | Path
1019 | 197.0950012207031
1020 |
1021 | TableFrame
1022 | {{0, 0}, {452, 250}}
1023 |
1024 | Module
1025 | PBXCVSModule
1026 | Proportion
1027 | 262pt
1028 |
1029 |
1030 | Proportion
1031 | 266pt
1032 |
1033 |
1034 | Name
1035 | SCM
1036 | ServiceClasses
1037 |
1038 | PBXCVSModule
1039 |
1040 | StatusbarIsVisible
1041 | 1
1042 | TableOfContents
1043 |
1044 | 1C78EAB4065D492600B07095
1045 | 1C78EAB5065D492600B07095
1046 | 1C78EAB2065D492600B07095
1047 | 1CD052920623707200166675
1048 |
1049 | ToolbarConfiguration
1050 | xcode.toolbar.config.scm
1051 | WindowString
1052 | 743 379 452 308 0 0 1280 1002
1053 |
1054 |
1055 | FirstTimeWindowDisplayed
1056 |
1057 | Identifier
1058 | windowTool.breakpoints
1059 | IsVertical
1060 |
1061 | Layout
1062 |
1063 |
1064 | Dock
1065 |
1066 |
1067 | ContentConfiguration
1068 |
1069 | PBXBottomSmartGroupGIDs
1070 |
1071 | 1C77FABC04509CD000000102
1072 |
1073 | PBXProjectModuleGUID
1074 | 1CE0B1FE06471DED0097A5F4
1075 | PBXProjectModuleLabel
1076 | Files
1077 | PBXProjectStructureProvided
1078 | no
1079 | PBXSmartGroupTreeModuleColumnData
1080 |
1081 | PBXSmartGroupTreeModuleColumnWidthsKey
1082 |
1083 | 168
1084 |
1085 | PBXSmartGroupTreeModuleColumnsKey_v4
1086 |
1087 | MainColumn
1088 |
1089 |
1090 | PBXSmartGroupTreeModuleOutlineStateKey_v7
1091 |
1092 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
1093 |
1094 | 1C77FABC04509CD000000102
1095 |
1096 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
1097 |
1098 |
1099 | 0
1100 |
1101 |
1102 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
1103 | {{0, 0}, {168, 350}}
1104 |
1105 | PBXTopSmartGroupGIDs
1106 |
1107 | XCIncludePerspectivesSwitch
1108 |
1109 |
1110 | GeometryConfiguration
1111 |
1112 | Frame
1113 | {{0, 0}, {185, 368}}
1114 | GroupTreeTableConfiguration
1115 |
1116 | MainColumn
1117 | 168
1118 |
1119 | RubberWindowFrame
1120 | 21 446 744 409 0 0 1440 878
1121 |
1122 | Module
1123 | PBXSmartGroupTreeModule
1124 | Proportion
1125 | 185pt
1126 |
1127 |
1128 | BecomeActive
1129 |
1130 | ContentConfiguration
1131 |
1132 | PBXProjectModuleGUID
1133 | 1CA1AED706398EBD00589147
1134 | PBXProjectModuleLabel
1135 | Detail
1136 |
1137 | GeometryConfiguration
1138 |
1139 | Frame
1140 | {{190, 0}, {554, 368}}
1141 | RubberWindowFrame
1142 | 21 446 744 409 0 0 1440 878
1143 |
1144 | Module
1145 | XCDetailModule
1146 | Proportion
1147 | 554pt
1148 |
1149 |
1150 | Proportion
1151 | 368pt
1152 |
1153 |
1154 | MajorVersion
1155 | 3
1156 | MinorVersion
1157 | 0
1158 | Name
1159 | Breakpoints
1160 | ServiceClasses
1161 |
1162 | PBXSmartGroupTreeModule
1163 | XCDetailModule
1164 |
1165 | StatusbarIsVisible
1166 |
1167 | TableOfContents
1168 |
1169 | FAAC1EA210D6DC6A00139279
1170 | FAAC1EA310D6DC6A00139279
1171 | 1CE0B1FE06471DED0097A5F4
1172 | 1CA1AED706398EBD00589147
1173 |
1174 | ToolbarConfiguration
1175 | xcode.toolbar.config.breakpointsV3
1176 | WindowString
1177 | 21 446 744 409 0 0 1440 878
1178 | WindowToolGUID
1179 | FAAC1EA210D6DC6A00139279
1180 | WindowToolIsVisible
1181 |
1182 |
1183 |
1184 | Identifier
1185 | windowTool.debugAnimator
1186 | Layout
1187 |
1188 |
1189 | Dock
1190 |
1191 |
1192 | Module
1193 | PBXNavigatorGroup
1194 | Proportion
1195 | 100%
1196 |
1197 |
1198 | Proportion
1199 | 100%
1200 |
1201 |
1202 | Name
1203 | Debug Visualizer
1204 | ServiceClasses
1205 |
1206 | PBXNavigatorGroup
1207 |
1208 | StatusbarIsVisible
1209 | 1
1210 | ToolbarConfiguration
1211 | xcode.toolbar.config.debugAnimatorV3
1212 | WindowString
1213 | 100 100 700 500 0 0 1280 1002
1214 |
1215 |
1216 | Identifier
1217 | windowTool.bookmarks
1218 | Layout
1219 |
1220 |
1221 | Dock
1222 |
1223 |
1224 | Module
1225 | PBXBookmarksModule
1226 | Proportion
1227 | 100%
1228 |
1229 |
1230 | Proportion
1231 | 100%
1232 |
1233 |
1234 | Name
1235 | Bookmarks
1236 | ServiceClasses
1237 |
1238 | PBXBookmarksModule
1239 |
1240 | StatusbarIsVisible
1241 | 0
1242 | WindowString
1243 | 538 42 401 187 0 0 1280 1002
1244 |
1245 |
1246 | Identifier
1247 | windowTool.projectFormatConflicts
1248 | Layout
1249 |
1250 |
1251 | Dock
1252 |
1253 |
1254 | Module
1255 | XCProjectFormatConflictsModule
1256 | Proportion
1257 | 100%
1258 |
1259 |
1260 | Proportion
1261 | 100%
1262 |
1263 |
1264 | Name
1265 | Project Format Conflicts
1266 | ServiceClasses
1267 |
1268 | XCProjectFormatConflictsModule
1269 |
1270 | StatusbarIsVisible
1271 | 0
1272 | WindowContentMinSize
1273 | 450 300
1274 | WindowString
1275 | 50 850 472 307 0 0 1440 877
1276 |
1277 |
1278 | Identifier
1279 | windowTool.classBrowser
1280 | Layout
1281 |
1282 |
1283 | Dock
1284 |
1285 |
1286 | BecomeActive
1287 | 1
1288 | ContentConfiguration
1289 |
1290 | OptionsSetName
1291 | Hierarchy, all classes
1292 | PBXProjectModuleGUID
1293 | 1CA6456E063B45B4001379D8
1294 | PBXProjectModuleLabel
1295 | Class Browser - NSObject
1296 |
1297 | GeometryConfiguration
1298 |
1299 | ClassesFrame
1300 | {{0, 0}, {374, 96}}
1301 | ClassesTreeTableConfiguration
1302 |
1303 | PBXClassNameColumnIdentifier
1304 | 208
1305 | PBXClassBookColumnIdentifier
1306 | 22
1307 |
1308 | Frame
1309 | {{0, 0}, {630, 331}}
1310 | MembersFrame
1311 | {{0, 105}, {374, 395}}
1312 | MembersTreeTableConfiguration
1313 |
1314 | PBXMemberTypeIconColumnIdentifier
1315 | 22
1316 | PBXMemberNameColumnIdentifier
1317 | 216
1318 | PBXMemberTypeColumnIdentifier
1319 | 97
1320 | PBXMemberBookColumnIdentifier
1321 | 22
1322 |
1323 | PBXModuleWindowStatusBarHidden2
1324 | 1
1325 | RubberWindowFrame
1326 | 385 179 630 352 0 0 1440 878
1327 |
1328 | Module
1329 | PBXClassBrowserModule
1330 | Proportion
1331 | 332pt
1332 |
1333 |
1334 | Proportion
1335 | 332pt
1336 |
1337 |
1338 | Name
1339 | Class Browser
1340 | ServiceClasses
1341 |
1342 | PBXClassBrowserModule
1343 |
1344 | StatusbarIsVisible
1345 | 0
1346 | TableOfContents
1347 |
1348 | 1C0AD2AF069F1E9B00FABCE6
1349 | 1C0AD2B0069F1E9B00FABCE6
1350 | 1CA6456E063B45B4001379D8
1351 |
1352 | ToolbarConfiguration
1353 | xcode.toolbar.config.classbrowser
1354 | WindowString
1355 | 385 179 630 352 0 0 1440 878
1356 | WindowToolGUID
1357 | 1C0AD2AF069F1E9B00FABCE6
1358 | WindowToolIsVisible
1359 | 0
1360 |
1361 |
1362 | Identifier
1363 | windowTool.refactoring
1364 | IncludeInToolsMenu
1365 | 0
1366 | Layout
1367 |
1368 |
1369 | Dock
1370 |
1371 |
1372 | BecomeActive
1373 | 1
1374 | GeometryConfiguration
1375 |
1376 | Frame
1377 | {0, 0}, {500, 335}
1378 | RubberWindowFrame
1379 | {0, 0}, {500, 335}
1380 |
1381 | Module
1382 | XCRefactoringModule
1383 | Proportion
1384 | 100%
1385 |
1386 |
1387 | Proportion
1388 | 100%
1389 |
1390 |
1391 | Name
1392 | Refactoring
1393 | ServiceClasses
1394 |
1395 | XCRefactoringModule
1396 |
1397 | WindowString
1398 | 200 200 500 356 0 0 1920 1200
1399 |
1400 |
1401 |
1402 |
1403 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/alex.pbxuser:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | 1D3623240D0F684500981E51 /* AudioSampleAppDelegate.h */ = {
4 | uiCtxt = {
5 | sepNavIntBoundsRect = "{{0, 0}, {1112, 741}}";
6 | sepNavSelRange = "{0, 0}";
7 | sepNavVisRange = "{0, 448}";
8 | };
9 | };
10 | 1D3623250D0F684500981E51 /* AudioSampleAppDelegate.m */ = {
11 | uiCtxt = {
12 | sepNavIntBoundsRect = "{{0, 0}, {1112, 693}}";
13 | sepNavSelRange = "{0, 0}";
14 | sepNavVisRange = "{0, 832}";
15 | };
16 | };
17 | 1D6058900D05DD3D006BFB54 /* AudioSample */ = {
18 | activeExec = 0;
19 | executables = (
20 | FA3D9974105EA87A0075FE34 /* AudioSample */,
21 | );
22 | };
23 | 28C286DF0D94DF7D0034E888 /* RootViewController.h */ = {
24 | uiCtxt = {
25 | sepNavIntBoundsRect = "{{0, 0}, {1112, 741}}";
26 | sepNavSelRange = "{270, 0}";
27 | sepNavVisRange = "{0, 270}";
28 | };
29 | };
30 | 28C286E00D94DF7D0034E888 /* RootViewController.m */ = {
31 | uiCtxt = {
32 | sepNavIntBoundsRect = "{{0, 0}, {1112, 2171}}";
33 | sepNavSelRange = "{4575, 0}";
34 | sepNavVisRange = "{3638, 1049}";
35 | };
36 | };
37 | 29B97313FDCFA39411CA2CEA /* Project object */ = {
38 | activeBuildConfigurationName = Debug;
39 | activeExecutable = FA3D9974105EA87A0075FE34 /* AudioSample */;
40 | activeSDKPreference = iphonesimulator3.1.2;
41 | activeTarget = 1D6058900D05DD3D006BFB54 /* AudioSample */;
42 | addToTargets = (
43 | 1D6058900D05DD3D006BFB54 /* AudioSample */,
44 | );
45 | breakpoints = (
46 | FAAC1EBD10D6DEE100139279 /* CMOpenALSoundManager.m:220 */,
47 | );
48 | codeSenseManager = FA3D9982105EA8850075FE34 /* Code sense */;
49 | executables = (
50 | FA3D9974105EA87A0075FE34 /* AudioSample */,
51 | );
52 | perUserDictionary = {
53 | "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
54 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
55 | PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
56 | PBXFileTableDataSourceColumnWidthsKey = (
57 | 20,
58 | 20,
59 | 198,
60 | 20,
61 | 99,
62 | 99,
63 | 29,
64 | 20,
65 | );
66 | PBXFileTableDataSourceColumnsKey = (
67 | PBXBreakpointsDataSource_ActionID,
68 | PBXBreakpointsDataSource_TypeID,
69 | PBXBreakpointsDataSource_BreakpointID,
70 | PBXBreakpointsDataSource_UseID,
71 | PBXBreakpointsDataSource_LocationID,
72 | PBXBreakpointsDataSource_ConditionID,
73 | PBXBreakpointsDataSource_IgnoreCountID,
74 | PBXBreakpointsDataSource_ContinueID,
75 | );
76 | };
77 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
78 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
79 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
80 | PBXFileTableDataSourceColumnWidthsKey = (
81 | 20,
82 | 934,
83 | 20,
84 | 48,
85 | 43,
86 | 43,
87 | 20,
88 | );
89 | PBXFileTableDataSourceColumnsKey = (
90 | PBXFileDataSource_FiletypeID,
91 | PBXFileDataSource_Filename_ColumnID,
92 | PBXFileDataSource_Built_ColumnID,
93 | PBXFileDataSource_ObjectSize_ColumnID,
94 | PBXFileDataSource_Errors_ColumnID,
95 | PBXFileDataSource_Warnings_ColumnID,
96 | PBXFileDataSource_Target_ColumnID,
97 | );
98 | };
99 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
100 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
101 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
102 | PBXFileTableDataSourceColumnWidthsKey = (
103 | 20,
104 | 894,
105 | 60,
106 | 20,
107 | 48,
108 | 43,
109 | 43,
110 | );
111 | PBXFileTableDataSourceColumnsKey = (
112 | PBXFileDataSource_FiletypeID,
113 | PBXFileDataSource_Filename_ColumnID,
114 | PBXTargetDataSource_PrimaryAttribute,
115 | PBXFileDataSource_Built_ColumnID,
116 | PBXFileDataSource_ObjectSize_ColumnID,
117 | PBXFileDataSource_Errors_ColumnID,
118 | PBXFileDataSource_Warnings_ColumnID,
119 | );
120 | };
121 | PBXPerProjectTemplateStateSaveDate = 302122068;
122 | PBXWorkspaceStateSaveDate = 302122068;
123 | };
124 | perUserProjectItems = {
125 | FA692CE912020774009A2DE5 /* PBXTextBookmark */ = FA692CE912020774009A2DE5 /* PBXTextBookmark */;
126 | FAAC1EA910D6DC8000139279 /* PBXTextBookmark */ = FAAC1EA910D6DC8000139279 /* PBXTextBookmark */;
127 | FAAC1EB910D6DE0900139279 /* PBXTextBookmark */ = FAAC1EB910D6DE0900139279 /* PBXTextBookmark */;
128 | FAAC1EF210D6E48D00139279 /* PBXTextBookmark */ = FAAC1EF210D6E48D00139279 /* PBXTextBookmark */;
129 | FAC6C95D11FE95FE006E2F21 /* PBXTextBookmark */ = FAC6C95D11FE95FE006E2F21 /* PBXTextBookmark */;
130 | FAC6C95E11FE95FE006E2F21 /* PBXTextBookmark */ = FAC6C95E11FE95FE006E2F21 /* PBXTextBookmark */;
131 | FAC6C96011FE95FE006E2F21 /* PBXTextBookmark */ = FAC6C96011FE95FE006E2F21 /* PBXTextBookmark */;
132 | FADB4FC910BC4C3200BFA7F7 /* PBXTextBookmark */ = FADB4FC910BC4C3200BFA7F7 /* PBXTextBookmark */;
133 | FADB4FCA10BC4C3200BFA7F7 /* PBXTextBookmark */ = FADB4FCA10BC4C3200BFA7F7 /* PBXTextBookmark */;
134 | FADB4FCB10BC4C3200BFA7F7 /* PBXTextBookmark */ = FADB4FCB10BC4C3200BFA7F7 /* PBXTextBookmark */;
135 | FAFCD07A10D06B9300B54D9F /* PBXTextBookmark */ = FAFCD07A10D06B9300B54D9F /* PBXTextBookmark */;
136 | };
137 | sourceControlManager = FA3D9981105EA8850075FE34 /* Source Control */;
138 | userBuildSettings = {
139 | };
140 | };
141 | FA3D9974105EA87A0075FE34 /* AudioSample */ = {
142 | isa = PBXExecutable;
143 | activeArgIndices = (
144 | );
145 | argumentStrings = (
146 | );
147 | autoAttachOnCrash = 1;
148 | breakpointsEnabled = 0;
149 | configStateDict = {
150 | };
151 | customDataFormattersEnabled = 1;
152 | dataTipCustomDataFormattersEnabled = 1;
153 | dataTipShowTypeColumn = 1;
154 | dataTipSortType = 0;
155 | debuggerPlugin = GDBDebugging;
156 | disassemblyDisplayState = 0;
157 | dylibVariantSuffix = "";
158 | enableDebugStr = 1;
159 | environmentEntries = (
160 | );
161 | executableSystemSymbolLevel = 0;
162 | executableUserSymbolLevel = 0;
163 | libgmallocEnabled = 0;
164 | name = AudioSample;
165 | savedGlobals = {
166 | };
167 | showTypeColumn = 0;
168 | sourceDirectories = (
169 | );
170 | variableFormatDictionary = {
171 | };
172 | };
173 | FA3D9978105EA8850075FE34 /* AppleOpenALSupport.h */ = {
174 | uiCtxt = {
175 | sepNavIntBoundsRect = "{{0, 0}, {1112, 806}}";
176 | sepNavSelRange = "{0, 0}";
177 | sepNavVisRange = "{0, 2839}";
178 | };
179 | };
180 | FA3D9979105EA8850075FE34 /* AppleOpenALSupport.c */ = {
181 | uiCtxt = {
182 | sepNavIntBoundsRect = "{{0, 0}, {1112, 2054}}";
183 | sepNavSelRange = "{2458, 105}";
184 | sepNavVisRange = "{1108, 2342}";
185 | };
186 | };
187 | FA3D997A105EA8850075FE34 /* CMOpenALSound.h */ = {
188 | uiCtxt = {
189 | sepNavIntBoundsRect = "{{0, 0}, {1112, 741}}";
190 | sepNavSelRange = "{288, 629}";
191 | sepNavVisRange = "{0, 1904}";
192 | };
193 | };
194 | FA3D997B105EA8850075FE34 /* CMOpenALSound.m */ = {
195 | uiCtxt = {
196 | sepNavIntBoundsRect = "{{0, 0}, {1112, 3588}}";
197 | sepNavSelRange = "{5309, 12}";
198 | sepNavVisRange = "{5333, 1136}";
199 | };
200 | };
201 | FA3D997C105EA8850075FE34 /* CMOpenALSoundManager.h */ = {
202 | uiCtxt = {
203 | sepNavIntBoundsRect = "{{0, 0}, {1112, 975}}";
204 | sepNavSelRange = "{1686, 0}";
205 | sepNavVisRange = "{761, 2006}";
206 | };
207 | };
208 | FA3D997D105EA8850075FE34 /* CMOpenALSoundManager.m */ = {
209 | uiCtxt = {
210 | sepNavIntBoundsRect = "{{0, 0}, {1112, 5252}}";
211 | sepNavSelRange = "{8869, 4}";
212 | sepNavVisRange = "{8097, 1350}";
213 | };
214 | };
215 | FA3D9981105EA8850075FE34 /* Source Control */ = {
216 | isa = PBXSourceControlManager;
217 | fallbackIsa = XCSourceControlManager;
218 | isSCMEnabled = 0;
219 | scmConfiguration = {
220 | repositoryNamesForRoots = {
221 | "" = "";
222 | };
223 | };
224 | };
225 | FA3D9982105EA8850075FE34 /* Code sense */ = {
226 | isa = PBXCodeSenseManager;
227 | indexTemplatePath = "";
228 | };
229 | FA3D9984105EA88A0075FE34 /* DebugOutput.h */ = {
230 | uiCtxt = {
231 | sepNavIntBoundsRect = "{{0, 0}, {1112, 741}}";
232 | sepNavSelRange = "{427, 0}";
233 | sepNavVisRange = "{0, 809}";
234 | };
235 | };
236 | FA3D9985105EA88A0075FE34 /* DebugOutput.m */ = {
237 | uiCtxt = {
238 | sepNavIntBoundsRect = "{{0, 0}, {1112, 1352}}";
239 | sepNavSelRange = "{886, 0}";
240 | sepNavVisRange = "{410, 1112}";
241 | };
242 | };
243 | FA3D998E105EA8A50075FE34 /* SynthesizeSingleton.h */ = {
244 | uiCtxt = {
245 | sepNavIntBoundsRect = "{{0, 0}, {1112, 897}}";
246 | sepNavSelRange = "{0, 0}";
247 | sepNavVisRange = "{0, 1205}";
248 | };
249 | };
250 | FA692CE912020774009A2DE5 /* PBXTextBookmark */ = {
251 | isa = PBXTextBookmark;
252 | fRef = FA3D997B105EA8850075FE34 /* CMOpenALSound.m */;
253 | name = "CMOpenALSound.m: 186";
254 | rLen = 12;
255 | rLoc = 5309;
256 | rType = 0;
257 | vrLen = 1136;
258 | vrLoc = 5333;
259 | };
260 | FA74238210A87F4300342F0E /* License */ = {
261 | uiCtxt = {
262 | sepNavIntBoundsRect = "{{0, 0}, {1112, 741}}";
263 | sepNavSelRange = "{738, 0}";
264 | sepNavVisRange = "{0, 738}";
265 | };
266 | };
267 | FAAC1EA910D6DC8000139279 /* PBXTextBookmark */ = {
268 | isa = PBXTextBookmark;
269 | fRef = FA3D9985105EA88A0075FE34 /* DebugOutput.m */;
270 | name = "DebugOutput.m: 34";
271 | rLen = 0;
272 | rLoc = 886;
273 | rType = 0;
274 | vrLen = 1112;
275 | vrLoc = 410;
276 | };
277 | FAAC1EB910D6DE0900139279 /* PBXTextBookmark */ = {
278 | isa = PBXTextBookmark;
279 | fRef = 1D3623250D0F684500981E51 /* AudioSampleAppDelegate.m */;
280 | name = "AudioSampleAppDelegate.m: 1";
281 | rLen = 0;
282 | rLoc = 0;
283 | rType = 0;
284 | vrLen = 832;
285 | vrLoc = 0;
286 | };
287 | FAAC1EBD10D6DEE100139279 /* CMOpenALSoundManager.m:220 */ = {
288 | isa = PBXFileBreakpoint;
289 | actions = (
290 | );
291 | breakpointStyle = 0;
292 | continueAfterActions = 0;
293 | countType = 0;
294 | delayBeforeContinue = 0;
295 | fileReference = FA3D997D105EA8850075FE34 /* CMOpenALSoundManager.m */;
296 | functionName = "-purgeSounds";
297 | hitCount = 1;
298 | ignoreCount = 0;
299 | lineNumber = 220;
300 | modificationTime = 290103980.092953;
301 | originalNumberOfMultipleMatches = 1;
302 | state = 1;
303 | };
304 | FAAC1EF210D6E48D00139279 /* PBXTextBookmark */ = {
305 | isa = PBXTextBookmark;
306 | fRef = 28C286E00D94DF7D0034E888 /* RootViewController.m */;
307 | name = "RootViewController.m: 154";
308 | rLen = 0;
309 | rLoc = 4575;
310 | rType = 0;
311 | vrLen = 1049;
312 | vrLoc = 3638;
313 | };
314 | FAC6C95D11FE95FE006E2F21 /* PBXTextBookmark */ = {
315 | isa = PBXTextBookmark;
316 | fRef = FA3D997C105EA8850075FE34 /* CMOpenALSoundManager.h */;
317 | name = "CMOpenALSoundManager.h: 45";
318 | rLen = 0;
319 | rLoc = 1686;
320 | rType = 0;
321 | vrLen = 2006;
322 | vrLoc = 761;
323 | };
324 | FAC6C95E11FE95FE006E2F21 /* PBXTextBookmark */ = {
325 | isa = PBXTextBookmark;
326 | fRef = FA3D997D105EA8850075FE34 /* CMOpenALSoundManager.m */;
327 | name = "CMOpenALSoundManager.m: 332";
328 | rLen = 4;
329 | rLoc = 8869;
330 | rType = 0;
331 | vrLen = 1350;
332 | vrLoc = 8097;
333 | };
334 | FAC6C96011FE95FE006E2F21 /* PBXTextBookmark */ = {
335 | isa = PBXTextBookmark;
336 | fRef = FA3D997B105EA8850075FE34 /* CMOpenALSound.m */;
337 | name = "CMOpenALSound.m: 162";
338 | rLen = 14;
339 | rLoc = 4571;
340 | rType = 0;
341 | vrLen = 1486;
342 | vrLoc = 4007;
343 | };
344 | FADB4FC910BC4C3200BFA7F7 /* PBXTextBookmark */ = {
345 | isa = PBXTextBookmark;
346 | fRef = FA3D9978105EA8850075FE34 /* AppleOpenALSupport.h */;
347 | name = "AppleOpenALSupport.h: 1";
348 | rLen = 0;
349 | rLoc = 0;
350 | rType = 0;
351 | vrLen = 2839;
352 | vrLoc = 0;
353 | };
354 | FADB4FCA10BC4C3200BFA7F7 /* PBXTextBookmark */ = {
355 | isa = PBXTextBookmark;
356 | fRef = FA3D9979105EA8850075FE34 /* AppleOpenALSupport.c */;
357 | name = "AppleOpenALSupport.c: 52";
358 | rLen = 105;
359 | rLoc = 2458;
360 | rType = 0;
361 | vrLen = 2342;
362 | vrLoc = 1108;
363 | };
364 | FADB4FCB10BC4C3200BFA7F7 /* PBXTextBookmark */ = {
365 | isa = PBXTextBookmark;
366 | fRef = 28C286DF0D94DF7D0034E888 /* RootViewController.h */;
367 | name = "RootViewController.h: 15";
368 | rLen = 0;
369 | rLoc = 270;
370 | rType = 0;
371 | vrLen = 270;
372 | vrLoc = 0;
373 | };
374 | FAFCD07A10D06B9300B54D9F /* PBXTextBookmark */ = {
375 | isa = PBXTextBookmark;
376 | fRef = FA3D997A105EA8850075FE34 /* CMOpenALSound.h */;
377 | name = "CMOpenALSound.h: 10";
378 | rLen = 629;
379 | rLoc = 288;
380 | rType = 0;
381 | vrLen = 1904;
382 | vrLoc = 0;
383 | };
384 | }
385 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1D3623260D0F684500981E51 /* AudioSampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* AudioSampleAppDelegate.m */; };
11 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
12 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
13 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
14 | 2892E4100DC94CBA00A64D0F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */; };
15 | 28AD73600D9D9599002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD735F0D9D9599002E5188 /* MainWindow.xib */; };
16 | 28C286E10D94DF7D0034E888 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28C286E00D94DF7D0034E888 /* RootViewController.m */; };
17 | 28F335F11007B36200424DE2 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28F335F01007B36200424DE2 /* RootViewController.xib */; };
18 | FA3D997E105EA8850075FE34 /* AppleOpenALSupport.c in Sources */ = {isa = PBXBuildFile; fileRef = FA3D9979105EA8850075FE34 /* AppleOpenALSupport.c */; };
19 | FA3D997F105EA8850075FE34 /* CMOpenALSound.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3D997B105EA8850075FE34 /* CMOpenALSound.m */; };
20 | FA3D9980105EA8850075FE34 /* CMOpenALSoundManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3D997D105EA8850075FE34 /* CMOpenALSoundManager.m */; };
21 | FA3D9986105EA88A0075FE34 /* DebugOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3D9985105EA88A0075FE34 /* DebugOutput.m */; };
22 | FA3D9988105EA8920075FE34 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA3D9987105EA8920075FE34 /* OpenAL.framework */; };
23 | FA3D998A105EA8970075FE34 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA3D9989105EA8970075FE34 /* AudioToolbox.framework */; };
24 | FA3D998C105EA89A0075FE34 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA3D998B105EA89A0075FE34 /* AVFoundation.framework */; };
25 | FA3D99AE105EAC4E0075FE34 /* Start.caf in Resources */ = {isa = PBXBuildFile; fileRef = FA3D99AC105EAC4E0075FE34 /* Start.caf */; };
26 | FA3D99AF105EAC4E0075FE34 /* backgroundLoop.m4a in Resources */ = {isa = PBXBuildFile; fileRef = FA3D99AD105EAC4E0075FE34 /* backgroundLoop.m4a */; };
27 | FA3D99B9105EAC920075FE34 /* volumedown.png in Resources */ = {isa = PBXBuildFile; fileRef = FA3D99B7105EAC920075FE34 /* volumedown.png */; };
28 | FA3D99BA105EAC920075FE34 /* volumeup.png in Resources */ = {isa = PBXBuildFile; fileRef = FA3D99B8105EAC920075FE34 /* volumeup.png */; };
29 | FA4A19C0152D3EE300FDB704 /* engine.caf in Resources */ = {isa = PBXBuildFile; fileRef = FA4A19BF152D3EE300FDB704 /* engine.caf */; };
30 | /* End PBXBuildFile section */
31 |
32 | /* Begin PBXFileReference section */
33 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
34 | 1D3623240D0F684500981E51 /* AudioSampleAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioSampleAppDelegate.h; sourceTree = ""; };
35 | 1D3623250D0F684500981E51 /* AudioSampleAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioSampleAppDelegate.m; sourceTree = ""; };
36 | 1D6058910D05DD3D006BFB54 /* AudioSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
37 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
38 | 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
39 | 28A0AAE50D9B0CCF005BE974 /* AudioSample_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioSample_Prefix.pch; sourceTree = ""; };
40 | 28AD735F0D9D9599002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; };
41 | 28C286DF0D94DF7D0034E888 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = ""; };
42 | 28C286E00D94DF7D0034E888 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = ""; };
43 | 28F335F01007B36200424DE2 /* RootViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RootViewController.xib; sourceTree = ""; };
44 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
45 | 8D1107310486CEB800E47090 /* AudioSample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AudioSample-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; };
46 | FA3D9978105EA8850075FE34 /* AppleOpenALSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppleOpenALSupport.h; sourceTree = ""; };
47 | FA3D9979105EA8850075FE34 /* AppleOpenALSupport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = AppleOpenALSupport.c; sourceTree = ""; };
48 | FA3D997A105EA8850075FE34 /* CMOpenALSound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CMOpenALSound.h; sourceTree = ""; };
49 | FA3D997B105EA8850075FE34 /* CMOpenALSound.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CMOpenALSound.m; sourceTree = ""; };
50 | FA3D997C105EA8850075FE34 /* CMOpenALSoundManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CMOpenALSoundManager.h; sourceTree = ""; };
51 | FA3D997D105EA8850075FE34 /* CMOpenALSoundManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CMOpenALSoundManager.m; sourceTree = ""; };
52 | FA3D9984105EA88A0075FE34 /* DebugOutput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugOutput.h; sourceTree = ""; };
53 | FA3D9985105EA88A0075FE34 /* DebugOutput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugOutput.m; sourceTree = ""; };
54 | FA3D9987105EA8920075FE34 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
55 | FA3D9989105EA8970075FE34 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
56 | FA3D998B105EA89A0075FE34 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
57 | FA3D998E105EA8A50075FE34 /* SynthesizeSingleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SynthesizeSingleton.h; sourceTree = ""; };
58 | FA3D99AC105EAC4E0075FE34 /* Start.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Start.caf; sourceTree = ""; };
59 | FA3D99AD105EAC4E0075FE34 /* backgroundLoop.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = backgroundLoop.m4a; sourceTree = ""; };
60 | FA3D99B7105EAC920075FE34 /* volumedown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volumedown.png; sourceTree = ""; };
61 | FA3D99B8105EAC920075FE34 /* volumeup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volumeup.png; sourceTree = ""; };
62 | FA4A19BF152D3EE300FDB704 /* engine.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = engine.caf; sourceTree = ""; };
63 | FA4CE6D515F2E2E900544934 /* Readme.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.markdown; sourceTree = SOURCE_ROOT; };
64 | FA74238210A87F4300342F0E /* License */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = License; path = ../License; sourceTree = ""; };
65 | /* End PBXFileReference section */
66 |
67 | /* Begin PBXFrameworksBuildPhase section */
68 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
69 | isa = PBXFrameworksBuildPhase;
70 | buildActionMask = 2147483647;
71 | files = (
72 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
73 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
74 | 2892E4100DC94CBA00A64D0F /* CoreGraphics.framework in Frameworks */,
75 | FA3D9988105EA8920075FE34 /* OpenAL.framework in Frameworks */,
76 | FA3D998A105EA8970075FE34 /* AudioToolbox.framework in Frameworks */,
77 | FA3D998C105EA89A0075FE34 /* AVFoundation.framework in Frameworks */,
78 | );
79 | runOnlyForDeploymentPostprocessing = 0;
80 | };
81 | /* End PBXFrameworksBuildPhase section */
82 |
83 | /* Begin PBXGroup section */
84 | 080E96DDFE201D6D7F000001 /* Classes */ = {
85 | isa = PBXGroup;
86 | children = (
87 | FA4CE6D515F2E2E900544934 /* Readme.markdown */,
88 | FA74238210A87F4300342F0E /* License */,
89 | FA3D9983105EA88A0075FE34 /* Debug */,
90 | FA3D9977105EA8850075FE34 /* SoundEngine */,
91 | 28C286DF0D94DF7D0034E888 /* RootViewController.h */,
92 | 28C286E00D94DF7D0034E888 /* RootViewController.m */,
93 | 1D3623240D0F684500981E51 /* AudioSampleAppDelegate.h */,
94 | 1D3623250D0F684500981E51 /* AudioSampleAppDelegate.m */,
95 | );
96 | path = Classes;
97 | sourceTree = "";
98 | };
99 | 19C28FACFE9D520D11CA2CBB /* Products */ = {
100 | isa = PBXGroup;
101 | children = (
102 | 1D6058910D05DD3D006BFB54 /* AudioSample.app */,
103 | );
104 | name = Products;
105 | sourceTree = "";
106 | };
107 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
108 | isa = PBXGroup;
109 | children = (
110 | 080E96DDFE201D6D7F000001 /* Classes */,
111 | 29B97315FDCFA39411CA2CEA /* Other Sources */,
112 | 29B97317FDCFA39411CA2CEA /* Resources */,
113 | 29B97323FDCFA39411CA2CEA /* Frameworks */,
114 | 19C28FACFE9D520D11CA2CBB /* Products */,
115 | );
116 | name = CustomTemplate;
117 | sourceTree = "";
118 | };
119 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
120 | isa = PBXGroup;
121 | children = (
122 | 28A0AAE50D9B0CCF005BE974 /* AudioSample_Prefix.pch */,
123 | 29B97316FDCFA39411CA2CEA /* main.m */,
124 | );
125 | name = "Other Sources";
126 | sourceTree = "";
127 | };
128 | 29B97317FDCFA39411CA2CEA /* Resources */ = {
129 | isa = PBXGroup;
130 | children = (
131 | FA3D99B7105EAC920075FE34 /* volumedown.png */,
132 | FA3D99B8105EAC920075FE34 /* volumeup.png */,
133 | FA3D99AC105EAC4E0075FE34 /* Start.caf */,
134 | FA4A19BF152D3EE300FDB704 /* engine.caf */,
135 | FA3D99AD105EAC4E0075FE34 /* backgroundLoop.m4a */,
136 | 28F335F01007B36200424DE2 /* RootViewController.xib */,
137 | 28AD735F0D9D9599002E5188 /* MainWindow.xib */,
138 | 8D1107310486CEB800E47090 /* AudioSample-Info.plist */,
139 | );
140 | name = Resources;
141 | sourceTree = "";
142 | };
143 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
144 | isa = PBXGroup;
145 | children = (
146 | FA3D998B105EA89A0075FE34 /* AVFoundation.framework */,
147 | FA3D9989105EA8970075FE34 /* AudioToolbox.framework */,
148 | FA3D9987105EA8920075FE34 /* OpenAL.framework */,
149 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
150 | 1D30AB110D05D00D00671497 /* Foundation.framework */,
151 | 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */,
152 | );
153 | name = Frameworks;
154 | sourceTree = "";
155 | };
156 | FA3D9977105EA8850075FE34 /* SoundEngine */ = {
157 | isa = PBXGroup;
158 | children = (
159 | FA3D998E105EA8A50075FE34 /* SynthesizeSingleton.h */,
160 | FA3D9978105EA8850075FE34 /* AppleOpenALSupport.h */,
161 | FA3D9979105EA8850075FE34 /* AppleOpenALSupport.c */,
162 | FA3D997A105EA8850075FE34 /* CMOpenALSound.h */,
163 | FA3D997B105EA8850075FE34 /* CMOpenALSound.m */,
164 | FA3D997C105EA8850075FE34 /* CMOpenALSoundManager.h */,
165 | FA3D997D105EA8850075FE34 /* CMOpenALSoundManager.m */,
166 | );
167 | name = SoundEngine;
168 | sourceTree = "";
169 | };
170 | FA3D9983105EA88A0075FE34 /* Debug */ = {
171 | isa = PBXGroup;
172 | children = (
173 | FA3D9984105EA88A0075FE34 /* DebugOutput.h */,
174 | FA3D9985105EA88A0075FE34 /* DebugOutput.m */,
175 | );
176 | name = Debug;
177 | sourceTree = "";
178 | };
179 | /* End PBXGroup section */
180 |
181 | /* Begin PBXNativeTarget section */
182 | 1D6058900D05DD3D006BFB54 /* AudioSample */ = {
183 | isa = PBXNativeTarget;
184 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "AudioSample" */;
185 | buildPhases = (
186 | 1D60588D0D05DD3D006BFB54 /* Resources */,
187 | 1D60588E0D05DD3D006BFB54 /* Sources */,
188 | 1D60588F0D05DD3D006BFB54 /* Frameworks */,
189 | );
190 | buildRules = (
191 | );
192 | dependencies = (
193 | );
194 | name = AudioSample;
195 | productName = AudioSample;
196 | productReference = 1D6058910D05DD3D006BFB54 /* AudioSample.app */;
197 | productType = "com.apple.product-type.application";
198 | };
199 | /* End PBXNativeTarget section */
200 |
201 | /* Begin PBXProject section */
202 | 29B97313FDCFA39411CA2CEA /* Project object */ = {
203 | isa = PBXProject;
204 | attributes = {
205 | LastUpgradeCheck = 0440;
206 | };
207 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "AudioSample" */;
208 | compatibilityVersion = "Xcode 3.2";
209 | developmentRegion = English;
210 | hasScannedForEncodings = 1;
211 | knownRegions = (
212 | English,
213 | Japanese,
214 | French,
215 | German,
216 | en,
217 | );
218 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
219 | projectDirPath = "";
220 | projectRoot = "";
221 | targets = (
222 | 1D6058900D05DD3D006BFB54 /* AudioSample */,
223 | );
224 | };
225 | /* End PBXProject section */
226 |
227 | /* Begin PBXResourcesBuildPhase section */
228 | 1D60588D0D05DD3D006BFB54 /* Resources */ = {
229 | isa = PBXResourcesBuildPhase;
230 | buildActionMask = 2147483647;
231 | files = (
232 | 28AD73600D9D9599002E5188 /* MainWindow.xib in Resources */,
233 | 28F335F11007B36200424DE2 /* RootViewController.xib in Resources */,
234 | FA3D99AE105EAC4E0075FE34 /* Start.caf in Resources */,
235 | FA3D99AF105EAC4E0075FE34 /* backgroundLoop.m4a in Resources */,
236 | FA3D99B9105EAC920075FE34 /* volumedown.png in Resources */,
237 | FA3D99BA105EAC920075FE34 /* volumeup.png in Resources */,
238 | FA4A19C0152D3EE300FDB704 /* engine.caf in Resources */,
239 | );
240 | runOnlyForDeploymentPostprocessing = 0;
241 | };
242 | /* End PBXResourcesBuildPhase section */
243 |
244 | /* Begin PBXSourcesBuildPhase section */
245 | 1D60588E0D05DD3D006BFB54 /* Sources */ = {
246 | isa = PBXSourcesBuildPhase;
247 | buildActionMask = 2147483647;
248 | files = (
249 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */,
250 | 1D3623260D0F684500981E51 /* AudioSampleAppDelegate.m in Sources */,
251 | 28C286E10D94DF7D0034E888 /* RootViewController.m in Sources */,
252 | FA3D997E105EA8850075FE34 /* AppleOpenALSupport.c in Sources */,
253 | FA3D997F105EA8850075FE34 /* CMOpenALSound.m in Sources */,
254 | FA3D9980105EA8850075FE34 /* CMOpenALSoundManager.m in Sources */,
255 | FA3D9986105EA88A0075FE34 /* DebugOutput.m in Sources */,
256 | );
257 | runOnlyForDeploymentPostprocessing = 0;
258 | };
259 | /* End PBXSourcesBuildPhase section */
260 |
261 | /* Begin XCBuildConfiguration section */
262 | 1D6058940D05DD3E006BFB54 /* Debug */ = {
263 | isa = XCBuildConfiguration;
264 | buildSettings = {
265 | ALWAYS_SEARCH_USER_PATHS = NO;
266 | COPY_PHASE_STRIP = NO;
267 | GCC_DYNAMIC_NO_PIC = NO;
268 | GCC_OPTIMIZATION_LEVEL = 0;
269 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
270 | GCC_PREFIX_HEADER = AudioSample_Prefix.pch;
271 | INFOPLIST_FILE = "AudioSample-Info.plist";
272 | PRODUCT_NAME = AudioSample;
273 | };
274 | name = Debug;
275 | };
276 | 1D6058950D05DD3E006BFB54 /* Release */ = {
277 | isa = XCBuildConfiguration;
278 | buildSettings = {
279 | ALWAYS_SEARCH_USER_PATHS = NO;
280 | COPY_PHASE_STRIP = YES;
281 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
282 | GCC_PREFIX_HEADER = AudioSample_Prefix.pch;
283 | INFOPLIST_FILE = "AudioSample-Info.plist";
284 | PRODUCT_NAME = AudioSample;
285 | };
286 | name = Release;
287 | };
288 | C01FCF4F08A954540054247B /* Debug */ = {
289 | isa = XCBuildConfiguration;
290 | buildSettings = {
291 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
292 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
293 | GCC_C_LANGUAGE_STANDARD = c99;
294 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
295 | GCC_WARN_UNUSED_VARIABLE = YES;
296 | SDKROOT = iphoneos;
297 | };
298 | name = Debug;
299 | };
300 | C01FCF5008A954540054247B /* Release */ = {
301 | isa = XCBuildConfiguration;
302 | buildSettings = {
303 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
304 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
305 | GCC_C_LANGUAGE_STANDARD = c99;
306 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
307 | GCC_WARN_UNUSED_VARIABLE = YES;
308 | SDKROOT = iphoneos;
309 | };
310 | name = Release;
311 | };
312 | /* End XCBuildConfiguration section */
313 |
314 | /* Begin XCConfigurationList section */
315 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "AudioSample" */ = {
316 | isa = XCConfigurationList;
317 | buildConfigurations = (
318 | 1D6058940D05DD3E006BFB54 /* Debug */,
319 | 1D6058950D05DD3E006BFB54 /* Release */,
320 | );
321 | defaultConfigurationIsVisible = 0;
322 | defaultConfigurationName = Release;
323 | };
324 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "AudioSample" */ = {
325 | isa = XCConfigurationList;
326 | buildConfigurations = (
327 | C01FCF4F08A954540054247B /* Debug */,
328 | C01FCF5008A954540054247B /* Release */,
329 | );
330 | defaultConfigurationIsVisible = 0;
331 | defaultConfigurationName = Release;
332 | };
333 | /* End XCConfigurationList section */
334 | };
335 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
336 | }
337 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/project.xcworkspace/xcuserdata/alex.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges
6 |
7 | SnapshotAutomaticallyBeforeSignificantChanges
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/xcuserdata/alex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/AudioSample.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
51 |
52 |
58 |
59 |
60 |
61 |
62 |
63 |
69 |
70 |
76 |
77 |
78 |
79 |
81 |
82 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/AudioSample.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | AudioSample.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 1D6058900D05DD3D006BFB54
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/AudioSample_Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'AudioSample' target in the 'AudioSample' project
3 | //
4 | #import
5 |
6 | #ifndef __IPHONE_3_0
7 | #warning "This project uses features only available in iPhone SDK 3.0 and later."
8 | #endif
9 |
10 |
11 | #ifdef __OBJC__
12 | #import
13 | #import
14 | #endif
15 |
--------------------------------------------------------------------------------
/Classes/AppleOpenALSupport.c:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | File: MyOpenALSupport.c
4 | Abstract: OpenAL-related support functions
5 | Version: 1.4
6 |
7 | Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
8 | Inc. ("Apple") in consideration of your agreement to the following
9 | terms, and your use, installation, modification or redistribution of
10 | this Apple software constitutes acceptance of these terms. If you do
11 | not agree with these terms, please do not use, install, modify or
12 | redistribute this Apple software.
13 |
14 | In consideration of your agreement to abide by the following terms, and
15 | subject to these terms, Apple grants you a personal, non-exclusive
16 | license, under Apple's copyrights in this original Apple software (the
17 | "Apple Software"), to use, reproduce, modify and redistribute the Apple
18 | Software, with or without modifications, in source and/or binary forms;
19 | provided that if you redistribute the Apple Software in its entirety and
20 | without modifications, you must retain this notice and the following
21 | text and disclaimers in all such redistributions of the Apple Software.
22 | Neither the name, trademarks, service marks or logos of Apple Inc. may
23 | be used to endorse or promote products derived from the Apple Software
24 | without specific prior written permission from Apple. Except as
25 | expressly stated in this notice, no other rights or licenses, express or
26 | implied, are granted by Apple herein, including but not limited to any
27 | patent rights that may be infringed by your derivative works or by other
28 | works in which the Apple Software may be incorporated.
29 |
30 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE
31 | MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
32 | THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
33 | FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
34 | OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
35 |
36 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
37 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
38 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
39 | INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
40 | MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
41 | AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
42 | STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
43 | POSSIBILITY OF SUCH DAMAGE.
44 |
45 | Copyright (C) 2009 Apple Inc. All Rights Reserved.
46 |
47 |
48 | */
49 |
50 | #include "AppleOpenALSupport.h"
51 |
52 | ALvoid alBufferDataStaticProc(const ALint bid, ALenum format, ALvoid* data, ALsizei size, ALsizei freq)
53 | {
54 | static alBufferDataStaticProcPtr proc = NULL;
55 |
56 | if (proc == NULL) {
57 | proc = (alBufferDataStaticProcPtr) alcGetProcAddress(NULL, (const ALCchar*) "alBufferDataStatic");
58 | }
59 |
60 | if (proc)
61 | proc(bid, format, data, size, freq);
62 |
63 | return;
64 | }
65 |
66 | void* MyGetOpenALAudioData(CFURLRef inFileURL, ALsizei *outDataSize, ALenum *outDataFormat, ALsizei *outSampleRate, ALdouble *duration)
67 | {
68 | OSStatus err = noErr;
69 | SInt64 theFileLengthInFrames = 0;
70 | AudioStreamBasicDescription theFileFormat;
71 | UInt32 thePropertySize = sizeof(theFileFormat);
72 | ExtAudioFileRef extRef = NULL;
73 | void* theData = NULL;
74 | AudioStreamBasicDescription theOutputFormat;
75 |
76 | // Open a file with ExtAudioFileOpen()
77 | err = ExtAudioFileOpenURL(inFileURL, &extRef);
78 | if(err) { printf("MyGetOpenALAudioData: ExtAudioFileOpenURL FAILED, Error = %ld\n", err); goto Exit; }
79 |
80 | // Get the audio data format
81 | err = ExtAudioFileGetProperty(extRef, kExtAudioFileProperty_FileDataFormat, &thePropertySize, &theFileFormat);
82 | if(err) { printf("MyGetOpenALAudioData: ExtAudioFileGetProperty(kExtAudioFileProperty_FileDataFormat) FAILED, Error = %ld\n", err); goto Exit; }
83 | if (theFileFormat.mChannelsPerFrame > 2) { printf("MyGetOpenALAudioData - Unsupported Format, channel count is greater than stereo\n"); goto Exit;}
84 |
85 | // Set the client format to 16 bit signed integer (native-endian) data
86 | // Maintain the channel count and sample rate of the original source format
87 | theOutputFormat.mSampleRate = theFileFormat.mSampleRate;
88 | theOutputFormat.mChannelsPerFrame = theFileFormat.mChannelsPerFrame;
89 |
90 | theOutputFormat.mFormatID = kAudioFormatLinearPCM;
91 | theOutputFormat.mBytesPerPacket = 2 * theOutputFormat.mChannelsPerFrame;
92 | theOutputFormat.mFramesPerPacket = 1;
93 | theOutputFormat.mBytesPerFrame = 2 * theOutputFormat.mChannelsPerFrame;
94 | theOutputFormat.mBitsPerChannel = 16;
95 | theOutputFormat.mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger;
96 |
97 | // Set the desired client (output) data format
98 | err = ExtAudioFileSetProperty(extRef, kExtAudioFileProperty_ClientDataFormat, sizeof(theOutputFormat), &theOutputFormat);
99 | if(err) { printf("MyGetOpenALAudioData: ExtAudioFileSetProperty(kExtAudioFileProperty_ClientDataFormat) FAILED, Error = %ld\n", err); goto Exit; }
100 |
101 | // Get the total frame count
102 | thePropertySize = sizeof(theFileLengthInFrames);
103 | err = ExtAudioFileGetProperty(extRef, kExtAudioFileProperty_FileLengthFrames, &thePropertySize, &theFileLengthInFrames);
104 | if(err) { printf("MyGetOpenALAudioData: ExtAudioFileGetProperty(kExtAudioFileProperty_FileLengthFrames) FAILED, Error = %ld\n", err); goto Exit; }
105 |
106 | // Read all the data into memory
107 | UInt32 dataSize = theFileLengthInFrames * theOutputFormat.mBytesPerFrame;;
108 | theData = malloc(dataSize);
109 | if (theData)
110 | {
111 | AudioBufferList theDataBuffer;
112 | theDataBuffer.mNumberBuffers = 1;
113 | theDataBuffer.mBuffers[0].mDataByteSize = dataSize;
114 | theDataBuffer.mBuffers[0].mNumberChannels = theOutputFormat.mChannelsPerFrame;
115 | theDataBuffer.mBuffers[0].mData = theData;
116 |
117 | // Read the data into an AudioBufferList
118 | err = ExtAudioFileRead(extRef, (UInt32*)&theFileLengthInFrames, &theDataBuffer);
119 | if(err == noErr)
120 | {
121 | // success
122 | *outDataSize = (ALsizei)dataSize;
123 | *outDataFormat = (theOutputFormat.mChannelsPerFrame > 1) ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16;
124 | *outSampleRate = (ALsizei)theOutputFormat.mSampleRate;
125 | }
126 | else
127 | {
128 | // failure
129 | free (theData);
130 | theData = NULL; // make sure to return NULL
131 | printf("MyGetOpenALAudioData: ExtAudioFileRead FAILED, Error = %ld\n", err); goto Exit;
132 | }
133 | }
134 |
135 | // Alex(Colombiamug): get the file duration...
136 | // first, get the audioID for the file...
137 | AudioFileID audioID;
138 | UInt32 audioIDSize = sizeof(audioID);
139 | err = ExtAudioFileGetProperty(extRef, kExtAudioFileProperty_AudioFile, &audioIDSize, &audioID);
140 | if(err) { printf("MyGetOpenALAudioData: ExtAudioFileGetProperty(kExtAudioFileProperty_AudioFile) FAILED, Error = %ld\n", err); goto Exit; }
141 |
142 | //now the duration...
143 | double soundDuration;
144 | UInt32 durationSize = sizeof(soundDuration);
145 | err = AudioFileGetProperty(audioID, kAudioFilePropertyEstimatedDuration, &durationSize, &soundDuration);
146 | if(err) { printf("MyGetOpenALAudioData: AudioFileGetProperty(kAudioFilePropertyEstimatedDuration) FAILED, Error = %ld\n", err); goto Exit; }
147 |
148 | *duration = soundDuration;
149 | //printf("Audio duration:%f secs.\n", soundDuration);
150 |
151 | Exit:
152 | // Dispose the ExtAudioFileRef, it is no longer needed
153 | if (extRef) ExtAudioFileDispose(extRef);
154 | return theData;
155 | }
156 |
157 |
--------------------------------------------------------------------------------
/Classes/AppleOpenALSupport.h:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | File: MyOpenALSupport.h
4 | Abstract: OpenAL-related support functions
5 | Version: 1.4
6 |
7 | Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
8 | Inc. ("Apple") in consideration of your agreement to the following
9 | terms, and your use, installation, modification or redistribution of
10 | this Apple software constitutes acceptance of these terms. If you do
11 | not agree with these terms, please do not use, install, modify or
12 | redistribute this Apple software.
13 |
14 | In consideration of your agreement to abide by the following terms, and
15 | subject to these terms, Apple grants you a personal, non-exclusive
16 | license, under Apple's copyrights in this original Apple software (the
17 | "Apple Software"), to use, reproduce, modify and redistribute the Apple
18 | Software, with or without modifications, in source and/or binary forms;
19 | provided that if you redistribute the Apple Software in its entirety and
20 | without modifications, you must retain this notice and the following
21 | text and disclaimers in all such redistributions of the Apple Software.
22 | Neither the name, trademarks, service marks or logos of Apple Inc. may
23 | be used to endorse or promote products derived from the Apple Software
24 | without specific prior written permission from Apple. Except as
25 | expressly stated in this notice, no other rights or licenses, express or
26 | implied, are granted by Apple herein, including but not limited to any
27 | patent rights that may be infringed by your derivative works or by other
28 | works in which the Apple Software may be incorporated.
29 |
30 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE
31 | MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
32 | THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
33 | FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
34 | OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
35 |
36 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
37 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
38 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
39 | INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
40 | MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
41 | AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
42 | STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
43 | POSSIBILITY OF SUCH DAMAGE.
44 |
45 | Copyright (C) 2009 Apple Inc. All Rights Reserved.
46 |
47 |
48 | */
49 |
50 | #import
51 | #import
52 | #import
53 | #import
54 | #import
55 |
56 | //typedef ALvoid AL_APIENTRY (*alBufferDataStaticProcPtr) (const ALint bid, ALenum format, ALvoid* data, ALsizei size, ALsizei freq);
57 | ALvoid alBufferDataStaticProc(const ALint bid, ALenum format, ALvoid* data, ALsizei size, ALsizei freq);
58 |
59 | void* MyGetOpenALAudioData(CFURLRef inFileURL, ALsizei *outDataSize, ALenum *outDataFormat, ALsizei *outSampleRate, ALdouble *duration);
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Classes/AudioSampleAppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AudioSampleAppDelegate.h
3 | // AudioSample
4 | //
5 | // Created by Alex Restrepo on 9/14/09.
6 | // Copyright Brainchild 2009. All rights reserved.
7 | //
8 |
9 | @interface AudioSampleAppDelegate : NSObject {
10 |
11 | UIWindow *window;
12 | UINavigationController *navigationController;
13 | }
14 |
15 | @property (nonatomic, retain) IBOutlet UIWindow *window;
16 | @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
17 |
18 | @end
19 |
20 |
--------------------------------------------------------------------------------
/Classes/AudioSampleAppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AudioSampleAppDelegate.m
3 | // AudioSample
4 | //
5 | // Created by Alex Restrepo on 9/14/09.
6 | // Copyright Brainchild 2009. All rights reserved.
7 | //
8 |
9 | #import "AudioSampleAppDelegate.h"
10 | #import "RootViewController.h"
11 |
12 |
13 | @implementation AudioSampleAppDelegate
14 |
15 | @synthesize window;
16 | @synthesize navigationController;
17 |
18 |
19 | #pragma mark -
20 | #pragma mark Application lifecycle
21 |
22 | - (void)applicationDidFinishLaunching:(UIApplication *)application {
23 |
24 | // Override point for customization after app launch
25 |
26 | [window addSubview:[navigationController view]];
27 | [window makeKeyAndVisible];
28 | }
29 |
30 |
31 | - (void)applicationWillTerminate:(UIApplication *)application {
32 | // Save data if appropriate
33 | }
34 |
35 |
36 | #pragma mark -
37 | #pragma mark Memory management
38 |
39 | - (void)dealloc {
40 | [navigationController release];
41 | [window release];
42 | [super dealloc];
43 | }
44 |
45 |
46 | @end
47 |
48 |
--------------------------------------------------------------------------------
/Classes/CMOpenALSound.h:
--------------------------------------------------------------------------------
1 | //
2 | // CMOpenALSound.h
3 | //
4 | // Created by Alex Restrepo on 5/19/09.
5 | // Copyright 2009 Colombiamug. All rights reserved.
6 | //
7 | // Portions of this code are adapted from Apple's oalTouch example and
8 | // http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/
9 | //
10 | // This code is released under the creative commons attribution-share alike licence, meaning:
11 | //
12 | // Attribution - You must attribute the work in the manner specified by the author or licensor
13 | // (but not in any way that suggests that they endorse you or your use of the work).
14 | // In this case, simple credit somewhere in your app or documentation will suffice.
15 | //
16 | // Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting
17 | // work only under the same, similar or a compatible license.
18 | // Simply put, if you improve upon it, share!
19 | //
20 | // http://creativecommons.org/licenses/by-sa/3.0/us/
21 |
22 | #import
23 | #import
24 | #import
25 | #import
26 |
27 | @interface CMOpenALSound : NSObject
28 | {
29 | ALuint bufferID;
30 | ALuint sourceID; //base source ID
31 | ALdouble duration; //duration of the sound in seconds
32 | ALfloat volume; //volume [0 - 1]
33 | ALfloat pitch; //speed
34 |
35 | ALenum error;
36 | ALvoid *bufferData; //holds the actual sound data
37 |
38 | NSMutableArray *temporarySounds; //holds source IDs to temporary sounds (sounds played when the base source was busy)
39 | NSString *sourceFileName;
40 | }
41 |
42 | @property (nonatomic, readonly) ALenum error;
43 | @property (nonatomic, readonly) ALdouble duration;
44 | @property (nonatomic) ALfloat volume;
45 | @property (nonatomic) ALfloat pitch;
46 | @property (nonatomic, copy, readonly) NSString *sourceFileName;
47 |
48 | - (id) initWithSoundFile:(NSString *)file doesLoop:(BOOL)loops;
49 |
50 | - (BOOL) play;
51 | - (BOOL) stop;
52 | - (BOOL) pause;
53 | - (BOOL) rewind;
54 | - (BOOL) isPlaying;
55 | - (BOOL) isAnyPlaying;
56 | @end
57 |
--------------------------------------------------------------------------------
/Classes/CMOpenALSound.m:
--------------------------------------------------------------------------------
1 | //
2 | // CMOpenALSound.m
3 | //
4 | // Created by Alex Restrepo on 5/19/09.
5 | // Copyright 2009 Colombiamug. All rights reserved.
6 | //
7 | // Portions of this code are adapted from Apple's oalTouch example and
8 | // http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/
9 | //
10 | // This code is released under the creative commons attribution-share alike licence, meaning:
11 | //
12 | // Attribution - You must attribute the work in the manner specified by the author or licensor
13 | // (but not in any way that suggests that they endorse you or your use of the work).
14 | // In this case, simple credit somewhere in your app or documentation will suffice.
15 | //
16 | // Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting
17 | // work only under the same, similar or a compatible license.
18 | // Simply put, if you improve upon it, share!
19 | //
20 | // http://creativecommons.org/licenses/by-sa/3.0/us/
21 |
22 | #import "CMOpenALSound.h"
23 | #import "AppleOpenALSupport.h"
24 | #import "DebugOutput.h"
25 |
26 | @interface CMOpenALSound()
27 | @property (nonatomic, retain) NSMutableArray *temporarySounds;
28 | @property (nonatomic, copy) NSString *sourceFileName;
29 | -(BOOL) loadSoundFile:(NSString *)file doesLoop:(BOOL)loops;
30 | @end
31 |
32 | @implementation CMOpenALSound
33 | @synthesize error, temporarySounds, duration, sourceFileName;
34 |
35 | #pragma mark -
36 | #pragma mark init/dealloc
37 | //initialize with a sound file...
38 | - (id) initWithSoundFile:(NSString *)file doesLoop:(BOOL)loops
39 | {
40 | self = [super init];
41 | if (self != nil)
42 | {
43 | if(![self loadSoundFile:file doesLoop:loops])
44 | {
45 | debug(@"Failed to load the sound file: %@...", file);
46 | [self release];
47 | return nil;
48 | }
49 | self.sourceFileName = file;
50 |
51 | //temporary sound queue
52 | self.temporarySounds = [NSMutableArray array];
53 |
54 | //default volume/pitch
55 | self.volume = 1.0;
56 | self.pitch = 1.0;
57 | }
58 | return self;
59 | }
60 |
61 | - (void) dealloc
62 | {
63 | debug(@"Deallocing sound: sourceID:%u, bufferID:%u", sourceID, bufferID);
64 |
65 | //delete base source...
66 | alDeleteSources(1, &sourceID);
67 |
68 | //and all temporary sources...
69 | for(NSNumber *tmpSourceID in temporarySounds)
70 | {
71 | //tmpSourceID is the source ID for the temporary sound
72 | NSUInteger srcID = [tmpSourceID unsignedIntegerValue];
73 | alDeleteSources(1, &srcID);
74 | }
75 | [temporarySounds release];
76 |
77 | //now the buffer, since it wasn't copied to openAL
78 | alDeleteBuffers(1, &bufferID);
79 |
80 | if(bufferData)
81 | {
82 | free(bufferData);
83 | bufferData = NULL;
84 | }
85 |
86 | [sourceFileName release];
87 |
88 | [super dealloc];
89 | }
90 |
91 | #pragma mark -
92 | #pragma mark loading
93 | -(BOOL) loadSoundFile:(NSString *)fileName doesLoop:(BOOL)loops
94 | {
95 | ALenum format;
96 | ALsizei size;
97 | ALsizei freq;
98 | error = AL_NO_ERROR;
99 | alGetError(); //clear any previous error...
100 |
101 | //get the URL for the sound file...
102 | NSBundle *bundle = [NSBundle mainBundle];
103 | NSString *path = [bundle pathForResource:[fileName stringByDeletingPathExtension]
104 | ofType:[fileName pathExtension]];
105 |
106 | if(!path) return NO;
107 |
108 | CFURLRef fileURL = (CFURLRef)[[NSURL fileURLWithPath:path] retain];
109 |
110 | if (!fileURL)
111 | {
112 | debug(@"file: %@ not found.", fileName);
113 | return NO;
114 | }
115 |
116 | // get audio data from file
117 | bufferData = MyGetOpenALAudioData(fileURL, &size, &format, &freq, &duration);
118 | CFRelease(fileURL);
119 |
120 | // grab a buffer ID from openAL
121 | alGenBuffers(1, &bufferID);
122 |
123 | // load the awaiting data blob into the openAL buffer.
124 | // http://developer.apple.com/iphone/library/technotes/tn2008/tn2199.html
125 | // Use the alBufferDataStatic API, found in the oalStaticBufferExtension.h header file,
126 | // instead of the standard alBufferData function. This eliminates extra buffer copies by allowing your application to own
127 | // the audio data memory used by the buffer objects.
128 | alBufferDataStaticProc(bufferID, format, bufferData, size, freq);
129 |
130 | // grab a source ID from openAL, this will be the base source ID
131 | alGenSources(1, &sourceID);
132 |
133 | // attach the buffer to the source
134 | alSourcei(sourceID, AL_BUFFER, bufferID);
135 |
136 | if (loops)
137 | alSourcei(sourceID, AL_LOOPING, AL_TRUE);
138 |
139 |
140 | if((error = alGetError()) != AL_NO_ERROR)
141 | {
142 | debug(@"error loading sound: %x\n", error);
143 | return NO;
144 | }
145 |
146 | return YES;
147 | }
148 |
149 | #pragma mark -
150 | #pragma mark playback
151 | - (void) deleteTemporarySource
152 | {
153 | //dequeue a sourceID from the temporary sound queue
154 | NSUInteger tmpSourceID = [[temporarySounds objectAtIndex:0] unsignedIntegerValue];
155 | [temporarySounds removeObjectAtIndex:0];
156 |
157 | debug(@"Deleting temporary source: sourceID: %u, [temporarySounds count]:%u", tmpSourceID, [temporarySounds count]);
158 | //and delete the source to make it available again for another sound.
159 | alDeleteSources(1, &tmpSourceID);
160 | }
161 |
162 | - (BOOL) play
163 | {
164 | if([self isPlaying]) //see if the base source is busy...
165 | {
166 | //if so, create a new source
167 | NSUInteger tmpSourceID;
168 | alGenSources(1, &tmpSourceID);
169 |
170 | //attach the buffer to the source
171 | alSourcei(tmpSourceID, AL_BUFFER, bufferID);
172 | alSourcePlay(tmpSourceID);
173 |
174 | //add the sound id to the play queue so we can dispose of it later
175 | [temporarySounds addObject: [NSNumber numberWithUnsignedInteger:tmpSourceID]];
176 |
177 | //a "callback" for when the sound is done playing +0.1 secs
178 | [self performSelector:@selector(deleteTemporarySource)
179 | withObject:nil
180 | afterDelay:(duration * pitch) + 0.1];
181 |
182 | return ((error = alGetError()) != AL_NO_ERROR);
183 | }
184 |
185 | //if the base source isn't busy, just use that one...
186 | alSourcePlay(sourceID);
187 | return ((error = alGetError()) != AL_NO_ERROR);
188 | }
189 |
190 | - (BOOL) stop
191 | {
192 | alSourceStop(sourceID);
193 | return ((error = alGetError()) != AL_NO_ERROR);
194 | }
195 |
196 | - (BOOL) pause
197 | {
198 | alSourcePause(sourceID);
199 | return ((error = alGetError()) != AL_NO_ERROR);
200 | }
201 |
202 | - (BOOL) rewind
203 | {
204 | alSourceRewind(sourceID);
205 | return ((error = alGetError()) != AL_NO_ERROR);
206 | }
207 |
208 | // returns whether the BASE source is playing or not
209 | - (BOOL) isPlaying
210 | {
211 | ALenum state;
212 | alGetSourcei(sourceID, AL_SOURCE_STATE, &state);
213 |
214 | return (state == AL_PLAYING);
215 | }
216 |
217 | // returns YES if the base or any temporary sounds are playing...
218 | - (BOOL) isAnyPlaying
219 | {
220 | return [self isPlaying] || [temporarySounds count] > 0;
221 | }
222 |
223 | #pragma mark -
224 | #pragma mark properties
225 | - (ALfloat) volume
226 | {
227 | return volume;
228 | }
229 |
230 | - (void) setVolume:(ALfloat)newVolume
231 | {
232 | volume = MAX(MIN(newVolume, 1.0f), 0.0f); //cap to 0-1
233 | alSourcef(sourceID, AL_GAIN, volume);
234 |
235 | //now set the volume for any temporary sounds...
236 |
237 | for(NSNumber *tmpSourceID in temporarySounds)
238 | {
239 | //tmpSourceID is the source ID for the temporary sound
240 | alSourcef([tmpSourceID unsignedIntegerValue], AL_GAIN, volume);
241 | }
242 | }
243 |
244 | - (ALfloat) pitch
245 | {
246 | return pitch;
247 | }
248 |
249 | - (void) setPitch:(ALfloat)newPitch
250 | {
251 | pitch = newPitch;
252 |
253 | alSourcef(sourceID, AL_PITCH, pitch);
254 |
255 | for(NSNumber *tmpSourceID in temporarySounds)
256 | {
257 | //tmpSourceID is the source ID for the temporary sound
258 | alSourcef([tmpSourceID unsignedIntegerValue], AL_PITCH, pitch);
259 | }
260 | }
261 | @end
262 |
--------------------------------------------------------------------------------
/Classes/CMOpenALSoundManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // CMOpenALSoundManager.h
3 | //
4 | // Created by Alex Restrepo on 5/19/09.
5 | // Copyright 2009 Colombiamug. All rights reserved.
6 | //
7 | // Portions of this code are adapted from Apple's oalTouch example and
8 | // http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/
9 | //
10 | // This code is released under the creative commons attribution-share alike licence, meaning:
11 | //
12 | // Attribution - You must attribute the work in the manner specified by the author or licensor
13 | // (but not in any way that suggests that they endorse you or your use of the work).
14 | // In this case, simple credit somewhere in your app or documentation will suffice.
15 | //
16 | // Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting
17 | // work only under the same, similar or a compatible license.
18 | // Simply put, if you improve upon it, share!
19 | //
20 | // http://creativecommons.org/licenses/by-sa/3.0/us/
21 |
22 | #import
23 | #import
24 | #import
25 | #import
26 | #import
27 |
28 | #define USE_AS_SINGLETON 0 //Set this to 0 if you want to use this class as a regular class instead of as a singleton.
29 |
30 | @class CMOpenALSound;
31 |
32 | @interface CMOpenALSoundManager : NSObject
33 | {
34 | AVAudioPlayer *backgroundAudio; // background music
35 |
36 | NSMutableDictionary *soundDictionary; // stores our soundkeys
37 | NSArray *soundFileNames; // array that holds the filenames for the sounds, they will be referenced by index
38 |
39 | BOOL isiPodAudioPlaying; // ipod playing music?
40 |
41 | float backgroundMusicVolume;
42 | float soundEffectsVolume;
43 |
44 | BOOL interrupted;
45 | NSString *currentBackgroundAudioFile;
46 | }
47 |
48 | @property (nonatomic, retain) NSArray *soundFileNames;
49 | @property (nonatomic, readonly) BOOL isiPodAudioPlaying;
50 | @property (nonatomic) float backgroundMusicVolume;
51 | @property (nonatomic) float soundEffectsVolume;
52 |
53 | #if USE_AS_SINGLETON
54 | + (CMOpenALSoundManager *) sharedCMOpenALSoundManager;
55 | #endif
56 |
57 | - (void) purgeSounds; // purges all sounds from memory, in case of a memory warning...
58 | - (void) beginInterruption; // handle os sound interruptions
59 | - (void) endInterruption;
60 |
61 | - (void) playBackgroundMusic:(NSString *)file; //file is the filename to play (from your main bundle)
62 | - (void) playBackgroundMusic:(NSString *)file forcePlay:(BOOL)forcePlay; //if forcePlay is YES, iPod audio will be stopped.
63 | - (void) stopBackgroundMusic;
64 | - (void) pauseBackgroundMusic;
65 | - (void) resumeBackgroundMusic;
66 |
67 | - (void) playSoundWithID:(NSUInteger)soundID; //id is the index in the sound filename array
68 | - (void) stopSoundWithID:(NSUInteger)soundID;
69 | - (void) pauseSoundWithID:(NSUInteger)soundID;
70 | - (void) rewindSoundWithID:(NSUInteger)soundID;
71 |
72 | - (BOOL) isPlayingSoundWithID:(NSUInteger)soundID;
73 | - (BOOL) isBackGroundMusicPlaying;
74 | @end
75 |
--------------------------------------------------------------------------------
/Classes/CMOpenALSoundManager.m:
--------------------------------------------------------------------------------
1 | //
2 | // CMOpenALSoundManager.m
3 | //
4 | // Created by Alex Restrepo on 5/19/09.
5 | // Copyright 2009 Colombiamug. All rights reserved.
6 | //
7 | // Portions of this code are adapted from Apple's oalTouch example and
8 | // http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/
9 | //
10 | // This code is released under the creative commons attribution-share alike licence, meaning:
11 | //
12 | // Attribution - You must attribute the work in the manner specified by the author or licensor
13 | // (but not in any way that suggests that they endorse you or your use of the work).
14 | // In this case, simple credit somewhere in your app or documentation will suffice.
15 | //
16 | // Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting
17 | // work only under the same, similar or a compatible license.
18 | // Simply put, if you improve upon it, share!
19 | //
20 | // http://creativecommons.org/licenses/by-sa/3.0/us/
21 |
22 | #import "CMOpenALSoundManager.h"
23 | #import "CMOpenALSound.h"
24 | #import "SynthesizeSingleton.h"
25 | #import "DebugOutput.h"
26 |
27 | @interface CMOpenALSoundManager()
28 | @property (nonatomic, retain) NSMutableDictionary *soundDictionary;
29 | @property (nonatomic, retain) AVAudioPlayer *backgroundAudio;
30 | @property (nonatomic) BOOL interrupted;
31 | @property (nonatomic) BOOL isiPodAudioPlaying;
32 | @property (nonatomic, copy) NSString *currentBackgroundAudioFile;
33 | @end
34 |
35 | @interface CMOpenALSoundManager(private)
36 | - (NSString *) keyForSoundID:(NSUInteger)soundID;
37 | - (void) setupAudioCategorySilenceIpod:(BOOL)silenceIpod;
38 | - (void) shutdownOpenAL;
39 | - (BOOL) startupOpenAL;
40 | @end
41 |
42 | //audio interruption callback...
43 | void interruptionListenerCallback (void *inUserData, UInt32 interruptionState)
44 | {
45 | CMOpenALSoundManager *soundMgr = (CMOpenALSoundManager *) inUserData;
46 |
47 | if (interruptionState == kAudioSessionBeginInterruption)
48 | {
49 | debug(@"Start audio interruption");
50 | [soundMgr beginInterruption];
51 | soundMgr.interrupted = YES;
52 | }
53 | else if ((interruptionState == kAudioSessionEndInterruption) && soundMgr.interrupted)
54 | {
55 | debug(@"Stop audio interruption");
56 | [soundMgr endInterruption];
57 | soundMgr.interrupted = NO;
58 | }
59 | }
60 |
61 | @implementation CMOpenALSoundManager
62 | @synthesize soundDictionary, soundFileNames, backgroundAudio, isiPodAudioPlaying, interrupted, currentBackgroundAudioFile;
63 |
64 | #if USE_AS_SINGLETON
65 | SYNTHESIZE_SINGLETON_FOR_CLASS(CMOpenALSoundManager);
66 | #endif
67 |
68 | #pragma mark -
69 | #pragma mark init/dealloc
70 | - (id) init
71 | {
72 | self = [super init];
73 | if (self != nil)
74 | {
75 | //create audio session.
76 | OSStatus status = AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);
77 | if (status != kAudioSessionNoError)
78 | {
79 | debug(@"AudioSessionInitialize failed! %d", status);
80 | }
81 |
82 | self.soundDictionary = [NSMutableDictionary dictionary];
83 | self.soundEffectsVolume = 1.0;
84 | self.backgroundMusicVolume = 1.0;
85 |
86 | //isiPodAudioPlaying = YES;
87 | [self endInterruption];
88 | }
89 | return self;
90 | }
91 |
92 | // start up openAL
93 | -(BOOL) startupOpenAL
94 | {
95 | ALCcontext *context = NULL;
96 | ALCdevice *device = NULL;
97 |
98 | // Initialization
99 | device = alcOpenDevice(NULL); // select the "preferred device"
100 | if(!device) return NO;
101 |
102 | // use the device to make a context
103 | context = alcCreateContext(device, NULL);
104 | if(!context) return NO;
105 |
106 | // set my context to the currently active one
107 | alcMakeContextCurrent(context);
108 |
109 | debug(@"oal inited ok");
110 | return YES;
111 | }
112 |
113 | - (void) dealloc
114 | {
115 | debug(@"CMOpenALSoundManager dealloc");
116 |
117 | [self shutdownOpenAL];
118 |
119 | [backgroundAudio release];
120 | [soundFileNames release];
121 | [soundDictionary release];
122 | [currentBackgroundAudioFile release];
123 |
124 | [super dealloc];
125 | }
126 |
127 | - (void) shutdownOpenAL
128 | {
129 | //self.backgroundAudio = nil;
130 | //self.soundFileNames = nil;
131 | //self.soundDictionary = nil;
132 |
133 | ALCcontext *context = NULL;
134 | ALCdevice *device = NULL;
135 |
136 | //Get active context (there can only be one)
137 | context = alcGetCurrentContext();
138 |
139 | //Get device for active context
140 | device = alcGetContextsDevice(context);
141 |
142 | //Release context
143 | alcDestroyContext(context);
144 |
145 | //Close device
146 | alcCloseDevice(device);
147 | }
148 |
149 | #pragma mark -
150 | #pragma mark audio session mgmt
151 |
152 | - (void) beginInterruption
153 | {
154 | debug(@"begin interruption");
155 | [self stopBackgroundMusic];
156 | [self purgeSounds];
157 | [self shutdownOpenAL];
158 |
159 | if(!self.isiPodAudioPlaying)
160 | {
161 | UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
162 | AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
163 | AudioSessionSetActive(YES);
164 | }
165 | else
166 | {
167 | UInt32 sessionCategory = kAudioSessionCategory_UserInterfaceSoundEffects;
168 | AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
169 | AudioSessionSetActive(YES);
170 | }
171 |
172 | AudioSessionSetActive(NO);
173 | }
174 |
175 | - (void) endInterruption
176 | {
177 | debug(@"end interruption");
178 | [self setupAudioCategorySilenceIpod: NO];
179 | [self startupOpenAL];
180 |
181 | AudioSessionSetActive(YES);
182 | }
183 |
184 | - (void) setupAudioCategorySilenceIpod:(BOOL)silenceIpod;
185 | {
186 | UInt32 audioIsAlreadyPlaying;
187 | UInt32 propertySize = sizeof(audioIsAlreadyPlaying);
188 |
189 |
190 | //query audio hw to see if ipod is playing...
191 | OSStatus err = AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &audioIsAlreadyPlaying);
192 | if(err)
193 | debug(@"AudioSessionGetProperty error:%i",err);
194 |
195 | debug(@"kAudioSessionProperty_OtherAudioIsPlaying = %@", audioIsAlreadyPlaying ? @"YES" : @"NO");
196 |
197 | if(audioIsAlreadyPlaying && !silenceIpod)
198 | {
199 | self.isiPodAudioPlaying = YES;
200 |
201 | //register session as ambient sound so our effects mix with ipod audio
202 | UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
203 | AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
204 | }
205 | else
206 | {
207 | self.isiPodAudioPlaying = NO;
208 |
209 | //register session as solo ambient sound so the ipod is silenced, and we can use hardware codecs for background audio
210 | UInt32 sessionCategory = kAudioSessionCategory_SoloAmbientSound;
211 | AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
212 | }
213 | }
214 |
215 | #pragma mark -
216 | #pragma mark cleanup
217 | - (void) purgeSounds
218 | {
219 | //call this if you get a memory warning, to unload all sounds from memory
220 | [self.soundDictionary removeAllObjects];
221 |
222 | //if there's a background audio that's not playing, remove that too...
223 | if(![backgroundAudio isPlaying])
224 | {
225 | self.backgroundAudio = nil;
226 | self.currentBackgroundAudioFile = nil;
227 | }
228 | }
229 |
230 | #pragma mark -
231 | #pragma mark background music playback
232 | // plays a file as the background audio...
233 | - (void) playBackgroundMusic:(NSString *)file
234 | {
235 | [self playBackgroundMusic:file forcePlay:NO];
236 | }
237 |
238 | - (void) playBackgroundMusic:(NSString *)file forcePlay:(BOOL)forcePlay
239 | {
240 | if(forcePlay) //if we want to kill other audio sources, like the iPod...
241 | {
242 | [backgroundAudio stop]; //if there's audio already playing...
243 | [self setupAudioCategorySilenceIpod:YES];
244 | }
245 |
246 | if(isiPodAudioPlaying) //if other background audio is playing bail out...
247 | {
248 | debug(@"Sry, ipod is playing... can't play file %@",file);
249 | return;
250 | }
251 |
252 | if(self.backgroundAudio && [self.currentBackgroundAudioFile isEqualToString:file])
253 | {
254 | [self.backgroundAudio play];
255 | return; //already playing
256 | }
257 |
258 | NSString *soundFilePath = [[NSBundle mainBundle] pathForResource: [file stringByDeletingPathExtension]
259 | ofType: [file pathExtension]];
260 |
261 | NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
262 |
263 | NSError *error = nil;
264 | AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL
265 | error:&error];
266 |
267 | [fileURL release];
268 |
269 | if(error)
270 | {
271 | //TODO:chequear por errores
272 | debug(@"***** ERROR creando backgroundMusicPlayer file:%@", file);
273 | [player release];
274 | return;
275 | }
276 |
277 | self.currentBackgroundAudioFile = file;
278 | [player setNumberOfLoops:-1]; //loop forever
279 | player.volume = backgroundMusicVolume;
280 | [player play];
281 |
282 | self.backgroundAudio = player;
283 | [player release];
284 | }
285 |
286 | - (void) stopBackgroundMusic
287 | {
288 | [backgroundAudio stop];
289 | }
290 |
291 | - (void) pauseBackgroundMusic
292 | {
293 | [backgroundAudio pause];
294 | }
295 |
296 | - (void) resumeBackgroundMusic
297 | {
298 | [backgroundAudio play];
299 | }
300 |
301 | #pragma mark -
302 | #pragma mark effects playback
303 | // grab the filename (key) from the filenames array
304 | - (NSString *) keyForSoundID:(NSUInteger)soundID
305 | {
306 | if(soundID < 0 || soundID >= [soundFileNames count])
307 | return nil;
308 |
309 | return [[soundFileNames objectAtIndex:soundID] lastPathComponent];
310 | }
311 |
312 | - (void) playSoundWithID:(NSUInteger)soundID
313 | {
314 | //get sound key
315 | NSString *soundFile = [self keyForSoundID:soundID];
316 | if(!soundFile) return;
317 |
318 | CMOpenALSound *sound = [soundDictionary objectForKey:soundFile];
319 |
320 | if(!sound)
321 | {
322 | //create a new sound
323 | sound = [[CMOpenALSound alloc] initWithSoundFile:soundFile doesLoop:NO]; //this will return nil on failure
324 |
325 | if(!sound) //error
326 | return;
327 |
328 | [soundDictionary setObject:sound forKey:soundFile];
329 | [sound release];
330 | }
331 |
332 | [sound play];
333 | sound.volume = self.soundEffectsVolume;
334 | }
335 |
336 | - (void) stopSoundWithID:(NSUInteger)soundID
337 | {
338 | NSString *soundFile = [self keyForSoundID:soundID];
339 | if(!soundFile) return;
340 |
341 | CMOpenALSound *sound = [soundDictionary objectForKey:soundFile];
342 | [sound stop];
343 | }
344 |
345 | - (void) pauseSoundWithID:(NSUInteger)soundID
346 | {
347 | NSString *soundFile = [self keyForSoundID:soundID];
348 | if(!soundFile) return;
349 |
350 | CMOpenALSound *sound = [soundDictionary objectForKey:soundFile];
351 | [sound stop];
352 | }
353 |
354 | - (void) rewindSoundWithID:(NSUInteger)soundID
355 | {
356 | NSString *soundFile = [self keyForSoundID:soundID];
357 | if(!soundFile) return;
358 |
359 | CMOpenALSound *sound = [soundDictionary objectForKey:soundFile];
360 | [sound rewind];
361 | }
362 |
363 | - (BOOL) isPlayingSoundWithID:(NSUInteger)soundID
364 | {
365 | NSString *soundFile = [self keyForSoundID:soundID];
366 | if(!soundFile) return NO;
367 |
368 | CMOpenALSound *sound = [soundDictionary objectForKey:soundFile];
369 | return [sound isAnyPlaying];
370 | }
371 |
372 | - (BOOL) isBackGroundMusicPlaying
373 | {
374 | return [backgroundAudio isPlaying];
375 | }
376 |
377 | #pragma mark -
378 | #pragma mark properties
379 | - (float) backgroundMusicVolume
380 | {
381 | return backgroundMusicVolume;
382 | }
383 |
384 | - (void) setBackgroundMusicVolume:(float) newVolume
385 | {
386 | backgroundMusicVolume = newVolume;
387 | backgroundAudio.volume = newVolume;
388 | }
389 |
390 | - (float) soundEffectsVolume
391 | {
392 | return soundEffectsVolume;
393 | }
394 |
395 | - (void) setSoundEffectsVolume:(float) newVolume
396 | {
397 | soundEffectsVolume = newVolume;
398 | for(NSString *key in soundDictionary)
399 | {
400 | ((CMOpenALSound *)[soundDictionary objectForKey:key]).volume = newVolume;
401 | }
402 | }
403 | @end
404 |
--------------------------------------------------------------------------------
/Classes/DebugOutput.h:
--------------------------------------------------------------------------------
1 | /************************************************************************
2 | * DebugOutput.h
3 | *
4 | * Definitions for DebugOutput class
5 | * John Muchow
6 | * http://iphonedevelopertips.com/cocoa/filename-and-line-number-with-nslog-part-ii.html
7 | ************************************************************************/
8 |
9 | // Show full path of filename?
10 | #define DEBUG_SHOW_FULLPATH NO
11 |
12 | // Enable debug (NSLog) wrapper code?
13 | #define DEBUG 1
14 |
15 | //Use NSLog or CFShow
16 | #define USE_NSLOG 0
17 |
18 | #if DEBUG
19 | #define debug(format,...) [[DebugOutput sharedDebug] output:__FILE__ lineNumber:__LINE__ input:(format), ##__VA_ARGS__]
20 | #else
21 | #define debug(format,...)
22 | #endif
23 |
24 | @interface DebugOutput : NSObject
25 | {
26 | }
27 | + (DebugOutput *) sharedDebug;
28 | -(void)output:(char*)fileName lineNumber:(int)lineNumber input:(NSString*)input, ...;
29 | @end
30 |
--------------------------------------------------------------------------------
/Classes/DebugOutput.m:
--------------------------------------------------------------------------------
1 | /************************************************************************
2 | * DebugOutput.m
3 | *
4 | * Singleton class for wrapping NSLog messages, adding functionality
5 | * for displaying filename and line numbers. Also includes configuration
6 | * options to "turn off" all debug (NSLog) messages
7 | ************************************************************************/
8 | #import "DebugOutput.h"
9 |
10 | @implementation DebugOutput
11 |
12 | static DebugOutput *sharedDebugInstance = nil;
13 |
14 | /*---------------------------------------------------------------------*/
15 | + (DebugOutput *) sharedDebug
16 | {
17 | @synchronized(self)
18 | {
19 | if (sharedDebugInstance == nil)
20 | {
21 | [[self alloc] init];
22 | }
23 | }
24 | return sharedDebugInstance;
25 | }
26 |
27 | /*---------------------------------------------------------------------*/
28 | + (id) allocWithZone:(NSZone *) zone
29 | {
30 | @synchronized(self)
31 | {
32 | if (sharedDebugInstance == nil)
33 | {
34 | sharedDebugInstance = [super allocWithZone:zone];
35 | return sharedDebugInstance;
36 | }
37 | }
38 | return nil;
39 | }
40 |
41 | /*---------------------------------------------------------------------*/
42 | - (id)copyWithZone:(NSZone *)zone
43 | {
44 | return self;
45 | }
46 |
47 | /*---------------------------------------------------------------------*/
48 | - (id)retain
49 | {
50 | return self;
51 | }
52 |
53 | /*---------------------------------------------------------------------*/
54 | - (oneway void)release
55 | {
56 | // No action required...
57 | }
58 |
59 | /*---------------------------------------------------------------------*/
60 | - (unsigned)retainCount
61 | {
62 | return UINT_MAX; // An object that cannot be released
63 | }
64 |
65 | /*---------------------------------------------------------------------*/
66 | - (id)autorelease
67 | {
68 | return self;
69 | }
70 |
71 | /*---------------------------------------------------------------------*/
72 | -(void)output:(char*)fileName lineNumber:(int)lineNumber input:(NSString*)input, ...
73 | {
74 | va_list argList;
75 | NSString *filePath, *formatStr;
76 |
77 | // Build the path string
78 | filePath = [[NSString alloc] initWithBytes:fileName length:strlen(fileName) encoding:NSUTF8StringEncoding];
79 |
80 | // Process arguments, resulting in a format string
81 | va_start(argList, input);
82 | formatStr = [[NSString alloc] initWithFormat:input arguments:argList];
83 | va_end(argList);
84 |
85 |
86 | // Call NSLog, prepending the filename and line number
87 | #if USE_NSLOG
88 | NSLog(@"%s[%d]: %@",[((DEBUG_SHOW_FULLPATH) ? filePath : [filePath lastPathComponent]) UTF8String], lineNumber, formatStr);
89 | #else
90 | CFShow([NSString stringWithFormat: @"%s[%d]: %@",[((DEBUG_SHOW_FULLPATH) ? filePath : [filePath lastPathComponent]) UTF8String], lineNumber, formatStr]);
91 | #endif
92 |
93 | [filePath release];
94 | [formatStr release];
95 | }
96 |
97 | @end
--------------------------------------------------------------------------------
/Classes/RootViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // RootViewController.h
3 | // AudioSample
4 | //
5 | // Created by Alex Restrepo on 9/14/09.
6 | // Copyright Brainchild 2009. All rights reserved.
7 | //
8 |
9 | @class CMOpenALSoundManager;
10 | @interface RootViewController : UITableViewController {
11 | CMOpenALSoundManager *soundMgr;
12 | }
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/Classes/RootViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // RootViewController.m
3 | // AudioSample
4 | //
5 | // Created by Alex Restrepo on 9/14/09.
6 | // Copyright Brainchild 2009. All rights reserved.
7 | //
8 | // This code is released under the creative commons attribution-share alike licence, meaning:
9 | //
10 | // Attribution - You must attribute the work in the manner specified by the author or licensor
11 | // (but not in any way that suggests that they endorse you or your use of the work).
12 | // In this case, simple credit somewhere in your app or documentation will suffice.
13 | //
14 | // Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting
15 | // work only under the same, similar or a compatible license.
16 | // Simply put, if you improve upon it, share!
17 | //
18 | // http://creativecommons.org/licenses/by-sa/3.0/us/
19 |
20 | #import "RootViewController.h"
21 | #import "CMOpenALSoundManager.h"
22 |
23 | enum mySoundIds {
24 | AUDIOEFFECT
25 | };
26 |
27 | @interface RootViewController()
28 | @property (nonatomic, retain) CMOpenALSoundManager *soundMgr;
29 | @end
30 |
31 | @implementation RootViewController
32 | @synthesize soundMgr;
33 |
34 | - (void)viewDidLoad {
35 | [super viewDidLoad];
36 |
37 | self.title = @"Audio Sample";
38 |
39 | //start the audio manager...
40 | self.soundMgr = [[[CMOpenALSoundManager alloc] init] autorelease];
41 | soundMgr.soundFileNames = [NSArray arrayWithObject:@"Start.caf"];
42 | }
43 |
44 |
45 | - (void)viewWillAppear:(BOOL)animated {
46 | [super viewWillAppear:animated];
47 |
48 | // start background music
49 | [soundMgr playBackgroundMusic:@"backgroundLoop.m4a"]; // you could use forcePlay: YES if you wanted to stop any other audio source (iPod)
50 | }
51 |
52 |
53 | #pragma mark Table view methods
54 |
55 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
56 | return 4;
57 | }
58 |
59 | // Customize the number of rows in the table view.
60 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
61 | return 1;
62 | }
63 |
64 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
65 | {
66 | if(section == 0)
67 | return @"Background Audio Volume";
68 | else if(section == 1)
69 | return @"Effects volume";
70 |
71 | else return nil;
72 | }
73 |
74 | // Customize the appearance of table view cells.
75 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
76 |
77 | static NSString *CellIdentifier = @"Cell";
78 |
79 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
80 | if (cell == nil) {
81 | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
82 |
83 | // create a slider for the first 2 sections only
84 | if(indexPath.section < 2)
85 | {
86 | UISlider *slider;
87 | slider = [[UISlider alloc] initWithFrame:CGRectMake(5.0, 0.0, cell.bounds.size.width - cell.indentationWidth * 2.0, cell.bounds.size.height)];
88 | slider.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
89 | slider.minimumValueImage = [UIImage imageNamed:@"volumedown.png"];
90 | slider.maximumValueImage = [UIImage imageNamed:@"volumeup.png"];
91 |
92 | slider.maximumValue = 1.0;
93 | slider.minimumValue = 0.0;
94 | slider.value = 1.0; // in a real app you should read this value from the user defaults
95 |
96 | if(indexPath.section == 0)
97 | {
98 | [slider addTarget:self action:@selector(musicVolume:) forControlEvents:UIControlEventValueChanged];
99 | slider.enabled = !soundMgr.isiPodAudioPlaying; // disable the slider if the ipod is playing...
100 | }
101 | else
102 | [slider addTarget:self action:@selector(effectsVolume:) forControlEvents:UIControlEventValueChanged];
103 |
104 |
105 | [cell.contentView addSubview:slider];
106 | [slider release];
107 | }
108 | }
109 |
110 | // Configure the cell.
111 | if(indexPath.section == 2)
112 | {
113 | cell.textLabel.text = @"Play sound effect";
114 | cell.textLabel.textAlignment = UITextAlignmentCenter;
115 | }
116 | else if(indexPath.section == 3)
117 | {
118 | cell.textLabel.text = @"Play/Pause background music";
119 | cell.textLabel.textAlignment = UITextAlignmentCenter;
120 | }
121 |
122 | return cell;
123 | }
124 |
125 | - (void) musicVolume:(id)sender
126 | {
127 | soundMgr.backgroundMusicVolume = ((UISlider *)sender).value;
128 | }
129 |
130 | - (void) effectsVolume:(id)sender
131 | {
132 | soundMgr.soundEffectsVolume = ((UISlider *)sender).value;
133 | }
134 |
135 |
136 | // Override to support row selection in the table view.
137 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
138 | if(indexPath.section < 2) return;
139 |
140 | [tableView deselectRowAtIndexPath:indexPath animated:YES];
141 |
142 | if (indexPath.section == 2) {
143 | // play our sound effect
144 | [soundMgr playSoundWithID:AUDIOEFFECT];
145 | return;
146 | }
147 |
148 | if ([soundMgr isBackGroundMusicPlaying])
149 | {
150 | [soundMgr pauseBackgroundMusic];
151 | }
152 | else
153 | {
154 | [soundMgr resumeBackgroundMusic];
155 | }
156 |
157 | }
158 |
159 | - (void)dealloc {
160 | [soundMgr release];
161 | [super dealloc];
162 | }
163 |
164 |
165 | @end
166 |
167 |
--------------------------------------------------------------------------------
/Classes/SynthesizeSingleton.h:
--------------------------------------------------------------------------------
1 | //
2 | // SynthesizeSingleton.h
3 | // CocoaWithLove
4 | //
5 | // Created by Matt Gallagher on 20/10/08.
6 | // Copyright 2009 Matt Gallagher. All rights reserved.
7 | // http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html
8 | //
9 | // Permission is given to use this source code file without charge in any
10 | // project, commercial or otherwise, entirely at your risk, with the condition
11 | // that any redistribution (in part or whole) of source code must retain
12 | // this copyright and permission notice. Attribution in compiled projects is
13 | // appreciated but not required.
14 | //
15 |
16 | #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
17 | \
18 | static classname *shared##classname = nil; \
19 | \
20 | + (classname *)shared##classname \
21 | { \
22 | @synchronized(self) \
23 | { \
24 | if (shared##classname == nil) \
25 | { \
26 | shared##classname = [[self alloc] init]; \
27 | } \
28 | } \
29 | \
30 | return shared##classname; \
31 | } \
32 | \
33 | + (id)allocWithZone:(NSZone *)zone \
34 | { \
35 | @synchronized(self) \
36 | { \
37 | if (shared##classname == nil) \
38 | { \
39 | shared##classname = [super allocWithZone:zone]; \
40 | return shared##classname; \
41 | } \
42 | } \
43 | \
44 | return nil; \
45 | } \
46 | \
47 | - (id)copyWithZone:(NSZone *)zone \
48 | { \
49 | return self; \
50 | } \
51 | \
52 | - (id)retain \
53 | { \
54 | return self; \
55 | } \
56 | \
57 | - (NSUInteger)retainCount \
58 | { \
59 | return NSUIntegerMax; \
60 | } \
61 | \
62 | - (void)release \
63 | { \
64 | } \
65 | \
66 | - (id)autorelease \
67 | { \
68 | return self; \
69 | }
70 |
--------------------------------------------------------------------------------
/License:
--------------------------------------------------------------------------------
1 | `License`
2 | Copyright (c) 2012, Alex Restrepo - KZLabs
3 | All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | 1. Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 | 2. Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 |
--------------------------------------------------------------------------------
/MainWindow.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 784
5 | 10A394
6 | 732
7 | 1027.1
8 | 430.00
9 |
13 |
17 |
21 |
30 |
31 | YES
32 |
33 | IBFilesOwner
34 |
35 |
36 | IBFirstResponder
37 |
38 |
39 |
40 |
41 | 1316
42 |
43 | {320, 480}
44 |
45 | 1
46 | MSAxIDEAA
47 |
48 | NO
49 | NO
50 |
51 |
52 |
53 |
54 |
55 |
56 | 256
57 | {0, 0}
58 | NO
59 | YES
60 | YES
61 |
62 |
63 | YES
64 |
65 |
66 |
67 |
68 |
69 | RootViewController
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 | YES
78 |
79 |
80 | delegate
81 |
82 |
83 |
84 | 4
85 |
86 |
87 |
88 | window
89 |
90 |
91 |
92 | 5
93 |
94 |
95 |
96 | navigationController
97 |
98 |
99 |
100 | 15
101 |
102 |
103 |
104 |
105 | YES
106 |
107 | 0
108 |
109 |
110 |
111 |
112 |
113 | 2
114 |
115 |
116 | YES
117 |
118 |
119 |
120 |
121 | -1
122 |
123 |
124 | File's Owner
125 |
126 |
127 | 3
128 |
129 |
130 |
131 |
132 | -2
133 |
134 |
135 |
136 |
137 | 9
138 |
139 |
140 | YES
141 |
142 |
143 |
144 |
145 |
146 |
147 | 11
148 |
149 |
150 |
151 |
152 | 13
153 |
154 |
155 | YES
156 |
157 |
158 |
159 |
160 |
161 | 14
162 |
163 |
164 |
165 |
166 |
167 |
168 | YES
169 |
170 | YES
171 | -1.CustomClassName
172 | -2.CustomClassName
173 | 11.IBPluginDependency
174 | 13.CustomClassName
175 | 13.IBPluginDependency
176 | 2.IBAttributePlaceholdersKey
177 | 2.IBEditorWindowLastContentRect
178 | 2.IBPluginDependency
179 | 3.CustomClassName
180 | 3.IBPluginDependency
181 | 9.IBEditorWindowLastContentRect
182 | 9.IBPluginDependency
183 |
184 |
185 | YES
186 | UIApplication
187 | UIResponder
188 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
189 | RootViewController
190 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
191 |
192 | YES
193 |
194 |
195 | YES
196 |
197 |
198 | {{673, 376}, {320, 480}}
199 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
200 | AudioSampleAppDelegate
201 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
202 | {{500, 343}, {320, 480}}
203 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
204 |
205 |
206 |
207 | YES
208 |
209 |
210 | YES
211 |
212 |
213 |
214 |
215 | YES
216 |
217 |
218 | YES
219 |
220 |
221 |
222 | 15
223 |
224 |
225 |
226 | YES
227 |
228 | RootViewController
229 | UITableViewController
230 |
231 | IBProjectSource
232 | Classes/RootViewController.h
233 |
234 |
235 |
236 | AudioSampleAppDelegate
237 | NSObject
238 |
239 | YES
240 |
241 | YES
242 | navigationController
243 | window
244 |
245 |
246 | YES
247 | UINavigationController
248 | UIWindow
249 |
250 |
251 |
252 | IBProjectSource
253 | Classes/AudioSampleAppDelegate.h
254 |
255 |
256 |
257 |
258 | 0
259 |
260 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3
261 |
262 |
263 | YES
264 | AudioSample.xcodeproj
265 | 3
266 | 3.1
267 |
268 |
269 |
--------------------------------------------------------------------------------
/Readme.markdown:
--------------------------------------------------------------------------------
1 | # Sound Engine
2 | ## An OpenAL based sound engine that allows you to play one background audio track, and multiple simultaneous sound effects.
3 |
4 | This sound engine was born out of a simple OpenAL tutorial, available [here](http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/).
5 | Since then it has been featured online in a couple of [different](http://www.raywenderlich.com/259/audio-101-for-iphone-developers-playing-audio-programmatically) [sites](http://www.musicalgeometry.com/?p=912). There's also an ARC conversion available [here](https://github.com/kernelpanick/SoundEngine).
6 |
7 | Current Version: 1.1
8 |
9 | Version History:
10 | 1.0 Initial Release
11 | 1.1 Fixed a bug with changing the pitch of multiple simultaneous sounds. 11/9/09
12 |
13 | 
14 |
15 | `License`
16 | Copyright (c) 2012, Alex Restrepo - KZLabs
17 | All rights reserved.
18 |
19 | Redistribution and use in source and binary forms, with or without
20 | modification, are permitted provided that the following conditions are met:
21 |
22 | 1. Redistributions of source code must retain the above copyright notice, this
23 | list of conditions and the following disclaimer.
24 | 2. Redistributions in binary form must reproduce the above copyright notice,
25 | this list of conditions and the following disclaimer in the documentation
26 | and/or other materials provided with the distribution.
27 |
28 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
29 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
30 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
31 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
32 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
33 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
34 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
35 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/RootViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 784
5 | 9L30
6 | 680
7 | 949.54
8 | 353.00
9 |
10 | YES
11 |
12 |
13 |
14 | YES
15 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
16 |
17 |
18 | YES
19 |
20 | YES
21 |
22 |
23 | YES
24 |
25 |
26 |
27 | YES
28 |
29 | IBFilesOwner
30 |
31 |
32 | IBFirstResponder
33 |
34 |
35 |
36 | 274
37 | {320, 247}
38 |
39 | NO
40 | YES
41 | NO
42 | NO
43 | 1
44 | 1
45 | 0
46 | YES
47 | 4.400000e+01
48 | 1.000000e+01
49 | 1.000000e+01
50 |
51 |
52 |
53 |
54 | YES
55 |
56 |
57 | view
58 |
59 |
60 |
61 | 3
62 |
63 |
64 |
65 | dataSource
66 |
67 |
68 |
69 | 4
70 |
71 |
72 |
73 | delegate
74 |
75 |
76 |
77 | 5
78 |
79 |
80 |
81 |
82 | YES
83 |
84 | 0
85 |
86 | YES
87 |
88 |
89 |
90 |
91 |
92 | -1
93 |
94 |
95 | RmlsZSdzIE93bmVyA
96 |
97 |
98 | -2
99 |
100 |
101 |
102 |
103 | 2
104 |
105 |
106 |
107 |
108 |
109 |
110 | YES
111 |
112 | YES
113 | -1.CustomClassName
114 | -2.CustomClassName
115 | 2.IBEditorWindowLastContentRect
116 | 2.IBPluginDependency
117 |
118 |
119 | YES
120 | RootViewController
121 | UIResponder
122 | {{0, 598}, {320, 247}}
123 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin
124 |
125 |
126 |
127 | YES
128 |
129 | YES
130 |
131 |
132 | YES
133 |
134 |
135 |
136 |
137 | YES
138 |
139 | YES
140 |
141 |
142 | YES
143 |
144 |
145 |
146 | 5
147 |
148 |
149 |
150 | YES
151 |
152 | RootViewController
153 | UITableViewController
154 |
155 | IBProjectSource
156 | Classes/RootViewController.h
157 |
158 |
159 |
160 |
161 | 0
162 | AudioSample.xcodeproj
163 | 3
164 | 3.1
165 |
166 |
167 |
--------------------------------------------------------------------------------
/Start.caf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alexrestrepo/SoundEngine/95539cb9e38afdbbe0a6c8020c25d34395586d20/Start.caf
--------------------------------------------------------------------------------
/backgroundLoop.m4a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alexrestrepo/SoundEngine/95539cb9e38afdbbe0a6c8020c25d34395586d20/backgroundLoop.m4a
--------------------------------------------------------------------------------
/engine.caf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alexrestrepo/SoundEngine/95539cb9e38afdbbe0a6c8020c25d34395586d20/engine.caf
--------------------------------------------------------------------------------
/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // AudioSample
4 | //
5 | // Created by Alex Restrepo on 9/14/09.
6 | // Copyright Brainchild 2009. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | int main(int argc, char *argv[]) {
12 |
13 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
14 | int retVal = UIApplicationMain(argc, argv, nil, nil);
15 | [pool release];
16 | return retVal;
17 | }
18 |
--------------------------------------------------------------------------------
/screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alexrestrepo/SoundEngine/95539cb9e38afdbbe0a6c8020c25d34395586d20/screen.png
--------------------------------------------------------------------------------
/volumedown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alexrestrepo/SoundEngine/95539cb9e38afdbbe0a6c8020c25d34395586d20/volumedown.png
--------------------------------------------------------------------------------
/volumeup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alexrestrepo/SoundEngine/95539cb9e38afdbbe0a6c8020c25d34395586d20/volumeup.png
--------------------------------------------------------------------------------