mirror of https://github.com/AxioDL/amuse.git
Initial UI files for AudioUnit container
This commit is contained in:
parent
d71f9f62b8
commit
51b3e24cfb
|
@ -0,0 +1,14 @@
|
|||
<?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>com.apple.application-identifier</key>
|
||||
<string>@APPLE_TEAM_ID@.@APPLE_BUNDLE_ID@</string>
|
||||
<key>com.apple.developer.team-identifier</key>
|
||||
<string>@APPLE_TEAM_ID@</string>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.io.github.axiodl.Amuse.AudioGroups</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,530 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication"/>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Amuse" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Amuse" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About Amuse" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||
<menuItem title="Hide Amuse" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit Amuse" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="File" id="dMs-cI-mzQ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
||||
<items>
|
||||
<menuItem title="Import…" keyEquivalent="i" id="IAo-SY-fd9">
|
||||
<connections>
|
||||
<action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||
<items>
|
||||
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||
<connections>
|
||||
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="View" id="H8h-7b-M4v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||
<items>
|
||||
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleToolbarShown:" target="-1" id="BXY-wc-z0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||
<items>
|
||||
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||
<connections>
|
||||
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
<items>
|
||||
<menuItem title="Amuse Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<connections>
|
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<window title="Amuse" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" frameAutosaveName="" animationBehavior="default" id="FDh-Mc-OFY">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="283" y="305" width="480" height="270"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||
<view key="contentView" id="9Rk-3e-xVS">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<tabView fixedFrame="YES" type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="Kht-FW-Kf6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="Data" identifier="1" id="93v-oY-J6h">
|
||||
<view key="view" ambiguous="YES" id="GKx-9K-n29">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XHK-NM-ZAP">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="235"/>
|
||||
<clipView key="contentView" ambiguous="YES" id="cFf-wa-ZPx">
|
||||
<rect key="frame" x="1" y="23" width="478" height="211"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="jN4-UQ-VfT" viewBased="YES" indentationPerLevel="16" outlineTableColumn="DlG-iE-h1a" id="Vlv-Jw-A4U">
|
||||
<rect key="frame" x="0.0" y="0.0" width="478" height="211"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="116" minWidth="40" maxWidth="1000" id="DlG-iE-h1a">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="nfQ-a8-ezY">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="1eD-qr-jb9">
|
||||
<rect key="frame" x="1" y="1" width="116" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cAp-67-fuc">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="n5E-QL-7SS">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="cAp-67-fuc" id="oYq-0I-143"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn width="356" minWidth="40" maxWidth="1000" id="alh-ut-BoX">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="ywm-jc-RPk">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="REu-Qt-X84">
|
||||
<rect key="frame" x="120" y="1" width="356" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zPc-LM-WxA">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="wy9-p6-MVa">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="zPc-LM-WxA" id="XMS-Lt-7aA"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="ZGl-Ws-7HQ">
|
||||
<rect key="frame" x="1" y="116.23383283615112" width="231.89535522460938" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="cwa-Vo-ZEb">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" id="jN4-UQ-VfT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="478" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
<searchField wantsLayer="YES" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Huk-pR-ayq">
|
||||
<rect key="frame" x="6" y="241" width="468" height="22"/>
|
||||
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" id="u9E-Ld-d6I">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</searchFieldCell>
|
||||
</searchField>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Samples" identifier="2" id="w0a-hU-qxe">
|
||||
<view key="view" id="A6d-Tc-9Ch">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aIh-No-CEz">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="250"/>
|
||||
<clipView key="contentView" ambiguous="YES" id="MzV-rp-Rp8">
|
||||
<rect key="frame" x="1" y="23" width="478" height="226"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="fQK-tA-ezw" viewBased="YES" id="Frt-wZ-1ZI">
|
||||
<rect key="frame" x="0.0" y="0.0" width="478" height="226"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="116" minWidth="40" maxWidth="1000" id="RF7-J2-oFq">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="O7U-y5-ovx">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="ffN-yY-DyX">
|
||||
<rect key="frame" x="1" y="1" width="116" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DUu-Bo-MP0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="N99-9O-D40">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="DUu-Bo-MP0" id="KVw-BO-rFN"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn width="356" minWidth="40" maxWidth="1000" id="MqW-cb-qx7">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FTl-PH-ryo">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="Syu-AI-iQO">
|
||||
<rect key="frame" x="120" y="1" width="356" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="42J-2Q-ggr">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="5ml-w5-V8a">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="42J-2Q-ggr" id="pLh-XE-CfB"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="MZB-ZS-SbU">
|
||||
<rect key="frame" x="1" y="119" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="X6u-4b-0Ia">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" id="fQK-tA-ezw">
|
||||
<rect key="frame" x="0.0" y="0.0" width="478" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
<searchField wantsLayer="YES" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ac6-rN-emB">
|
||||
<rect key="frame" x="0.0" y="248" width="480" height="22"/>
|
||||
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" id="ly5-eT-c0g">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</searchFieldCell>
|
||||
</searchField>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Credits" identifier="" id="ZeL-Y6-fom">
|
||||
<view key="view" id="dbr-Vj-bFR">
|
||||
<rect key="frame" x="10" y="33" width="474" height="240"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6qq-02-m71">
|
||||
<rect key="frame" x="117" y="60" width="240" height="135"/>
|
||||
<clipView key="contentView" ambiguous="YES" id="WiT-CK-5jR">
|
||||
<rect key="frame" x="1" y="1" width="223" height="133"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView ambiguous="YES" importsGraphics="NO" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" usesFontPanel="YES" verticallyResizable="YES" allowsNonContiguousLayout="YES" quoteSubstitution="YES" dashSubstitution="YES" smartInsertDelete="YES" id="AWS-Zd-8ha">
|
||||
<rect key="frame" x="0.0" y="0.0" width="223" height="133"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<size key="minSize" width="223" height="133"/>
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="minSize" width="223" height="133"/>
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
</textView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="4qq-Z8-Vg5">
|
||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="0AQ-Tv-s5q">
|
||||
<rect key="frame" x="224" y="1" width="15" height="133"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
</tabView>
|
||||
</subviews>
|
||||
</view>
|
||||
<toolbar key="toolbar" implicitIdentifier="B4A5636B-DFED-420B-B2FF-540D729FD569" autosavesConfiguration="NO" displayMode="iconAndLabel" sizeMode="regular" id="r4I-P0-82j">
|
||||
<allowedToolbarItems>
|
||||
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="lGH-PH-hNt"/>
|
||||
<toolbarItem implicitItemIdentifier="F03B9080-A3BB-4F91-A709-CAA1E4DC0E44" label="Data" paletteLabel="Data" tag="-1" image="DataTabIcon" id="8NY-au-6ke"/>
|
||||
<toolbarItem implicitItemIdentifier="0457F818-6A13-4BB2-9620-7ABAE0BC6548" label="Samples" paletteLabel="Samples" tag="-1" image="SamplesTabIcon" id="iPf-xi-p8f"/>
|
||||
<toolbarItem implicitItemIdentifier="28F8ACB3-3712-4CF5-978A-DD1B93652F33" label="Credits" paletteLabel="Credits" tag="-1" image="CreditsTabIcon" id="tCG-9P-MMA"/>
|
||||
</allowedToolbarItems>
|
||||
<defaultToolbarItems>
|
||||
<toolbarItem reference="lGH-PH-hNt"/>
|
||||
<toolbarItem reference="8NY-au-6ke"/>
|
||||
<toolbarItem reference="iPf-xi-p8f"/>
|
||||
<toolbarItem reference="tCG-9P-MMA"/>
|
||||
<toolbarItem reference="lGH-PH-hNt"/>
|
||||
</defaultToolbarItems>
|
||||
</toolbar>
|
||||
<point key="canvasLocation" x="813" y="615"/>
|
||||
</window>
|
||||
<viewController title="DataViewController" id="wPf-Gs-L5I">
|
||||
<scrollView key="view" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="dKX-po-msQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="450" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" id="gEQ-rv-CDQ">
|
||||
<rect key="frame" x="1" y="23" width="448" height="276"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="amE-2c-S5R" viewBased="YES" indentationPerLevel="16" outlineTableColumn="LkY-tF-dox" id="JW0-iO-tTq">
|
||||
<rect key="frame" x="0.0" y="0.0" width="448" height="276"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="116" minWidth="40" maxWidth="1000" id="LkY-tF-dox">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FYh-Eh-fBg">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="gkB-hN-JeO">
|
||||
<rect key="frame" x="1" y="1" width="116" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VIz-DU-wfb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="2eT-YE-0RH">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="VIz-DU-wfb" id="n5F-JT-qU7"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn width="326" minWidth="40" maxWidth="1000" id="udY-bI-O0d">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="Gar-Um-c6d">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="unj-mz-1UF">
|
||||
<rect key="frame" x="120" y="1" width="326" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Kb3-mZ-4EA">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="co7-cU-FK6">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<connections>
|
||||
<outlet property="textField" destination="Kb3-mZ-4EA" id="jNZ-55-ZpP"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
</outlineView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="GB4-DT-M1V">
|
||||
<rect key="frame" x="1" y="119" width="223" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="KDS-kb-Cv8">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" id="amE-2c-S5R">
|
||||
<rect key="frame" x="0.0" y="0.0" width="448" height="23"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
</viewController>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="CreditsTabIcon" width="128" height="128"/>
|
||||
<image name="DataTabIcon" width="128" height="128"/>
|
||||
<image name="SamplesTabIcon" width="128" height="128"/>
|
||||
</resources>
|
||||
</document>
|
|
@ -3,19 +3,44 @@
|
|||
#import <CoreAudioKit/AUViewController.h>
|
||||
#import "AudioUnitViewController.hpp"
|
||||
|
||||
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
||||
{}
|
||||
@interface MainView : NSView
|
||||
{
|
||||
AudioUnitViewController* amuseVC;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation MainView
|
||||
|
||||
|
||||
- (id)initWithFrame:(NSRect)frameRect
|
||||
{
|
||||
self = [super initWithFrame:frameRect];
|
||||
if (!self)
|
||||
return nil;
|
||||
amuseVC = [[AudioUnitViewController alloc] initWithNibName:nil bundle:nil];
|
||||
[self addSubview:amuseVC.view];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)translatesAutoresizingMaskIntoConstraints
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface ViewController : NSViewController
|
||||
{
|
||||
NSWindow* _window;
|
||||
NSButton* playButton;
|
||||
AudioUnitViewController* amuseVC;
|
||||
}
|
||||
@end
|
||||
|
||||
@property (weak) IBOutlet NSView *containerView;
|
||||
-(IBAction)togglePlay:(id)sender;
|
||||
|
||||
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
||||
{
|
||||
NSWindow* mainWindow;
|
||||
ViewController* containerVC;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation ViewController
|
||||
|
@ -54,32 +79,67 @@
|
|||
}
|
||||
|
||||
-(void)loadView {
|
||||
amuseVC = [[AudioUnitViewController alloc] initWithNibName:nil bundle:nil];
|
||||
self.view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 200, 300)];
|
||||
[self.view addSubview:amuseVC.view];
|
||||
self.view = [[MainView alloc] initWithFrame:[_window contentRectForFrameRect:_window.frame]];
|
||||
}
|
||||
|
||||
self.view.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
|
||||
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat: @"H:|-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.view)];
|
||||
[self.view addConstraints: constraints];
|
||||
|
||||
constraints = [NSLayoutConstraint constraintsWithVisualFormat: @"V:|-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.view)];
|
||||
[self.view addConstraints: constraints];
|
||||
- (id)initWithWindow:(NSWindow*)window
|
||||
{
|
||||
self = [super initWithNibName:@"AmuseContainerMainMenu" bundle:nil];
|
||||
if (!self)
|
||||
return nil;
|
||||
_window = window;
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
- (void)applicationDidFinishLaunching:(NSNotification*)notification
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints"];
|
||||
|
||||
/* App menu */
|
||||
#if 0
|
||||
[NSMenu alloc] ini
|
||||
NSMenu* rootMenu = [[NSMenu alloc] initWithTitle:@"main"];
|
||||
NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"Amuse"];
|
||||
NSMenuItem* quitItem = [appMenu addItemWithTitle:@"Quit Amuse"
|
||||
action:@selector(quitApp:)
|
||||
keyEquivalent:@"q"];
|
||||
[quitItem setKeyEquivalentModifierMask:NSCommandKeyMask];
|
||||
[[rootMenu addItemWithTitle:@"Amuse"
|
||||
action:nil keyEquivalent:@""] setSubmenu:appMenu];
|
||||
[[NSApplication sharedApplication] setMainMenu:rootMenu];
|
||||
|
||||
NSRect mainScreenRect = [[NSScreen mainScreen] frame];
|
||||
mainWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(mainScreenRect.size.width / 2 - 100,
|
||||
mainScreenRect.size.height / 2 - 150, 200, 300)
|
||||
styleMask:NSClosableWindowMask|NSTitledWindowMask
|
||||
backing:NSBackingStoreBuffered
|
||||
defer:YES];
|
||||
[mainWindow setTitle:@"Amuse"];
|
||||
[[mainWindow windowController] setShouldCascadeWindows:NO];
|
||||
[mainWindow setFrameAutosaveName:@"AmuseDataWindow"];
|
||||
containerVC = [[ViewController alloc] initWithWindow:mainWindow];
|
||||
[mainWindow setContentViewController:containerVC];
|
||||
[mainWindow makeKeyAndOrderFront:nil];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (IBAction)quitApp:(id)sender
|
||||
{
|
||||
[NSApp terminate:sender];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
NSApplication* app = [NSApplication sharedApplication];
|
||||
[app setActivationPolicy:NSApplicationActivationPolicyRegular];
|
||||
|
||||
/* Delegate (OS X callbacks) */
|
||||
AppDelegate* delegate = [AppDelegate new];
|
||||
[app setDelegate:delegate];
|
||||
[app run];
|
||||
return 0;
|
||||
int main(int argc, const char * argv[])
|
||||
{
|
||||
NSApplicationMain(argc, argv);
|
||||
}
|
||||
|
|
|
@ -8,5 +8,9 @@
|
|||
<string>@APPLE_TEAM_ID@</string>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.io.github.axiodl.Amuse.AudioGroups</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef __AMUSE_AUDIOUNIT_AUDIOGROUPFILEPRESENTER_HPP__
|
||||
#define __AMUSE_AUDIOUNIT_AUDIOGROUPFILEPRESENTER_HPP__
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
@class AudioGroupFilePresenter;
|
||||
|
||||
struct AudioGroupDataCollection
|
||||
{
|
||||
NSURL* m_proj = nullptr; /* Only this member set for single-file containers */
|
||||
NSURL* m_pool = nullptr;
|
||||
NSURL* m_sdir = nullptr;
|
||||
NSURL* m_samp = nullptr;
|
||||
|
||||
bool invalidateURL(NSURL* url);
|
||||
void moveURL(NSURL* oldUrl, NSURL* newUrl);
|
||||
|
||||
std::unique_ptr<uint8_t[]> _coordinateRead(AudioGroupFilePresenter* presenter, size_t& szOut, NSURL* url);
|
||||
|
||||
std::unique_ptr<uint8_t[]> coordinateProjRead(AudioGroupFilePresenter* presenter, size_t& szOut);
|
||||
std::unique_ptr<uint8_t[]> coordinatePoolRead(AudioGroupFilePresenter* presenter, size_t& szOut);
|
||||
std::unique_ptr<uint8_t[]> coordinateSdirRead(AudioGroupFilePresenter* presenter, size_t& szOut);
|
||||
std::unique_ptr<uint8_t[]> coordinateSampRead(AudioGroupFilePresenter* presenter, size_t& szOut);
|
||||
};
|
||||
|
||||
@interface AudioGroupFilePresenter : NSObject <NSFilePresenter>
|
||||
{
|
||||
NSURL* m_groupURL;
|
||||
NSOperationQueue* m_dataQueue;
|
||||
std::map<std::string, AudioGroupDataCollection> m_audioGroupCollections;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#endif // __AMUSE_AUDIOUNIT_AUDIOGROUPFILEPRESENTER_HPP__
|
|
@ -0,0 +1,191 @@
|
|||
#include "AudioGroupFilePresenter.hpp"
|
||||
#include <athena/FileReader.hpp>
|
||||
|
||||
@implementation AudioGroupFilePresenter
|
||||
|
||||
- (NSURL*)presentedItemURL
|
||||
{
|
||||
return m_groupURL;
|
||||
}
|
||||
|
||||
- (NSOperationQueue*)presentedItemOperationQueue
|
||||
{
|
||||
return m_dataQueue;
|
||||
}
|
||||
|
||||
bool AudioGroupDataCollection::invalidateURL(NSURL* url)
|
||||
{
|
||||
bool valid = false;
|
||||
if (m_proj)
|
||||
{
|
||||
if ([m_proj isEqual:url])
|
||||
m_proj = nullptr;
|
||||
valid |= m_proj != nullptr;
|
||||
}
|
||||
if (m_pool)
|
||||
{
|
||||
if ([m_pool isEqual:url])
|
||||
m_pool = nullptr;
|
||||
valid |= m_pool != nullptr;
|
||||
}
|
||||
if (m_sdir)
|
||||
{
|
||||
if ([m_sdir isEqual:url])
|
||||
m_sdir = nullptr;
|
||||
valid |= m_sdir != nullptr;
|
||||
}
|
||||
if (m_samp)
|
||||
{
|
||||
if ([m_samp isEqual:url])
|
||||
m_samp = nullptr;
|
||||
valid |= m_samp != nullptr;
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
void AudioGroupDataCollection::moveURL(NSURL* oldUrl, NSURL* newUrl)
|
||||
{
|
||||
if (m_proj)
|
||||
{
|
||||
if ([m_proj isEqual:oldUrl])
|
||||
m_proj = newUrl;
|
||||
}
|
||||
if (m_pool)
|
||||
{
|
||||
if ([m_pool isEqual:oldUrl])
|
||||
m_pool = newUrl;
|
||||
}
|
||||
if (m_sdir)
|
||||
{
|
||||
if ([m_sdir isEqual:oldUrl])
|
||||
m_sdir = newUrl;
|
||||
}
|
||||
if (m_samp)
|
||||
{
|
||||
if ([m_samp isEqual:oldUrl])
|
||||
m_samp = newUrl;
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> AudioGroupDataCollection::_coordinateRead(AudioGroupFilePresenter* presenter, size_t& szOut, NSURL* url)
|
||||
{
|
||||
NSFileCoordinator* coord = [[NSFileCoordinator alloc] initWithFilePresenter:presenter];
|
||||
if (!coord)
|
||||
return {};
|
||||
NSError* err;
|
||||
__block std::unique_ptr<uint8_t[]> ret;
|
||||
__block size_t retSz = 0;
|
||||
[coord coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingResolvesSymbolicLink error:&err
|
||||
byAccessor:^(NSURL* newUrl)
|
||||
{
|
||||
athena::io::FileReader r([[newUrl path] UTF8String], 1024 * 32, false);
|
||||
if (r.hasError())
|
||||
return;
|
||||
retSz = r.length();
|
||||
ret = r.readUBytes(retSz);
|
||||
}];
|
||||
szOut = retSz;
|
||||
return std::move(ret);
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> AudioGroupDataCollection::coordinateProjRead(AudioGroupFilePresenter* presenter, size_t& szOut)
|
||||
{
|
||||
if (!m_proj)
|
||||
return {};
|
||||
return _coordinateRead(presenter, szOut, m_proj);
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> AudioGroupDataCollection::coordinatePoolRead(AudioGroupFilePresenter* presenter, size_t& szOut)
|
||||
{
|
||||
if (!m_pool)
|
||||
return {};
|
||||
return _coordinateRead(presenter, szOut, m_pool);
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> AudioGroupDataCollection::coordinateSdirRead(AudioGroupFilePresenter* presenter, size_t& szOut)
|
||||
{
|
||||
if (!m_sdir)
|
||||
return {};
|
||||
return _coordinateRead(presenter, szOut, m_sdir);
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> AudioGroupDataCollection::coordinateSampRead(AudioGroupFilePresenter* presenter, size_t& szOut)
|
||||
{
|
||||
if (!m_samp)
|
||||
return {};
|
||||
return _coordinateRead(presenter, szOut, m_samp);
|
||||
}
|
||||
|
||||
- (void)accommodatePresentedSubitemDeletionAtURL:(NSURL*)url completionHandler:(void (^)(NSError* errorOrNil))completionHandler
|
||||
{
|
||||
for (auto it = m_audioGroupCollections.begin() ; it != m_audioGroupCollections.end() ;)
|
||||
{
|
||||
std::pair<const std::string, AudioGroupDataCollection>& pair = *it;
|
||||
if (pair.second.invalidateURL(url))
|
||||
{
|
||||
it = m_audioGroupCollections.erase(it);
|
||||
continue;
|
||||
}
|
||||
++it;
|
||||
}
|
||||
completionHandler(nil);
|
||||
}
|
||||
|
||||
- (void)presentedSubitemDidAppearAtURL:(NSURL*)url
|
||||
{
|
||||
NSString* path = [url path];
|
||||
if (!path)
|
||||
return;
|
||||
|
||||
NSString* extension = [url pathExtension];
|
||||
NSString* lastComp = [url lastPathComponent];
|
||||
lastComp = [lastComp substringToIndex:[lastComp length] - [extension length]];
|
||||
AudioGroupDataCollection& collection = m_audioGroupCollections[[lastComp UTF8String]];
|
||||
|
||||
if ([extension isEqualToString:@"pro"] || [extension isEqualToString:@"proj"])
|
||||
{
|
||||
collection.m_proj = url;
|
||||
}
|
||||
else if ([extension isEqualToString:@"poo"] || [extension isEqualToString:@"pool"])
|
||||
{
|
||||
collection.m_pool = url;
|
||||
}
|
||||
else if ([extension isEqualToString:@"sdi"] || [extension isEqualToString:@"sdir"])
|
||||
{
|
||||
collection.m_sdir = url;
|
||||
}
|
||||
else if ([extension isEqualToString:@"sam"] || [extension isEqualToString:@"samp"])
|
||||
{
|
||||
collection.m_samp = url;
|
||||
}
|
||||
else
|
||||
{
|
||||
collection.m_proj = url;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)presentedSubitemAtURL:(NSURL*)oldUrl didMoveToURL:(NSURL*)newUrl
|
||||
{
|
||||
for (auto it = m_audioGroupCollections.begin() ; it != m_audioGroupCollections.end() ; ++it)
|
||||
{
|
||||
std::pair<const std::string, AudioGroupDataCollection>& pair = *it;
|
||||
pair.second.moveURL(oldUrl, newUrl);
|
||||
}
|
||||
}
|
||||
|
||||
- (id)init
|
||||
{
|
||||
m_groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.io.github.axiodl.Amuse.AudioGroups"];
|
||||
if (!m_groupURL)
|
||||
return nil;
|
||||
m_dataQueue = [NSOperationQueue new];
|
||||
[NSFileCoordinator addFilePresenter:self];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[NSFileCoordinator removeFilePresenter:self];
|
||||
}
|
||||
|
||||
@end
|
|
@ -19,25 +19,7 @@ struct AudioUnitVoiceEngine : boo::BaseAudioVoiceEngine
|
|||
{
|
||||
std::vector<std::unique_ptr<float[]>> m_renderBufs;
|
||||
size_t m_frameBytes;
|
||||
|
||||
void render(AudioBufferList* outputData)
|
||||
{
|
||||
if (m_renderBufs.size() < outputData->mNumberBuffers)
|
||||
m_renderBufs.resize(outputData->mNumberBuffers);
|
||||
|
||||
for (int i=0 ; i<outputData->mNumberBuffers ; ++i)
|
||||
{
|
||||
std::unique_ptr<float[]>& buf = m_renderBufs[i];
|
||||
AudioBuffer& auBuf = outputData->mBuffers[i];
|
||||
if (!auBuf.mData)
|
||||
{
|
||||
buf.reset(new float[auBuf.mDataByteSize]);
|
||||
auBuf.mData = buf.get();
|
||||
}
|
||||
|
||||
_pumpAndMixVoices(auBuf.mDataByteSize / 2 / 4, reinterpret_cast<float*>(auBuf.mData));
|
||||
}
|
||||
}
|
||||
AudioBufferList* m_outputData = nullptr;
|
||||
|
||||
boo::AudioChannelSet _getAvailableSet()
|
||||
{
|
||||
|
@ -107,6 +89,21 @@ struct AudioUnitVoiceEngine : boo::BaseAudioVoiceEngine
|
|||
|
||||
void pumpAndMixVoices()
|
||||
{
|
||||
if (m_renderBufs.size() < m_outputData->mNumberBuffers)
|
||||
m_renderBufs.resize(m_outputData->mNumberBuffers);
|
||||
|
||||
for (int i=0 ; i<m_outputData->mNumberBuffers ; ++i)
|
||||
{
|
||||
std::unique_ptr<float[]>& buf = m_renderBufs[i];
|
||||
AudioBuffer& auBuf = m_outputData->mBuffers[i];
|
||||
if (!auBuf.mData)
|
||||
{
|
||||
buf.reset(new float[auBuf.mDataByteSize]);
|
||||
auBuf.mData = buf.get();
|
||||
}
|
||||
|
||||
_pumpAndMixVoices(auBuf.mDataByteSize / 2 / 4, reinterpret_cast<float*>(auBuf.mData));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -185,7 +182,8 @@ struct AudioUnitVoiceEngine : boo::BaseAudioVoiceEngine
|
|||
|
||||
- (AUInternalRenderBlock)internalRenderBlock
|
||||
{
|
||||
AudioUnitVoiceEngine& voxEngine = static_cast<AudioUnitVoiceEngine&>(*m_booBackend);
|
||||
__block AudioUnitVoiceEngine& voxEngine = static_cast<AudioUnitVoiceEngine&>(*m_booBackend);
|
||||
__block amuse::Engine& amuseEngine = *m_engine;
|
||||
|
||||
return ^AUAudioUnitStatus(AudioUnitRenderActionFlags* actionFlags, const AudioTimeStamp* timestamp,
|
||||
AUAudioFrameCount frameCount, NSInteger outputBusNumber, AudioBufferList* outputData,
|
||||
|
@ -206,7 +204,8 @@ struct AudioUnitVoiceEngine : boo::BaseAudioVoiceEngine
|
|||
}
|
||||
|
||||
/* Output buffers */
|
||||
voxEngine.render(outputData);
|
||||
voxEngine.m_outputData = outputData;
|
||||
amuseEngine.pumpEngine();
|
||||
return noErr;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -26,5 +26,7 @@
|
|||
<string>10.11</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>AmuseContainerMainMenu</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -81,7 +81,7 @@ if(TARGET boo)
|
|||
if (NOT (AUDIOUNIT_LIBRARY STREQUAL AUDIOUNIT_LIBRARY-NOTFOUND))
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
# Search for provision profile to make AudioUnit on OS X
|
||||
# Search for provision profile to make AudioUnit extension on OS X
|
||||
unset(PROV_PROFILE)
|
||||
file(GLOB PROV_FILES "$ENV{HOME}/Library/MobileDevice/Provisioning Profiles/*.provisionprofile")
|
||||
foreach(FILE ${PROV_FILES})
|
||||
|
@ -96,14 +96,15 @@ if(TARGET boo)
|
|||
|
||||
# Extension App
|
||||
add_executable(amuse-au MACOSX_BUNDLE AudioUnit/AudioUnitBackend.hpp AudioUnit/AudioUnitBackend.mm
|
||||
AudioUnit/AudioUnitViewController.hpp AudioUnit/AudioUnitViewController.mm)
|
||||
AudioUnit/AudioUnitViewController.hpp AudioUnit/AudioUnitViewController.mm
|
||||
AudioUnit/AudioGroupFilePresenter.hpp AudioUnit/AudioGroupFilePresenter.mm)
|
||||
|
||||
set(APPLE_BUNDLE_ID "io.github.axiodl.Amuse.AudioUnit")
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/Amuse.entitlements.in
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/AmuseExtension.entitlements.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/AmuseExtension.entitlements)
|
||||
|
||||
target_link_libraries(amuse-au amuse boo soxr ${AUDIOUNIT_LIBRARY} ${COREAUDIOKIT_LIBRARY}
|
||||
${AVFOUNDATION_LIBRARY} ${BOO_SYS_LIBS} logvisor)
|
||||
${AVFOUNDATION_LIBRARY} ${BOO_SYS_LIBS} logvisor athena-core)
|
||||
set_target_properties(amuse-au PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/ExtensionInfo.plist"
|
||||
BUNDLE_EXTENSION "appex" BUNDLE TRUE
|
||||
|
@ -113,17 +114,27 @@ if(TARGET boo)
|
|||
|
||||
|
||||
# Containing App
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/AmuseContainerMainMenu.nib
|
||||
COMMAND ibtool --errors --warnings --notices --module amuse_au_container --auto-activate-custom-fonts
|
||||
--target-device mac --minimum-deployment-target 10.11 --output-format human-readable-text --compile
|
||||
${CMAKE_CURRENT_BINARY_DIR}/AmuseContainerMainMenu.nib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/AmuseContainerMainMenu.xib
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/AmuseContainerMainMenu.xib
|
||||
)
|
||||
add_executable(amuse-au-container MACOSX_BUNDLE AudioUnit/AmuseContainingApp.mm
|
||||
AudioUnit/AudioUnitBackend.hpp AudioUnit/AudioUnitBackend.mm
|
||||
AudioUnit/AudioUnitViewController.hpp AudioUnit/AudioUnitViewController.mm)
|
||||
AudioUnit/AudioUnitViewController.hpp AudioUnit/AudioUnitViewController.mm
|
||||
AudioUnit/AudioGroupFilePresenter.hpp AudioUnit/AudioGroupFilePresenter.mm
|
||||
AmuseContainerMainMenu.nib)
|
||||
set_source_files_properties(AudioUnit/AudioUnitBackend.mm AudioUnit/AudioUnitViewController.mm
|
||||
AudioUnit/AmuseContainingApp.mm
|
||||
AudioUnit/AmuseContainingApp.mm AudioUnit/AudioGroupFilePresenter.mm
|
||||
PROPERTIES COMPILE_FLAGS -fobjc-arc)
|
||||
target_link_libraries(amuse-au-container amuse boo soxr ${AUDIOUNIT_LIBRARY} ${COREAUDIOKIT_LIBRARY}
|
||||
${AVFOUNDATION_LIBRARY} ${BOO_SYS_LIBS} logvisor)
|
||||
${AVFOUNDATION_LIBRARY} ${BOO_SYS_LIBS} logvisor athena-core)
|
||||
|
||||
set(APPLE_BUNDLE_ID "io.github.axiodl.Amuse")
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/Amuse.entitlements.in
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AudioUnit/AmuseContainer.entitlements.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/AmuseContainer.entitlements)
|
||||
|
||||
set_target_properties(amuse-au-container PROPERTIES
|
||||
|
@ -145,6 +156,9 @@ if(TARGET boo)
|
|||
)
|
||||
|
||||
add_custom_command(TARGET amuse-au-container POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/AmuseContainerMainMenu.nib"
|
||||
"$<TARGET_FILE_DIR:amuse-au-container>/../Resources/AmuseContainerMainMenu.nib"
|
||||
COMMAND codesign --force --sign
|
||||
${APPLE_DEV_ID} "$<TARGET_FILE_DIR:amuse-au-container>/../.."
|
||||
VERBATIM
|
||||
|
|
Loading…
Reference in New Issue