Repository: applidium/AudioModem
Branch: master
Commit: 97e6bc49be05
Files: 19
Total size: 69.1 KB
Directory structure:
gitextract_tenta55x/
├── .gitignore
├── AMMainWindow.xib
├── AudioModem-Info.plist
├── AudioModem-Prefix.pch
├── AudioModem.xcodeproj/
│ └── project.pbxproj
├── Classes/
│ ├── AMAppDelegate.h
│ ├── AMAppDelegate.m
│ ├── AMPlayer.h
│ ├── AMPlayer.m
│ ├── AMRecorder.h
│ ├── AMRecorder.m
│ ├── AudioModem.h
│ ├── AudioModem_Development.h
│ ├── AudioModem_Production.h
│ └── AudioModem_Staging.h
├── LICENSE
├── Modules/
│ ├── ADSharedMacros.h
│ └── ADVersionInfo/
│ └── ADVersionInfo.m
└── main.m
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.DS_Store
*.xcodeproj/*.pbxuser
*.xcodeproj/*.mode1v3
*.xcodeproj/*.perspectivev3
*.xcodeproj/project.xcworkspace/
*.xcodeproj/xcuserdata/
build
================================================
FILE: AMMainWindow.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1552</int>
<string key="IBDocument.SystemVersion">12C60</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.34</string>
<string key="IBDocument.HIToolboxVersion">625.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">2083</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIButton</string>
<string>IBUICustomObject</string>
<string>IBUITextView</string>
<string>IBUIView</string>
<string>IBUIViewController</string>
<string>IBUIWindow</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBProxyObject" id="590933970">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUICustomObject" id="337346416">
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIWindow" id="380026005">
<reference key="NSNextResponder"/>
<int key="NSvFlags">1316</int>
<object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
<object class="IBUIScreenMetrics" key="IBUISimulatedDestinationMetrics" id="695354263">
<string key="IBUISimulatedSizeMetricsClass">IBUIScreenMetrics</string>
<object class="NSMutableDictionary" key="IBUINormalizedOrientationToSizeMap">
<bool key="EncodedWithXMLCoder">YES</bool>
<array key="dict.sortedKeys">
<integer value="1"/>
<integer value="3"/>
</array>
<array key="dict.values">
<string>{320, 480}</string>
<string>{480, 320}</string>
</array>
</object>
<string key="IBUITargetRuntime">IBCocoaTouchFramework</string>
<string key="IBUIDisplayName">Retina 3.5 Full Screen</string>
<int key="IBUIType">0</int>
</object>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBUIResizesToFullScreen">YES</bool>
</object>
<object class="IBUICustomObject" id="612542479">
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUICustomObject" id="215005909">
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIViewController" id="967973032">
<object class="IBUIView" key="IBUIView" id="1027726488">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUIButton" id="720839814">
<reference key="NSNextResponder" ref="1027726488"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{40, 208}, {73, 44}}</string>
<reference key="NSSuperview" ref="1027726488"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1039190161"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<int key="IBUIButtonType">1</int>
<string key="IBUIHighlightedTitle">Playing</string>
<string key="IBUISelectedTitle">Playing</string>
<string key="IBUINormalTitle">Play</string>
<object class="NSColor" key="IBUIHighlightedTitleColor" id="106457403">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleShadowColor" id="32470747">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC41AA</bytes>
</object>
<object class="IBUIFontDescription" key="IBUIFontDescription" id="290200401">
<int key="type">2</int>
<double key="pointSize">15</double>
</object>
<object class="NSFont" key="IBUIFont" id="748975890">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">15</double>
<int key="NSfFlags">16</int>
</object>
</object>
<object class="IBUIButton" id="1039190161">
<reference key="NSNextResponder" ref="1027726488"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{207, 208}, {73, 44}}</string>
<reference key="NSSuperview" ref="1027726488"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="799487777"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<int key="IBUIButtonType">1</int>
<string key="IBUINormalTitle">Record</string>
<reference key="IBUIHighlightedTitleColor" ref="106457403"/>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
</object>
<reference key="IBUINormalTitleShadowColor" ref="32470747"/>
<reference key="IBUIFontDescription" ref="290200401"/>
<reference key="IBUIFont" ref="748975890"/>
</object>
<object class="IBUITextView" id="690099892">
<reference key="NSNextResponder" ref="1027726488"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{40, 49}, {240, 128}}</string>
<reference key="NSSuperview" ref="1027726488"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="720839814"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC44MDAwMDAwMTE5IDAuODAwMDAwMDExOSAwLjgwMDAwMDAxMTkAA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<bool key="IBUIMultipleTouchEnabled">YES</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBUIBounces">NO</bool>
<bool key="IBUIScrollEnabled">NO</bool>
<bool key="IBUIShowsHorizontalScrollIndicator">NO</bool>
<bool key="IBUIShowsVerticalScrollIndicator">NO</bool>
<string key="IBUIText">Hello world!</string>
<object class="IBUITextInputTraits" key="IBUITextInputTraits">
<int key="IBUIAutocapitalizationType">2</int>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIFontDescription" key="IBUIFontDescription" id="116707777">
<int key="type">1</int>
<double key="pointSize">14</double>
</object>
<object class="NSFont" key="IBUIFont" id="448933358">
<string key="NSName">Helvetica</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
</object>
<object class="IBUITextView" id="799487777">
<reference key="NSNextResponder" ref="1027726488"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{40, 281}, {240, 128}}</string>
<reference key="NSSuperview" ref="1027726488"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC44MDAwMDAwMTE5IDAuODAwMDAwMDExOSAwLjgwMDAwMDAxMTkAA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<bool key="IBUIMultipleTouchEnabled">YES</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBUIBounces">NO</bool>
<bool key="IBUIScrollEnabled">NO</bool>
<bool key="IBUIShowsHorizontalScrollIndicator">NO</bool>
<bool key="IBUIShowsVerticalScrollIndicator">NO</bool>
<bool key="IBUIEditable">NO</bool>
<string key="IBUIText"/>
<object class="IBUITextInputTraits" key="IBUITextInputTraits">
<int key="IBUIAutocapitalizationType">2</int>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<reference key="IBUIFontDescription" ref="116707777"/>
<reference key="IBUIFont" ref="448933358"/>
</object>
</array>
<string key="NSFrame">{{0, 20}, {320, 460}}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="690099892"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
<int key="IBUIInterfaceOrientation">1</int>
<int key="interfaceOrientation">1</int>
</object>
<reference key="IBUISimulatedDestinationMetrics" ref="695354263"/>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBUIHorizontal">NO</bool>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="337346416"/>
</object>
<int key="connectionID">4</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">rootViewController</string>
<reference key="source" ref="380026005"/>
<reference key="destination" ref="967973032"/>
</object>
<int key="connectionID">8</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="337346416"/>
<reference key="destination" ref="380026005"/>
</object>
<int key="connectionID">5</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">dismissKeyboard:</string>
<reference key="source" ref="1027726488"/>
<reference key="destination" ref="337346416"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">22</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">playMessage:</string>
<reference key="source" ref="720839814"/>
<reference key="destination" ref="612542479"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">12</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">recordMessage:</string>
<reference key="source" ref="1039190161"/>
<reference key="destination" ref="215005909"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">17</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">messageTextView</string>
<reference key="source" ref="612542479"/>
<reference key="destination" ref="690099892"/>
</object>
<int key="connectionID">15</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">playButton</string>
<reference key="source" ref="612542479"/>
<reference key="destination" ref="720839814"/>
</object>
<int key="connectionID">21</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">recordButton</string>
<reference key="source" ref="612542479"/>
<reference key="destination" ref="1039190161"/>
</object>
<int key="connectionID">23</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">recordButton</string>
<reference key="source" ref="215005909"/>
<reference key="destination" ref="1039190161"/>
</object>
<int key="connectionID">18</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">receiverTextView</string>
<reference key="source" ref="215005909"/>
<reference key="destination" ref="799487777"/>
</object>
<int key="connectionID">20</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">playButton</string>
<reference key="source" ref="215005909"/>
<reference key="destination" ref="720839814"/>
</object>
<int key="connectionID">24</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="380026005"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="590933970"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">3</int>
<reference key="object" ref="337346416"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">6</int>
<reference key="object" ref="967973032"/>
<array class="NSMutableArray" key="children">
<reference ref="1027726488"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">7</int>
<reference key="object" ref="1027726488"/>
<array class="NSMutableArray" key="children">
<reference ref="1039190161"/>
<reference ref="720839814"/>
<reference ref="690099892"/>
<reference ref="799487777"/>
</array>
<reference key="parent" ref="967973032"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">9</int>
<reference key="object" ref="720839814"/>
<reference key="parent" ref="1027726488"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10</int>
<reference key="object" ref="1039190161"/>
<reference key="parent" ref="1027726488"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">11</int>
<reference key="object" ref="612542479"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">13</int>
<reference key="object" ref="215005909"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">14</int>
<reference key="object" ref="690099892"/>
<reference key="parent" ref="1027726488"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">19</int>
<reference key="object" ref="799487777"/>
<reference key="parent" ref="1027726488"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.CustomClassName">UIApplication</string>
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="-2.CustomClassName">UIResponder</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="11.CustomClassName">AMPlayer</string>
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="13.CustomClassName">AMRecorder</string>
<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<dictionary class="NSMutableDictionary" key="2.IBAttributePlaceholdersKey"/>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="3.CustomClassName">AMAppDelegate</string>
<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="7.CustomClassName">UIControl</string>
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<real value="1" key="9.IBUIButtonInspectorSelectedStateConfigurationMetadataKey"/>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">24</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">AMAppDelegate</string>
<string key="superclassName">UIResponder</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">dismissKeyboard:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">dismissKeyboard:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">dismissKeyboard:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">window</string>
<string key="NS.object.0">UIWindow</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">window</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">window</string>
<string key="candidateClassName">UIWindow</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/AMAppDelegate.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">AMPlayer</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">playMessage:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">playMessage:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">playMessage:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="messageTextView">UITextView</string>
<string key="playButton">UIButton</string>
<string key="recordButton">UIButton</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="messageTextView">
<string key="name">messageTextView</string>
<string key="candidateClassName">UITextView</string>
</object>
<object class="IBToOneOutletInfo" key="playButton">
<string key="name">playButton</string>
<string key="candidateClassName">UIButton</string>
</object>
<object class="IBToOneOutletInfo" key="recordButton">
<string key="name">recordButton</string>
<string key="candidateClassName">UIButton</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/AMPlayer.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">AMRecorder</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">recordMessage:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">recordMessage:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">recordMessage:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="playButton">UIButton</string>
<string key="receiverTextView">UITextView</string>
<string key="recordButton">UIButton</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="playButton">
<string key="name">playButton</string>
<string key="candidateClassName">UIButton</string>
</object>
<object class="IBToOneOutletInfo" key="receiverTextView">
<string key="name">receiverTextView</string>
<string key="candidateClassName">UITextView</string>
</object>
<object class="IBToOneOutletInfo" key="recordButton">
<string key="name">recordButton</string>
<string key="candidateClassName">UIButton</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/AMRecorder.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">2083</string>
</data>
</archive>
================================================
FILE: AudioModem-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>fr</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.applidium.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSMainNibFile</key>
<string>AMMainWindow</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
</dict>
</plist>
================================================
FILE: AudioModem-Prefix.pch
================================================
//
// Prefix header for all source files of the 'AudioQueueTest' target in the 'AudioQueueTest' project
//
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
#import "AudioModem.h"
#import "ADSharedMacros.h"
================================================
FILE: AudioModem.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
3C36C80816D6944700A94ADA /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C36C80716D6944700A94ADA /* Accelerate.framework */; };
3C3D270316A0284C00CEC756 /* AMRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D270216A0284C00CEC756 /* AMRecorder.m */; };
3C3D270616A0444200CEC756 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C3D270516A0444200CEC756 /* AudioToolbox.framework */; };
3C3D270D16A06A6700CEC756 /* AMPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D270C16A06A6700CEC756 /* AMPlayer.m */; };
3C75C6C416B68E4100F85EC3 /* AMMainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3C75C6C316B68E4100F85EC3 /* AMMainWindow.xib */; };
7A0EC6541535D8ED00E5F54A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A0EC6531535D8ED00E5F54A /* UIKit.framework */; };
7A0EC6561535D8ED00E5F54A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A0EC6551535D8ED00E5F54A /* Foundation.framework */; };
7A0EC6581535D8ED00E5F54A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A0EC6571535D8ED00E5F54A /* CoreGraphics.framework */; };
7A189F8A1535FB5300A22149 /* AMAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A189F861535FB5300A22149 /* AMAppDelegate.m */; };
7A189F931535FD5C00A22149 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A189F901535FD5C00A22149 /* main.m */; };
7AFC5ED4155AA37F009D92A7 /* ADVersionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFC5ED3155AA37F009D92A7 /* ADVersionInfo.m */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3C36C80716D6944700A94ADA /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
3C3CAE8F16DCC30400B5E98C /* AudioModem-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AudioModem-Info.plist"; sourceTree = SOURCE_ROOT; };
3C3CAE9016DCC30400B5E98C /* AudioModem-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AudioModem-Prefix.pch"; sourceTree = SOURCE_ROOT; };
3C3D270116A0284C00CEC756 /* AMRecorder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AMRecorder.h; sourceTree = "<group>"; };
3C3D270216A0284C00CEC756 /* AMRecorder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AMRecorder.m; sourceTree = "<group>"; };
3C3D270516A0444200CEC756 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
3C3D270B16A06A6700CEC756 /* AMPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AMPlayer.h; sourceTree = "<group>"; };
3C3D270C16A06A6700CEC756 /* AMPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AMPlayer.m; sourceTree = "<group>"; };
3C75C6C316B68E4100F85EC3 /* AMMainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AMMainWindow.xib; sourceTree = SOURCE_ROOT; };
6F3B917C1589E79C00806754 /* ADSharedMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ADSharedMacros.h; path = Modules/ADSharedMacros.h; sourceTree = SOURCE_ROOT; };
7A0EC64F1535D8ED00E5F54A /* AudioModem.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioModem.app; sourceTree = BUILT_PRODUCTS_DIR; };
7A0EC6531535D8ED00E5F54A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
7A0EC6551535D8ED00E5F54A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
7A0EC6571535D8ED00E5F54A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
7A189F851535FB5300A22149 /* AMAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AMAppDelegate.h; sourceTree = "<group>"; };
7A189F861535FB5300A22149 /* AMAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AMAppDelegate.m; sourceTree = "<group>"; };
7A189F901535FD5C00A22149 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
7A6BEEF9153700A30075E2A7 /* AudioModem_Development.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioModem_Development.h; sourceTree = "<group>"; };
7A6BEEFA153700C30075E2A7 /* AudioModem_Staging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioModem_Staging.h; sourceTree = "<group>"; };
7A6BEEFB153700CF0075E2A7 /* AudioModem_Production.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioModem_Production.h; sourceTree = "<group>"; };
7ABC1627153612960039E546 /* AudioModem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioModem.h; sourceTree = "<group>"; };
7AFC5ED3155AA37F009D92A7 /* ADVersionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADVersionInfo.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
7A0EC64C1535D8ED00E5F54A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3C36C80816D6944700A94ADA /* Accelerate.framework in Frameworks */,
3C3D270616A0444200CEC756 /* AudioToolbox.framework in Frameworks */,
7A0EC6541535D8ED00E5F54A /* UIKit.framework in Frameworks */,
7A0EC6561535D8ED00E5F54A /* Foundation.framework in Frameworks */,
7A0EC6581535D8ED00E5F54A /* CoreGraphics.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
7A0EC6441535D8ED00E5F54A = {
isa = PBXGroup;
children = (
7A189F7F1535FB5300A22149 /* Classes */,
7AFC5ED1155AA37F009D92A7 /* Modules */,
7A189F8F1535FD0D00A22149 /* Other Sources */,
7A189F951535FD6800A22149 /* Resources */,
7A0EC6521535D8ED00E5F54A /* Frameworks */,
7A0EC6501535D8ED00E5F54A /* Products */,
);
sourceTree = "<group>";
};
7A0EC6501535D8ED00E5F54A /* Products */ = {
isa = PBXGroup;
children = (
7A0EC64F1535D8ED00E5F54A /* AudioModem.app */,
);
name = Products;
sourceTree = "<group>";
};
7A0EC6521535D8ED00E5F54A /* Frameworks */ = {
isa = PBXGroup;
children = (
3C36C80716D6944700A94ADA /* Accelerate.framework */,
3C3D270516A0444200CEC756 /* AudioToolbox.framework */,
7A0EC6531535D8ED00E5F54A /* UIKit.framework */,
7A0EC6551535D8ED00E5F54A /* Foundation.framework */,
7A0EC6571535D8ED00E5F54A /* CoreGraphics.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
7A189F7F1535FB5300A22149 /* Classes */ = {
isa = PBXGroup;
children = (
7ABC1627153612960039E546 /* AudioModem.h */,
7A6BEEF9153700A30075E2A7 /* AudioModem_Development.h */,
7A6BEEFA153700C30075E2A7 /* AudioModem_Staging.h */,
7A6BEEFB153700CF0075E2A7 /* AudioModem_Production.h */,
7A189F851535FB5300A22149 /* AMAppDelegate.h */,
7A189F861535FB5300A22149 /* AMAppDelegate.m */,
3C3D270116A0284C00CEC756 /* AMRecorder.h */,
3C3D270216A0284C00CEC756 /* AMRecorder.m */,
3C3D270B16A06A6700CEC756 /* AMPlayer.h */,
3C3D270C16A06A6700CEC756 /* AMPlayer.m */,
);
path = Classes;
sourceTree = "<group>";
};
7A189F8F1535FD0D00A22149 /* Other Sources */ = {
isa = PBXGroup;
children = (
7A189F901535FD5C00A22149 /* main.m */,
3C3CAE9016DCC30400B5E98C /* AudioModem-Prefix.pch */,
);
name = "Other Sources";
path = AudioQueueTest;
sourceTree = "<group>";
};
7A189F951535FD6800A22149 /* Resources */ = {
isa = PBXGroup;
children = (
3C3CAE8F16DCC30400B5E98C /* AudioModem-Info.plist */,
3C75C6C316B68E4100F85EC3 /* AMMainWindow.xib */,
);
name = Resources;
path = AudioQueueTest;
sourceTree = "<group>";
};
7AFC5ED1155AA37F009D92A7 /* Modules */ = {
isa = PBXGroup;
children = (
6F3B917C1589E79C00806754 /* ADSharedMacros.h */,
7AFC5ED2155AA37F009D92A7 /* ADVersionInfo */,
);
path = Modules;
sourceTree = "<group>";
};
7AFC5ED2155AA37F009D92A7 /* ADVersionInfo */ = {
isa = PBXGroup;
children = (
7AFC5ED3155AA37F009D92A7 /* ADVersionInfo.m */,
);
path = ADVersionInfo;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
7A0EC64E1535D8ED00E5F54A /* AudioModem */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7A0EC6671535D8ED00E5F54A /* Build configuration list for PBXNativeTarget "AudioModem" */;
buildPhases = (
7A0EC66A1535D91400E5F54A /* Inject git informations in Info.plist */,
7A0EC64B1535D8ED00E5F54A /* Sources */,
7A0EC64C1535D8ED00E5F54A /* Frameworks */,
7A0EC64D1535D8ED00E5F54A /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = AudioModem;
productName = AudioQueueTest;
productReference = 7A0EC64F1535D8ED00E5F54A /* AudioModem.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
7A0EC6461535D8ED00E5F54A /* Project object */ = {
isa = PBXProject;
attributes = {
CLASSPREFIX = AM;
LastUpgradeCheck = 0460;
};
buildConfigurationList = 7A0EC6491535D8ED00E5F54A /* Build configuration list for PBXProject "AudioModem" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 7A0EC6441535D8ED00E5F54A;
productRefGroup = 7A0EC6501535D8ED00E5F54A /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
7A0EC64E1535D8ED00E5F54A /* AudioModem */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
7A0EC64D1535D8ED00E5F54A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3C75C6C416B68E4100F85EC3 /* AMMainWindow.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
7A0EC66A1535D91400E5F54A /* Inject git informations in Info.plist */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Inject git informations in Info.plist";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "GIT_COMMIT=`git rev-parse --short HEAD`\nGIT_BRANCH=`git symbolic-ref HEAD`\nGIT_STATUS=`git status --porcelain -z`\n/usr/libexec/PlistBuddy -c \"Delete :CFBundleGitCommit\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\" >/dev/null 2>&1\n/usr/libexec/PlistBuddy -c \"Delete :CFBundleGitBranch\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\" >/dev/null 2>&1\n/usr/libexec/PlistBuddy -c \"Delete :CFBundleGitStatus\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\" >/dev/null 2>&1\nif [ -n \"$GIT_COMMIT\" ]; then\n /usr/libexec/PlistBuddy -c \"Add :CFBundleGitCommit string \\\"${GIT_COMMIT}\\\"\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\nfi\nif [ -n \"$GIT_BRANCH\" ]; then\n /usr/libexec/PlistBuddy -c \"Add :CFBundleGitBranch string \\\"${GIT_BRANCH}\\\"\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\nfi\nif [ -n \"$GIT_STATUS\" ]; then\n /usr/libexec/PlistBuddy -c \"Add :CFBundleGitStatus string \\\"${GIT_STATUS}\\\"\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\nfi";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
7A0EC64B1535D8ED00E5F54A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7A189F8A1535FB5300A22149 /* AMAppDelegate.m in Sources */,
7A189F931535FD5C00A22149 /* main.m in Sources */,
7AFC5ED4155AA37F009D92A7 /* ADVersionInfo.m in Sources */,
3C3D270316A0284C00CEC756 /* AMRecorder.m in Sources */,
3C3D270D16A06A6700CEC756 /* AMPlayer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
7A0EC6651535D8ED00E5F54A /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = "CONFIGURATION=$(CONFIGURATION)";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
SDKROOT = iphoneos;
};
name = Development;
};
7A0EC6681535D8ED00E5F54A /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "AudioModem-Prefix.pch";
INFOPLIST_FILE = "$(SRCROOT)/AudioModem-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
PRODUCT_NAME = AudioModem;
WRAPPER_EXTENSION = app;
};
name = Development;
};
7A6BEEF51536FD400075E2A7 /* Staging */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = "CONFIGURATION=$(CONFIGURATION)";
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Staging;
};
7A6BEEF61536FD400075E2A7 /* Staging */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "AudioModem-Prefix.pch";
INFOPLIST_FILE = "$(SRCROOT)/AudioModem-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
PRODUCT_NAME = AudioModem;
WRAPPER_EXTENSION = app;
};
name = Staging;
};
7A6BEEF71536FE3D0075E2A7 /* Production */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = "CONFIGURATION=$(CONFIGURATION)";
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Production;
};
7A6BEEF81536FE3D0075E2A7 /* Production */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "AudioModem-Prefix.pch";
INFOPLIST_FILE = "$(SRCROOT)/AudioModem-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
PRODUCT_NAME = AudioModem;
WRAPPER_EXTENSION = app;
};
name = Production;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
7A0EC6491535D8ED00E5F54A /* Build configuration list for PBXProject "AudioModem" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7A0EC6651535D8ED00E5F54A /* Development */,
7A6BEEF51536FD400075E2A7 /* Staging */,
7A6BEEF71536FE3D0075E2A7 /* Production */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Production;
};
7A0EC6671535D8ED00E5F54A /* Build configuration list for PBXNativeTarget "AudioModem" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7A0EC6681535D8ED00E5F54A /* Development */,
7A6BEEF61536FD400075E2A7 /* Staging */,
7A6BEEF81536FE3D0075E2A7 /* Production */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Production;
};
/* End XCConfigurationList section */
};
rootObject = 7A0EC6461535D8ED00E5F54A /* Project object */;
}
================================================
FILE: Classes/AMAppDelegate.h
================================================
//
// AMAppDelegate.h
// AudioModem
//
// Created by Tarek Belkahia on 11/01/13.
// Copyright (c) 2013 Applidium. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AMRecorder.h"
#import "AMPlayer.h"
@interface AMAppDelegate : UIResponder <UIApplicationDelegate> {
AMRecorder * _recorder;
AMPlayer * _player;
}
@property (strong, nonatomic) IBOutlet UIWindow * window;
@end
================================================
FILE: Classes/AMAppDelegate.m
================================================
//
// AMAppDelegate.m
// AudioModem
//
// Created by Tarek Belkahia on 11/01/13.
// Copyright (c) 2013 Applidium. All rights reserved.
//
#import "AMAppDelegate.h"
#import "ADSharedMacros.h"
@implementation AMAppDelegate
@synthesize window = _window;
- (void)dealloc {
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window makeKeyAndVisible];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
- (IBAction)dismissKeyboard:(id)sender {
[_window.rootViewController.view endEditing:YES];
}
@end
================================================
FILE: Classes/AMPlayer.h
================================================
//
// AMPlayer.h
// AudioModem
//
// Created by Tarek Belkahia on 11/01/13.
//
//
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
#define kNumberBuffers 3
typedef struct {
AudioStreamBasicDescription mDataFormat;
AudioQueueRef mQueue;
AudioQueueBufferRef mBuffers[kNumberBuffers];
SInt64 mCurrentPacket;
UInt32 mNumPacketsToRead;
UInt32 bufferByteSize;
bool mIsRunning;
const char * mMessage;
UInt32 mMessageLength;
float mTheta;
id mSelf;
} AQPlayState;
@interface AMPlayer : NSObject
@property (nonatomic, assign) AQPlayState playState;
@property (retain, nonatomic) IBOutlet UIButton *recordButton;
@property (retain, nonatomic) IBOutlet UIButton *playButton;
@property (retain, nonatomic) IBOutlet UITextView *messageTextView;
- (IBAction)playMessage:(id)sender;
- (void)play:(NSString *)message;
@end
================================================
FILE: Classes/AMPlayer.m
================================================
//
// AMPlayer.m
// AudioModem
//
// Created by Tarek Belkahia on 11/01/13.
//
//
#import "AMPlayer.h"
static const unsigned char ParityTable256[256] =
{
# define P2(n) n, n^1, n^1, n
# define P4(n) P2(n), P2(n^1), P2(n^1), P2(n)
# define P6(n) P4(n), P4(n^1), P4(n^1), P4(n)
P6(0), P6(1), P6(1), P6(0)
};
static unsigned char barkerbin[BARKER_LEN] = {
0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0
};
void HandleOutputBuffer(void * inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer) {
AQPlayState * pPlayState = (AQPlayState *)inUserData;
if ( ! pPlayState->mIsRunning) {
return;
}
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
UInt32 numBytesToPlay = inBuffer->mAudioDataBytesCapacity;
UInt32 numPackets = numBytesToPlay/pPlayState->mDataFormat.mBytesPerPacket;
SInt16 * buffer = (SInt16 *)inBuffer->mAudioData;
printf("playing from : %1.5f (#%lld)\n", pPlayState->mCurrentPacket/(float)SR, pPlayState->mCurrentPacket);
printf("message length: %ld samples\n", pPlayState->mMessageLength);
for(long i = pPlayState->mCurrentPacket; i < pPlayState->mCurrentPacket + numPackets; i++) {
long idx = i % pPlayState->mMessageLength;
short encoding = pPlayState->mMessage[idx];
buffer[i-pPlayState->mCurrentPacket] = (SInt16) (sin(2 * M_PI * FREQ * i / SR) * SHRT_MAX * encoding);
}
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
inBuffer->mAudioDataByteSize = numPackets * 2;
AudioQueueEnqueueBuffer(pPlayState->mQueue, inBuffer, 0, NULL);
pPlayState->mCurrentPacket += numPackets;
}
@interface AMPlayer (Private)
- (void)_setupAudioFormat;
- (void)_deriveBufferSize:(Float64)seconds;
- (void)_encodeMessage:(NSString *)message;
@end
@implementation AMPlayer
- (void)dealloc {
AudioQueueDispose(_playState.mQueue, true);
[_messageTextView release];
[_playButton release];
[_recordButton release];
[super dealloc];
}
- (IBAction)playMessage:(id)sender {
if (_playState.mIsRunning) {
AudioQueueStop(_playState.mQueue, true);
_playState.mIsRunning = false;
_playButton.selected = NO;
_recordButton.enabled = YES;
} else {
printf("playing : \"%s\"\n", [_messageTextView.text cStringUsingEncoding:NSASCIIStringEncoding]);
[self play:_messageTextView.text];
_playButton.selected = YES;
_recordButton.enabled = NO;
}
}
- (void)play:(NSString *)message {
[self _setupAudioFormat];
_playState.mCurrentPacket = 0;
[self _encodeMessage:message];
[self _deriveBufferSize:1.0f];
OSStatus status = noErr;
status = AudioQueueNewOutput(&_playState.mDataFormat,
HandleOutputBuffer,
&_playState,
NULL,
NULL,
0,
&_playState.mQueue);
ADAssert(noErr == status, @"Could not create queue.");
_playState.mIsRunning = YES;
for (int i = 0; i < kNumberBuffers; i++) {
AudioQueueAllocateBuffer(_playState.mQueue, _playState.bufferByteSize, &_playState.mBuffers[i]);
HandleOutputBuffer(&_playState, _playState.mQueue, _playState.mBuffers[i]);
}
ADAssert(noErr == status, @"Could not allocate buffers.");
status = AudioQueueStart(_playState.mQueue, NULL);
ADAssert(noErr == status, @"Could not start playing.");
}
@end
@implementation AMPlayer (Private)
- (void)_setupAudioFormat {
_playState.mDataFormat.mFormatID = kAudioFormatLinearPCM;
_playState.mDataFormat.mSampleRate = 44100.0f;
_playState.mDataFormat.mBitsPerChannel = 16;
_playState.mDataFormat.mChannelsPerFrame = 1;
_playState.mDataFormat.mFramesPerPacket = 1;
_playState.mDataFormat.mBytesPerFrame = _playState.mDataFormat.mBytesPerPacket = _playState.mDataFormat.mChannelsPerFrame * sizeof(SInt16);
_playState.mDataFormat.mReserved = 0;
_playState.mDataFormat.mFormatFlags = kLinearPCMFormatFlagIsNonInterleaved | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked ;//| kLinearPCMFormatFlagIsBigEndian;
}
- (void)_deriveBufferSize:(Float64)seconds {
static const int maxBufferSize = 0x50000;
int maxPacketSize = _playState.mDataFormat.mBytesPerPacket;
if (maxPacketSize == 0) {
UInt32 maxVBRPacketSize = sizeof(maxPacketSize);
AudioQueueGetProperty(_playState.mQueue, kAudioQueueProperty_MaximumOutputPacketSize, &maxPacketSize, &maxVBRPacketSize);
}
Float64 numBytesForTime = round(_playState.mDataFormat.mSampleRate * maxPacketSize * seconds);
_playState.bufferByteSize = (UInt32) MIN(numBytesForTime, maxBufferSize);
}
- (void)_encodeMessage:(NSString *)message {
const char * str = [message cStringUsingEncoding:NSASCIIStringEncoding];
UInt32 length = message.length;
UInt32 encodedLength = length * 12 + BARKER_LEN + 1;
unsigned char * encodedMessage = (unsigned char *)calloc(encodedLength, sizeof(unsigned char));
char * bpsk = (char *)calloc(encodedLength * BIT_RATE, sizeof(char));
encodedMessage[0] = 1;
for (int i = 1; i < BARKER_LEN+1; i++) {
encodedMessage[i] = 1& ~(barkerbin[i-1] ^ encodedMessage[i-1]);
}
for (int i = BARKER_LEN+1; i < encodedLength; i++) {
switch ((i-BARKER_LEN-1)%12) {
case 0:
case 10:
case 11:
encodedMessage[i] = 1& ~(0 ^ encodedMessage[i-1]);
break;
case 9:
encodedMessage[i] = 1& ~(ParityTable256[str[(i-BARKER_LEN-1)/12]] ^ encodedMessage[i-1]);
break;
default:
encodedMessage[i] = 1& ~((((unsigned char)str[(i-BARKER_LEN-1)/12] >> (8-((i-BARKER_LEN-1)%12)) & 0x01)) ^ encodedMessage[i-1]);
break;
}
}
#ifdef SHOW_ENCODED
for (int i = 0; i < encodedLength; i++) {
printf("%d", encodedMessage[i]);
}
printf("\n");
#endif
for (int i = 0; i < encodedLength; i++) {
for (int j = 0; j < SAMPLE_PER_BIT; j++) {
bpsk[i*SAMPLE_PER_BIT+j] = 2* encodedMessage[i] - 1;
}
}
#ifdef SHOW_BASEBAND
for (int i = 0; i < SAMPLE_PER_BIT * encodedLength; i++) {
printf("%+d\n", bpsk[i]);
}
#endif
_playState.mMessageLength = encodedLength * SAMPLE_PER_BIT;
_playState.mMessage = bpsk;
}
@end
================================================
FILE: Classes/AMRecorder.h
================================================
//
// AMRecorder.h
// AudioModem
//
// Created by Tarek Belkahia on 11/01/13.
//
//
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
#include <limits.h>
#include <Accelerate/Accelerate.h>
typedef struct {
id mSelf;
AudioStreamBasicDescription mDataFormat;
AudioQueueRef mQueue;
AudioQueueBufferRef mBuffers[kNumberBuffers];
UInt32 bufferByteSize;
SInt64 mCurrentPacket;
bool mIsRunning;
} AQRecordState;
@interface AMRecorder : NSObject
@property (nonatomic, assign) AQRecordState recordState;
@property (retain, nonatomic) IBOutlet UIButton *playButton;
@property (retain, nonatomic) IBOutlet UIButton *recordButton;
@property (retain, nonatomic) IBOutlet UITextView *receiverTextView;
- (IBAction)recordMessage:(id)sender;
- (void)startRecording;
- (void)stopRecording;
- (void)updateTextView;
@end
================================================
FILE: Classes/AMRecorder.m
================================================
//
// AMRecorder.m
// AudioModem
//
// Created by Tarek Belkahia on 11/01/13.
//
//
#import "AMRecorder.h"
static const bool ParityTable256[256] =
{
# define P2(n) n, n^1, n^1, n
# define P4(n) P2(n), P2(n^1), P2(n^1), P2(n)
# define P6(n) P4(n), P4(n^1), P4(n^1), P4(n)
P6(0), P6(1), P6(1), P6(0)
};
static float bpf[SAMPLE_PER_BIT+1] = {
+0.0055491, -0.0060955, +0.0066066, -0.0061506, +0.0033972, +0.0028618,
-0.0130922, +0.0265188, -0.0409498, +0.0530505, -0.0590496, +0.0557252,
-0.0414030, +0.0166718, +0.0154256, -0.0498328, +0.0804827, -0.1016295,
+0.1091734, -0.1016295, +0.0804827, -0.0498328, +0.0154256, +0.0166718,
-0.0414030, +0.0557252, -0.0590496, +0.0530505, -0.0409498, +0.0265188,
-0.0130922, +0.0028618, +0.0033972, -0.0061506, +0.0066066, -0.0060955,
+0.0055491
};
static float lpf[SAMPLE_PER_BIT+1] = {
0.0025649, 0.0029793, 0.0039200, 0.0054457, 0.0075875, 0.0103454,
0.0136865, 0.0175452, 0.0218251, 0.0264022, 0.0311308, 0.0358496,
0.0403893, 0.0445807, 0.0482632, 0.0512926, 0.0535482, 0.0549392,
0.0554092, 0.0549392, 0.0535482, 0.0512926, 0.0482632, 0.0445807,
0.0403893, 0.0358496, 0.0311308, 0.0264022, 0.0218251, 0.0175452,
0.0136865, 0.0103454, 0.0075875, 0.0054457, 0.0039200, 0.0029793,
0.0025649
};
static float barkerbin[BARKER_LEN] = {
+1.0f, +1.0f, +1.0f, +1.0f, +1.0f, -1.0f, -1.0f, +1.0f, +1.0f, -1.0f, +1.0f, -1.0f, +1.0f
};
static char strbuf[BIT_RATE] = {'\n'};
static float * barker;
static float * fBuffer;
static float * integral;
static float * corr;
void initReceiver(void) {
long bufSize = SR;
fBuffer = (float *)calloc(bufSize, sizeof(float));
integral = (float *)calloc(bufSize/SAMPLE_PER_BIT, sizeof(float));
corr = (float *)calloc(bufSize + BARKER_LEN*SAMPLE_PER_BIT, sizeof(float));
barker = (float *)calloc(BARKER_LEN*SAMPLE_PER_BIT, sizeof(float));
for (int i = 0; i < BARKER_LEN; i++) {
vDSP_vfill(barkerbin+i, barker+i*SAMPLE_PER_BIT, 1, SAMPLE_PER_BIT);
}
}
void HandleInputBuffer(void * inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp * inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription * inPacketDesc) {
AQRecordState * pRecordState = (AQRecordState *)inUserData;
if (inNumPackets == 0 && pRecordState->mDataFormat.mBytesPerPacket != 0) {
inNumPackets = inBuffer->mAudioDataByteSize / pRecordState->mDataFormat.mBytesPerPacket;
}
if ( ! pRecordState->mIsRunning) {
return;
}
long sampleStart = pRecordState->mCurrentPacket;
long sampleEnd = pRecordState->mCurrentPacket + inBuffer->mAudioDataByteSize / pRecordState->mDataFormat.mBytesPerPacket - 1;
printf("buffer received : %1.6f from %1.6f (#%07ld) to %1.6f (#%07ld)\n", (sampleEnd - sampleStart + 1)/44100.0, sampleStart/44100.0, sampleStart, sampleEnd/44100.0, sampleEnd);
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
short * samples = (short *)inBuffer->mAudioData;
long nsamples = sampleEnd - sampleStart + 1;
bool found = NO;
// Convert to float
for (long i = 0; i < nsamples; i++) {
fBuffer[i] = samples[i] / (float)SHRT_MAX;
}
// BPF
vDSP_desamp(fBuffer, 1, bpf, fBuffer, nsamples, SAMPLE_PER_BIT+1);
// Carrier present ?
float m = 1.0f, max = 0.0f, mean = 0.0f;
vDSP_meamgv(fBuffer, 1, &mean, nsamples);
printf("mean %1.9f\n", mean);
if (mean > 10e-5) {
max = mean;
vDSP_maxmgv(fBuffer, 1, &max, nsamples);
printf("max %1.9f\n", max);
printf("max/mean %1.9f\n", max/mean);
// Delay Multiply
vDSP_vmul(fBuffer, 1, fBuffer+SAMPLE_PER_BIT, 1, fBuffer, 1, nsamples-SAMPLE_PER_BIT);
// LPF
vDSP_desamp(fBuffer, 1, lpf, fBuffer, nsamples, SAMPLE_PER_BIT+1);
// Time sync
m = 1/max;
vDSP_vsmul(barker, 1, &m, barker, 1, BARKER_LEN*SAMPLE_PER_BIT);
#define FILTERS_DELAY (BARKER_LEN+2)*SAMPLE_PER_BIT
vDSP_conv(fBuffer, 1, barker, 1, corr, 1, nsamples-FILTERS_DELAY, BARKER_LEN*SAMPLE_PER_BIT);
#ifdef SHOW_CORR
for (long i = 0; i < nsamples-FILTERS_DELAY; i++) {
printf("%+1.8f\n", corr[i]);
}
#endif
float cc = -1.0f;
unsigned long cci = 0;
vDSP_vsmul(corr, 1, &cc, corr, 1, nsamples-FILTERS_DELAY);
vDSP_maxv(corr, 1, &cc, nsamples-FILTERS_DELAY);
cc *= CORR_MAX_COEFF;
vDSP_vthrsc(corr, 1, &cc, &cc, corr, 1, nsamples-FILTERS_DELAY);
vDSP_maxvi(corr, 1, &cc, &cci, nsamples-FILTERS_DELAY);
printf("corr %1.9f\n", cc);
printf("idx %lu\n", cci);
long j = -1;
for (long i = 0; i < nsamples; i++) {
if (corr[i] > 0) {
if (j != i-1) {
printf("Found frame starting at index %ld\n", i);
}
j = i;
}
}
// Integration
for (long i = 0; i < nsamples/SAMPLE_PER_BIT; i++) {
if(cci+i*SAMPLE_PER_BIT < nsamples) {
vDSP_sve(fBuffer+cci+i*SAMPLE_PER_BIT, 1, integral+i, SAMPLE_PER_BIT);
}
}
// Decision
#ifdef SHOW_FRAMES
for (long i = 13; i < nsamples/SAMPLE_PER_BIT; i += 12) {
if (integral[i]>0 || integral[i+10]>0 || integral[i+11]>0) {
break;
}
printf("%d ", integral[i]>0);
for (int j = i+1; j < i+9; j++) {
printf("%d", integral[j]>0);
}
printf(" %d ", integral[i+9]>0);
printf("%d", integral[i+10]>0);
printf("%d", integral[i+11]>0);
printf("\n");
}
#endif
int i = 13;
char ch;
short p;
while (integral[i]<0 && integral[i+10]<0 && integral[i+11]<0) {
ch = 0;
for (int j = i+1; j < i+9; j++) {
ch |= (integral[j]>0) << (8-j+i);
}
p = ParityTable256[ch];
printf("%c", ch);
strbuf[(i-13)/12] = ch;
i += 12;
}
printf("\n%d characters decoded\n", (i-13)/12);
strbuf[(i-13)/12] = '\0';
} else {
strbuf[0] = '(';
strbuf[1] = 'N';
strbuf[2] = 'o';
strbuf[3] = ' ';
strbuf[4] = 's';
strbuf[5] = 'i';
strbuf[6] = 'g';
strbuf[7] = 'n';
strbuf[8] = 'a';
strbuf[9] = 'l';
strbuf[10] = ')';
strbuf[11] = '\0';
}
[(AMRecorder *)pRecordState->mSelf performSelectorOnMainThread:@selector(updateTextView) withObject:nil waitUntilDone:NO];
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pRecordState->mCurrentPacket += inNumPackets;
AudioQueueEnqueueBuffer(pRecordState->mQueue, inBuffer, 0, NULL);
if (pRecordState->mIsRunning) {
[(AMRecorder *)pRecordState->mSelf stopRecording];
}
}
@interface AMRecorder (Private)
- (void)_setupAudioFormat;
- (void)_deriveBufferSize:(Float64)seconds;
@end
@implementation AMRecorder
- (void)dealloc {
AudioQueueDispose(_recordState.mQueue, true);
[_recordButton release];
[_receiverTextView release];
[_playButton release];
[super dealloc];
}
- (void)startRecording {
[self _setupAudioFormat];
_recordState.mCurrentPacket = 0;
_recordState.mSelf = self;
initReceiver();
OSStatus status = noErr;
status = AudioQueueNewInput(&_recordState.mDataFormat,
HandleInputBuffer,
&_recordState,
NULL,
NULL,
0,
&_recordState.mQueue);
ADAssert(noErr == status, @"Could not create queue.");
[self _deriveBufferSize:1.0f];
for (int i = 0; i < kNumberBuffers; i++) {
AudioQueueAllocateBuffer(_recordState.mQueue, _recordState.bufferByteSize, &_recordState.mBuffers[i]);
AudioQueueEnqueueBuffer(_recordState.mQueue, _recordState.mBuffers[i], 0, NULL);
}
ADAssert(noErr == status, @"Could not allocate buffers.");
_recordState.mIsRunning = YES;
status = AudioQueueStart(_recordState.mQueue, NULL);
ADAssert(noErr == status, @"Could not start recording.");
_receiverTextView.text = @"(Recording...)";
}
- (void)stopRecording {
if (_recordState.mIsRunning) {
AudioQueueStop(_recordState.mQueue, true);
_recordState.mIsRunning = false;
_recordButton.enabled = YES;
_playButton.enabled = YES;
}
}
- (void)updateTextView {
_receiverTextView.text = [NSString stringWithCString:strbuf encoding:NSASCIIStringEncoding];
}
- (IBAction)recordMessage:(id)sender {
[self startRecording];
_playButton.enabled = NO;
_recordButton.enabled = NO;
}
@end
@implementation AMRecorder (Private)
- (void)_setupAudioFormat {
_recordState.mDataFormat.mFormatID = kAudioFormatLinearPCM;
_recordState.mDataFormat.mSampleRate = 44100.0f;
_recordState.mDataFormat.mBitsPerChannel = 16;
_recordState.mDataFormat.mChannelsPerFrame = 1;
_recordState.mDataFormat.mFramesPerPacket = 1;
_recordState.mDataFormat.mBytesPerFrame = _recordState.mDataFormat.mBytesPerPacket = _recordState.mDataFormat.mChannelsPerFrame * sizeof(SInt16);
_recordState.mDataFormat.mReserved = 0;
_recordState.mDataFormat.mFormatFlags = kLinearPCMFormatFlagIsNonInterleaved | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked ;//| kLinearPCMFormatFlagIsBigEndian;
}
- (void)_deriveBufferSize:(Float64)seconds {
static const int maxBufferSize = 0x50000;
int maxPacketSize = _recordState.mDataFormat.mBytesPerPacket;
if (maxPacketSize == 0) {
UInt32 maxVBRPacketSize = sizeof(maxPacketSize);
AudioQueueGetProperty(_recordState.mQueue, kAudioQueueProperty_MaximumOutputPacketSize, &maxPacketSize, &maxVBRPacketSize);
}
Float64 numBytesForTime = round(_recordState.mDataFormat.mSampleRate * maxPacketSize * seconds);
_recordState.bufferByteSize = (UInt32) MIN(numBytesForTime, maxBufferSize);
}
@end
================================================
FILE: Classes/AudioModem.h
================================================
//
// AudioModem.h
// AudioModem
//
// Created by Romain Goyet on 11/04/12.
// Copyright (c) 2012 Applidium. All rights reserved.
//
// CPP magic to include the file named "AudioModem_$(CONFIGURATION).h"
#define str_(x) #x
#define str2_(x) str_(x)
#define cat_(x,y) x ## y
#define cat2_(x,y) cat_(x,y)
#define ENVIRONMENT_HEADER str2_(cat2_(AudioModem_, CONFIGURATION.h))
#include ENVIRONMENT_HEADER
#define kNumberBuffers 3
#define SR 44100
#define FREQ (SR*8/18)
#define BIT_RATE (SR/36)
#define SAMPLE_PER_BIT (SR/BIT_RATE)
#define SAMPLE_PER_BYTE (8 * SAMPLE_PER_BIT)
#define BARKER_LEN 13
#define CORR_MAX_COEFF 0.9
//#define SHOW_FRAMES
//#define SHOW_CORR
//#define SHOW_BASEBAND
//#define SHOW_ENCODED
================================================
FILE: Classes/AudioModem_Development.h
================================================
//
// AudioModem_Development.h
// AudioModem
//
// Created by Romain Goyet on 12/04/12.
// Copyright (c) 2012 Applidium. All rights reserved.
//
#warning Building in development environment
#define ADUseLogs
#define ADUseAsserts
#define ADUseIgnoreUnusedParameters
// Define your development environment below
================================================
FILE: Classes/AudioModem_Production.h
================================================
//
// AudioModem_Production.h
// AudioModem
//
// Created by Romain Goyet on 12/04/12.
// Copyright (c) 2012 Applidium. All rights reserved.
//
// Define your production environment below
================================================
FILE: Classes/AudioModem_Staging.h
================================================
//
// AudioModem_Staging.h
// AudioModem
//
// Created by Romain Goyet on 12/04/12.
// Copyright (c) 2012 Applidium. All rights reserved.
//
#warning Building in staging environment
#define ADUseLogs
#define ADUseAsserts
#define ADUseIgnoreUnusedParameters
// Define your staging environment below
================================================
FILE: LICENSE
================================================
Copyright (c) 2013, Applidium All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of Applidium nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: Modules/ADSharedMacros.h
================================================
//
// ADSharedMacros.h
// AppLibrary
//
// Created by Adrien on 20/08/10.
// Copyright 2010 Applidium. All rights reserved.
//
#ifdef ADUseLogs
#define ADLog(format, ...) NSLog(format, ## __VA_ARGS__)
#else
#define ADLog(format, ...)
#endif
#ifdef ADUseAsserts
#define ADAssert(format, ...) NSAssert(format, ## __VA_ARGS__)
#else
#define ADAssert(format, ...)
#endif
#ifdef ADUseIgnoreUnusedParameters
#define ADIgnoreUnusedParameter(parameter) (void)parameter;
#else
#define ADIgnoreUnusedParameter(parameter)
#endif
================================================
FILE: Modules/ADVersionInfo/ADVersionInfo.m
================================================
@interface ADVersionInfo : NSObject
@end
@implementation ADVersionInfo
+ (void)load {
if ([[[UIDevice currentDevice] name] hasSuffix:@"DEBUG"]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_displayVersionInfo:) name:UIApplicationDidFinishLaunchingNotification object:nil];
}
}
+ (void)_displayVersionInfo:(NSNotification *)notification {
NSDictionary * infoDict = [[NSBundle mainBundle] infoDictionary];
NSString * bundleVersion = [infoDict objectForKey:@"CFBundleVersion"];
NSString * gitCommit = [infoDict objectForKey:@"CFBundleGitCommit"];
NSString * gitBranch = [infoDict objectForKey:@"CFBundleGitBranch"];
NSString * gitStatus = [infoDict objectForKey:@"CFBundleGitStatus"];
NSString * buildDate = [NSString stringWithFormat:@"%s", __DATE__];
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Build Infos"
message:[NSString stringWithFormat:@"V. %@, built %@ | Commit %@ on %@ | Status %@", bundleVersion, buildDate, gitCommit, gitBranch, gitStatus]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
[alertView release];
}
@end
================================================
FILE: main.m
================================================
//
// main.m
// AudioModem
//
// Created by Romain Goyet on 11/04/12.
// Copyright (c) 2012 Applidium. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AMAppDelegate.h"
int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AMAppDelegate class]));
}
}
gitextract_tenta55x/ ├── .gitignore ├── AMMainWindow.xib ├── AudioModem-Info.plist ├── AudioModem-Prefix.pch ├── AudioModem.xcodeproj/ │ └── project.pbxproj ├── Classes/ │ ├── AMAppDelegate.h │ ├── AMAppDelegate.m │ ├── AMPlayer.h │ ├── AMPlayer.m │ ├── AMRecorder.h │ ├── AMRecorder.m │ ├── AudioModem.h │ ├── AudioModem_Development.h │ ├── AudioModem_Production.h │ └── AudioModem_Staging.h ├── LICENSE ├── Modules/ │ ├── ADSharedMacros.h │ └── ADVersionInfo/ │ └── ADVersionInfo.m └── main.m
SYMBOL INDEX (3 symbols across 3 files)
FILE: Classes/AMAppDelegate.h
function interface (line 13) | interface AMAppDelegate : UIResponder <UIApplicationDelegate> {
FILE: Classes/AMPlayer.h
type AQPlayState (line 14) | typedef struct {
FILE: Classes/AMRecorder.h
type AQRecordState (line 14) | typedef struct {
Condensed preview — 19 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (79K chars).
[
{
"path": ".gitignore",
"chars": 145,
"preview": ".DS_Store\n*.xcodeproj/*.pbxuser\n*.xcodeproj/*.mode1v3\n*.xcodeproj/*.perspectivev3\n*.xcodeproj/project.xcworkspace/\n*.xco"
},
{
"path": "AMMainWindow.xib",
"chars": 25256,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data"
},
{
"path": "AudioModem-Info.plist",
"chars": 1116,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "AudioModem-Prefix.pch",
"chars": 382,
"preview": "//\n// Prefix header for all source files of the 'AudioQueueTest' target in the 'AudioQueueTest' project\n//\n\n#import <Ava"
},
{
"path": "AudioModem.xcodeproj/project.pbxproj",
"chars": 17909,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "Classes/AMAppDelegate.h",
"chars": 394,
"preview": "//\n// AMAppDelegate.h\n// AudioModem\n//\n// Created by Tarek Belkahia on 11/01/13.\n// Copyright (c) 2013 Applidium. Al"
},
{
"path": "Classes/AMAppDelegate.m",
"chars": 2201,
"preview": "//\n// AMAppDelegate.m\n// AudioModem\n//\n// Created by Tarek Belkahia on 11/01/13.\n// Copyright (c) 2013 Applidium. Al"
},
{
"path": "Classes/AMPlayer.h",
"chars": 881,
"preview": "//\n// AMPlayer.h\n// AudioModem\n//\n// Created by Tarek Belkahia on 11/01/13.\n//\n//\n\n#import <Foundation/Foundation.h>\n"
},
{
"path": "Classes/AMPlayer.m",
"chars": 6462,
"preview": "//\n// AMPlayer.m\n// AudioModem\n//\n// Created by Tarek Belkahia on 11/01/13.\n//\n//\n\n#import \"AMPlayer.h\"\n\nstatic const"
},
{
"path": "Classes/AMRecorder.h",
"chars": 858,
"preview": "//\n// AMRecorder.h\n// AudioModem\n//\n// Created by Tarek Belkahia on 11/01/13.\n//\n//\n\n#import <Foundation/Foundation.h"
},
{
"path": "Classes/AMRecorder.m",
"chars": 9925,
"preview": "//\n// AMRecorder.m\n// AudioModem\n//\n// Created by Tarek Belkahia on 11/01/13.\n//\n//\n\n#import \"AMRecorder.h\"\n\nstatic c"
},
{
"path": "Classes/AudioModem.h",
"chars": 718,
"preview": "//\n// AudioModem.h\n// AudioModem\n//\n// Created by Romain Goyet on 11/04/12.\n// Copyright (c) 2012 Applidium. All rig"
},
{
"path": "Classes/AudioModem_Development.h",
"chars": 317,
"preview": "//\n// AudioModem_Development.h\n// AudioModem\n//\n// Created by Romain Goyet on 12/04/12.\n// Copyright (c) 2012 Applid"
},
{
"path": "Classes/AudioModem_Production.h",
"chars": 193,
"preview": "//\n// AudioModem_Production.h\n// AudioModem\n//\n// Created by Romain Goyet on 12/04/12.\n// Copyright (c) 2012 Applidi"
},
{
"path": "Classes/AudioModem_Staging.h",
"chars": 305,
"preview": "//\n// AudioModem_Staging.h\n// AudioModem\n//\n// Created by Romain Goyet on 12/04/12.\n// Copyright (c) 2012 Applidium."
},
{
"path": "LICENSE",
"chars": 1448,
"preview": "Copyright (c) 2013, Applidium All rights reserved. Redistribution and use in source and binary forms, with or without mo"
},
{
"path": "Modules/ADSharedMacros.h",
"chars": 525,
"preview": "//\n// ADSharedMacros.h\n// AppLibrary\n//\n// Created by Adrien on 20/08/10.\n// Copyright 2010 Applidium. All rights re"
},
{
"path": "Modules/ADVersionInfo/ADVersionInfo.m",
"chars": 1371,
"preview": "@interface ADVersionInfo : NSObject \n@end\n\n@implementation ADVersionInfo\n+ (void)load {\n if ([[[UIDevice currentDevic"
},
{
"path": "main.m",
"chars": 342,
"preview": "//\n// main.m\n// AudioModem\n//\n// Created by Romain Goyet on 11/04/12.\n// Copyright (c) 2012 Applidium. All rights re"
}
]
About this extraction
This page contains the full source code of the applidium/AudioModem GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 19 files (69.1 KB), approximately 21.5k tokens, and a symbol index with 3 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.