File info: Implemented support for Album Artist and Codec fields
parent
e5aec4b618
commit
fdae7eec21
|
@ -33,6 +33,7 @@
|
|||
|
||||
IBOutlet NSMenuItem *showIndexColumn;
|
||||
IBOutlet NSMenuItem *showTitleColumn;
|
||||
IBOutlet NSMenuItem *showAlbumArtistColumn;
|
||||
IBOutlet NSMenuItem *showArtistColumn;
|
||||
IBOutlet NSMenuItem *showAlbumColumn;
|
||||
IBOutlet NSMenuItem *showGenreColumn;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19162" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19162"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -15,16 +15,16 @@
|
|||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Info Inspector" separatorStyle="none" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" visibleAtLaunch="NO" frameAutosaveName="InfoInspector" animationBehavior="default" titlebarAppearsTransparent="YES" id="1" customClass="NSPanel">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" resizable="YES" utility="YES" nonactivatingPanel="YES" HUD="YES"/>
|
||||
<rect key="contentRect" x="700" y="80" width="300" height="450"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1792" height="1095"/>
|
||||
<rect key="contentRect" x="700" y="80" width="300" height="494"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||
<value key="minSize" type="size" width="240" height="420"/>
|
||||
<value key="maxSize" type="size" width="400" height="600"/>
|
||||
<view key="contentView" id="2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="450"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="494"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9">
|
||||
<rect key="frame" x="69" y="416" width="37" height="14"/>
|
||||
<rect key="frame" x="69" y="438" width="37" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Artist:" id="10">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -33,7 +33,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="11">
|
||||
<rect key="frame" x="63" y="394" width="43" height="14"/>
|
||||
<rect key="frame" x="63" y="416" width="43" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Album:" id="12">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -42,7 +42,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
||||
<rect key="frame" x="68" y="350" width="38" height="14"/>
|
||||
<rect key="frame" x="68" y="372" width="38" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Track:" id="14">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -51,7 +51,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
||||
<rect key="frame" x="61" y="328" width="45" height="14"/>
|
||||
<rect key="frame" x="61" y="350" width="45" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Length:" id="16">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -60,7 +60,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="17">
|
||||
<rect key="frame" x="74" y="306" width="32" height="14"/>
|
||||
<rect key="frame" x="74" y="328" width="32" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Year:" id="18">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -69,7 +69,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="19">
|
||||
<rect key="frame" x="66" y="284" width="40" height="14"/>
|
||||
<rect key="frame" x="66" y="306" width="40" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Genre:" id="20">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -78,7 +78,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="21">
|
||||
<rect key="frame" x="33" y="240" width="73" height="14"/>
|
||||
<rect key="frame" x="33" y="262" width="73" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Sample Rate:" id="22">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -87,7 +87,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="27">
|
||||
<rect key="frame" x="49" y="218" width="57" height="14"/>
|
||||
<rect key="frame" x="49" y="240" width="57" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Channels:" id="28">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -96,7 +96,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="29">
|
||||
<rect key="frame" x="64" y="196" width="42" height="14"/>
|
||||
<rect key="frame" x="64" y="218" width="42" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Bitrate:" id="32">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -105,7 +105,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="30">
|
||||
<rect key="frame" x="17" y="174" width="89" height="14"/>
|
||||
<rect key="frame" x="17" y="196" width="89" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Bits Per Sample:" id="31">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -114,7 +114,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23">
|
||||
<rect key="frame" x="74" y="372" width="32" height="14"/>
|
||||
<rect key="frame" x="74" y="394" width="32" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Title:" id="24">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -123,7 +123,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="33" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="416" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="438" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="34">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -135,7 +135,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="35" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="394" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="416" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="36">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -147,7 +147,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="37" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="372" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="394" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="38">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -159,7 +159,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="39" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="350" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="372" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="40">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -172,7 +172,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="41" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="328" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="350" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="42">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -185,7 +185,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="306" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="328" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="44">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -200,7 +200,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="45" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="284" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="306" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="46">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -212,7 +212,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="49" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="240" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="262" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="50">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -224,7 +224,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="51" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="218" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="240" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="52">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -236,7 +236,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="196" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="218" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="54">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -248,7 +248,7 @@
|
|||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="174" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="196" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="56">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -259,8 +259,29 @@
|
|||
<binding destination="-2" name="value" keyPath="valueToDisplay.bitsPerSample" id="122"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QPg-Mb-Urn">
|
||||
<rect key="frame" x="66" y="174" width="40" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Codec:" id="cbq-TT-CZX">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ijS-y2-eCZ" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="174" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="Yby-OU-cqP">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.codec" id="Tle-Vx-BN5"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="84">
|
||||
<rect key="frame" x="50" y="262" width="56" height="14"/>
|
||||
<rect key="frame" x="50" y="284" width="56" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Filename:" id="85">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -269,7 +290,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="86" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="113" y="262" width="170" height="14"/>
|
||||
<rect key="frame" x="113" y="284" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="87">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
|
@ -294,6 +315,27 @@
|
|||
</binding>
|
||||
</connections>
|
||||
</imageView>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vB6-9J-5qg">
|
||||
<rect key="frame" x="33" y="460" width="72" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Album Artist:" id="LFJ-QQ-gGr">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cj0-Tw-xpq" customClass="ToolTipTextField">
|
||||
<rect key="frame" x="112" y="460" width="170" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="B8w-o8-ZBw">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="valueToDisplay.albumartist" id="gTS-bf-rHT"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="136" y="131"/>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19115.3" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19162" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19115.3"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19162"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -32,10 +32,10 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="KWC-Ti-8KY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="378"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" autosaveName="Playlist" rowHeight="18" headerView="1517" id="207" customClass="PlaylistView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="361"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1086" height="361"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="6"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -79,7 +79,7 @@
|
|||
</binding>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="title" editable="NO" width="152" minWidth="96" maxWidth="1024" id="208">
|
||||
<tableColumn identifier="title" editable="NO" width="125.5" minWidth="96" maxWidth="1024" id="208">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Title">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
|
||||
|
@ -100,6 +100,26 @@
|
|||
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1914"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="index" editable="NO" width="150" minWidth="96" maxWidth="1024" id="yGV-gP-Wl6">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Album Artist">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="M6d-rj-lEz">
|
||||
<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"/>
|
||||
<connections>
|
||||
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="dJs-UO-m5r"/>
|
||||
<binding destination="218" name="value" keyPath="arrangedObjects.albumartist" id="OFk-g8-Jbd">
|
||||
<dictionary key="options">
|
||||
<bool key="NSConditionallySetsEditable" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="artist" editable="NO" width="149.5" minWidth="96" maxWidth="1024" id="391">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Artist">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -195,7 +215,7 @@
|
|||
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1922"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="track" editable="NO" width="72" minWidth="24" maxWidth="72" id="850">
|
||||
<tableColumn identifier="track" editable="NO" width="34.5" minWidth="24" maxWidth="72" id="850">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="№">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -251,6 +271,26 @@
|
|||
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1925"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="filename" editable="NO" width="64" minWidth="32" maxWidth="1024" hidden="YES" id="3A3-9o-Gh9" userLabel="Codec">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Filename">
|
||||
<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" alignment="left" title="Text Cell" id="lBy-Uc-vCA">
|
||||
<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"/>
|
||||
<connections>
|
||||
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="VQf-MC-VR1"/>
|
||||
<binding destination="218" name="value" keyPath="arrangedObjects.codec" id="hO0-YW-E7w">
|
||||
<dictionary key="options">
|
||||
<bool key="NSConditionallySetsEditable" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<binding destination="1689" name="rowHeight" keyPath="values.fontSize" id="1927">
|
||||
|
@ -278,7 +318,7 @@
|
|||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" wantsLayer="YES" id="1517" customClass="PlaylistHeaderView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="17"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1086" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
|
@ -562,7 +602,7 @@
|
|||
<outlet property="initialFirstResponder" destination="207" id="720"/>
|
||||
<outlet property="playlistView" destination="206" id="mah-wo-1nd"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="130.5" y="131"/>
|
||||
<point key="canvasLocation" x="130" y="131"/>
|
||||
</window>
|
||||
<window title="Cog" separatorStyle="none" allowsToolTipsWhenApplicationIsInactive="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="Mini Window" animationBehavior="default" toolbarStyle="unified" id="2234" userLabel="Mini Window (Window)" customClass="MiniWindow">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
|
@ -1755,6 +1795,7 @@ Gw
|
|||
<menuItem title="Track" state="on" keyEquivalent="R" id="1343"/>
|
||||
<menuItem title="Year" state="on" keyEquivalent="Y" id="1344"/>
|
||||
</items>
|
||||
<point key="canvasLocation" x="-166" y="-282"/>
|
||||
</menu>
|
||||
<customView id="1611" userLabel="Volume View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="32" height="168"/>
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
174C7A370F4FD43100E18B0F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 174C7A360F4FD43100E18B0F /* libz.dylib */; };
|
||||
32AE5A5A14E70ED600420CA0 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59A014E70ED600420CA0 /* config.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
32AE5A5C14E70ED600420CA0 /* apefile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59A414E70ED600420CA0 /* apefile.cpp */; };
|
||||
32AE5A5D14E70ED600420CA0 /* apefile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59A514E70ED600420CA0 /* apefile.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
|
@ -149,12 +148,13 @@
|
|||
32AE5AFF14E70ED700420CA0 /* taglib_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5914E70ED600420CA0 /* taglib_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
32AE5B0014E70F4700420CA0 /* tlist.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4614E70ED600420CA0 /* tlist.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
32AE5B0114E70F4A00420CA0 /* tmap.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4814E70ED600420CA0 /* tmap.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
4872B8881A675CCB00674347 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4872B8871A675CCB00674347 /* libiconv.dylib */; };
|
||||
83790D241809E8CA0073CF51 /* opusfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D201809E8CA0073CF51 /* opusfile.cpp */; };
|
||||
83790D261809E8CA0073CF51 /* opusproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D221809E8CA0073CF51 /* opusproperties.cpp */; };
|
||||
83942C67269116530058BD3B /* flacfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59BF14E70ED600420CA0 /* flacfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
83AF2CBE2622643300538240 /* apegenfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AF2CBC2622643300538240 /* apegenfile.cpp */; };
|
||||
83AF2CBF2622643300538240 /* apegenfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AF2CBD2622643300538240 /* apegenfile.h */; };
|
||||
83B46FCA2707EED200847FC9 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 83B46FC92707EED200847FC9 /* libiconv.tbd */; };
|
||||
83B46FCC2707EEDB00847FC9 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 83B46FCB2707EEDB00847FC9 /* libz.tbd */; };
|
||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
|
||||
EDE862FD25CF6BD70086EFD3 /* tpropertymap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDE862FC25CF6BD60086EFD3 /* tpropertymap.cpp */; };
|
||||
EDE8630225CF6C260086EFD3 /* tfilestream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDE8630025CF6C260086EFD3 /* tfilestream.cpp */; };
|
||||
|
@ -358,7 +358,6 @@
|
|||
32AE5A5714E70ED600420CA0 /* wavpackproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wavpackproperties.cpp; sourceTree = "<group>"; };
|
||||
32AE5A5814E70ED600420CA0 /* wavpackproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wavpackproperties.h; sourceTree = "<group>"; };
|
||||
32AE5A5914E70ED600420CA0 /* taglib_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = taglib_config.h; path = taglib/taglib_config.h; sourceTree = "<group>"; };
|
||||
4872B8871A675CCB00674347 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
|
||||
833F683D1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
835C889822CC1889001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
83790D201809E8CA0073CF51 /* opusfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusfile.cpp; sourceTree = "<group>"; };
|
||||
|
@ -367,6 +366,8 @@
|
|||
83790D231809E8CA0073CF51 /* opusproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opusproperties.h; sourceTree = "<group>"; };
|
||||
83AF2CBC2622643300538240 /* apegenfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apegenfile.cpp; sourceTree = "<group>"; };
|
||||
83AF2CBD2622643300538240 /* apegenfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apegenfile.h; sourceTree = "<group>"; };
|
||||
83B46FC92707EED200847FC9 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
|
||||
83B46FCB2707EEDB00847FC9 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
8DC2EF5B0486A6940098B216 /* TagLib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TagLib.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
EDE862FC25CF6BD60086EFD3 /* tpropertymap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tpropertymap.cpp; sourceTree = "<group>"; };
|
||||
|
@ -488,8 +489,8 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
4872B8881A675CCB00674347 /* libiconv.dylib in Frameworks */,
|
||||
174C7A370F4FD43100E18B0F /* libz.dylib in Frameworks */,
|
||||
83B46FCA2707EED200847FC9 /* libiconv.tbd in Frameworks */,
|
||||
83B46FCC2707EEDB00847FC9 /* libz.tbd in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -507,11 +508,11 @@
|
|||
0867D691FE84028FC02AAC07 /* TagLib */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4872B8871A675CCB00674347 /* libiconv.dylib */,
|
||||
8E75700C09F318D70080F1EE /* Source */,
|
||||
089C1665FE841158C02AAC07 /* Resources */,
|
||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
||||
034768DFFF38A50411DB9C8B /* Products */,
|
||||
83B46FC82707EED200847FC9 /* Frameworks */,
|
||||
);
|
||||
name = TagLib;
|
||||
sourceTree = "<group>";
|
||||
|
@ -897,6 +898,15 @@
|
|||
path = opus;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
83B46FC82707EED200847FC9 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
83B46FCB2707EEDB00847FC9 /* libz.tbd */,
|
||||
83B46FC92707EED200847FC9 /* libiconv.tbd */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8E75700C09F318D70080F1EE /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
|
@ -123,6 +123,15 @@ String APE::Tag::title() const
|
|||
return d->itemListMap["TITLE"].values().toString();
|
||||
}
|
||||
|
||||
String APE::Tag::albumartist() const
|
||||
{
|
||||
if(!d->itemListMap["ALBUMARTIST"].isEmpty())
|
||||
return d->itemListMap["ALBUMARTIST"].values().toString();
|
||||
if(!d->itemListMap["ALBUM ARTIST"].isEmpty())
|
||||
return d->itemListMap["ALBUM ARTIST"].values().toString();
|
||||
return String();
|
||||
}
|
||||
|
||||
String APE::Tag::artist() const
|
||||
{
|
||||
if(d->itemListMap["ARTIST"].isEmpty())
|
||||
|
@ -198,6 +207,11 @@ void APE::Tag::setTitle(const String &s)
|
|||
addValue("TITLE", s, true);
|
||||
}
|
||||
|
||||
void APE::Tag::setAlbumArtist(const String &s)
|
||||
{
|
||||
addValue("ALBUMARTIST", s, true);
|
||||
}
|
||||
|
||||
void APE::Tag::setArtist(const String &s)
|
||||
{
|
||||
addValue("ARTIST", s, true);
|
||||
|
|
|
@ -88,6 +88,7 @@ namespace TagLib {
|
|||
// Reimplementations.
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -100,6 +101,7 @@ namespace TagLib {
|
|||
virtual float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &s);
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
virtual void setArtist(const String &s);
|
||||
virtual void setAlbum(const String &s);
|
||||
virtual void setComment(const String &s);
|
||||
|
|
|
@ -55,6 +55,11 @@ String ASF::Tag::title() const
|
|||
return d->title;
|
||||
}
|
||||
|
||||
String ASF::Tag::albumartist() const
|
||||
{
|
||||
return String();
|
||||
}
|
||||
|
||||
String ASF::Tag::artist() const
|
||||
{
|
||||
return d->artist;
|
||||
|
@ -135,6 +140,10 @@ void ASF::Tag::setTitle(const String &value)
|
|||
d->title = value;
|
||||
}
|
||||
|
||||
void ASF::Tag::setAlbumArtist(const String &)
|
||||
{
|
||||
}
|
||||
|
||||
void ASF::Tag::setArtist(const String &value)
|
||||
{
|
||||
d->artist = value;
|
||||
|
|
|
@ -54,6 +54,11 @@ namespace TagLib {
|
|||
*/
|
||||
virtual String title() const;
|
||||
|
||||
/*!
|
||||
* Returns the album artist name.
|
||||
*/
|
||||
virtual String albumartist() const;
|
||||
|
||||
/*!
|
||||
* Returns the artist name.
|
||||
*/
|
||||
|
@ -108,6 +113,11 @@ namespace TagLib {
|
|||
*/
|
||||
virtual void setTitle(const String &s);
|
||||
|
||||
/*!
|
||||
* Sets the artist to \a s.
|
||||
*/
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
|
||||
/*!
|
||||
* Sets the artist to \a s.
|
||||
*/
|
||||
|
|
|
@ -59,6 +59,11 @@ String Mod::Tag::title() const
|
|||
return d->title;
|
||||
}
|
||||
|
||||
String Mod::Tag::albumartist() const
|
||||
{
|
||||
return String();
|
||||
}
|
||||
|
||||
String Mod::Tag::artist() const
|
||||
{
|
||||
return String();
|
||||
|
@ -119,6 +124,10 @@ void Mod::Tag::setTitle(const String &title)
|
|||
d->title = title;
|
||||
}
|
||||
|
||||
void Mod::Tag::setAlbumArtist(const String &)
|
||||
{
|
||||
}
|
||||
|
||||
void Mod::Tag::setArtist(const String &)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -56,6 +56,12 @@ namespace TagLib {
|
|||
*/
|
||||
virtual String title() const;
|
||||
|
||||
/*!
|
||||
* Not supported by module files. Therefore always returns String::null.
|
||||
*/
|
||||
virtual String albumartist() const;
|
||||
|
||||
|
||||
/*!
|
||||
* Not supported by module files. Therefore always returns String::null.
|
||||
*/
|
||||
|
@ -127,6 +133,11 @@ namespace TagLib {
|
|||
*/
|
||||
virtual void setTitle(const String &title);
|
||||
|
||||
/*!
|
||||
* Not supported by module files and therefore ignored.
|
||||
*/
|
||||
virtual void setAlbumArtist(const String &albumartist);
|
||||
|
||||
/*!
|
||||
* Not supported by module files and therefore ignored.
|
||||
*/
|
||||
|
|
|
@ -732,6 +732,14 @@ MP4::Tag::artist() const
|
|||
return String();
|
||||
}
|
||||
|
||||
String
|
||||
MP4::Tag::albumartist() const
|
||||
{
|
||||
if(d->items.contains("aART"))
|
||||
return d->items["aART"].toStringList().toString(", ");
|
||||
return String();
|
||||
}
|
||||
|
||||
String
|
||||
MP4::Tag::album() const
|
||||
{
|
||||
|
@ -802,6 +810,12 @@ MP4::Tag::setTitle(const String &value)
|
|||
setTextItem("\251nam", value);
|
||||
}
|
||||
|
||||
void
|
||||
MP4::Tag::setAlbumArtist(const String &value)
|
||||
{
|
||||
setTextItem("aART", value);
|
||||
}
|
||||
|
||||
void
|
||||
MP4::Tag::setArtist(const String &value)
|
||||
{
|
||||
|
|
|
@ -54,6 +54,7 @@ namespace TagLib {
|
|||
bool save();
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -66,6 +67,7 @@ namespace TagLib {
|
|||
float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &value);
|
||||
virtual void setAlbumArtist(const String &value);
|
||||
virtual void setArtist(const String &value);
|
||||
virtual void setAlbum(const String &value);
|
||||
virtual void setComment(const String &value);
|
||||
|
|
|
@ -132,6 +132,11 @@ String ID3v1::Tag::title() const
|
|||
return d->title;
|
||||
}
|
||||
|
||||
String ID3v1::Tag::albumartist() const
|
||||
{
|
||||
return String();
|
||||
}
|
||||
|
||||
String ID3v1::Tag::artist() const
|
||||
{
|
||||
return d->artist;
|
||||
|
@ -187,6 +192,10 @@ void ID3v1::Tag::setTitle(const String &s)
|
|||
d->title = s;
|
||||
}
|
||||
|
||||
void ID3v1::Tag::setAlbumArtist(const String &)
|
||||
{
|
||||
}
|
||||
|
||||
void ID3v1::Tag::setArtist(const String &s)
|
||||
{
|
||||
d->artist = s;
|
||||
|
|
|
@ -136,6 +136,7 @@ namespace TagLib {
|
|||
// Reimplementations.
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -148,6 +149,7 @@ namespace TagLib {
|
|||
virtual float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &s);
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
virtual void setArtist(const String &s);
|
||||
virtual void setAlbum(const String &s);
|
||||
virtual void setComment(const String &s);
|
||||
|
|
|
@ -156,6 +156,13 @@ String ID3v2::Tag::artist() const
|
|||
return String();
|
||||
}
|
||||
|
||||
String ID3v2::Tag::albumartist() const
|
||||
{
|
||||
if(!d->frameListMap["TPE2"].isEmpty())
|
||||
return d->frameListMap["TPE2"].front()->toString();
|
||||
return String();
|
||||
}
|
||||
|
||||
String ID3v2::Tag::album() const
|
||||
{
|
||||
if(!d->frameListMap["TALB"].isEmpty())
|
||||
|
@ -282,6 +289,11 @@ void ID3v2::Tag::setArtist(const String &s)
|
|||
setTextFrame("TPE1", s);
|
||||
}
|
||||
|
||||
void ID3v2::Tag::setAlbumArtist(const String &s)
|
||||
{
|
||||
setTextFrame("TPE2", s);
|
||||
}
|
||||
|
||||
void ID3v2::Tag::setAlbum(const String &s)
|
||||
{
|
||||
setTextFrame("TALB", s);
|
||||
|
|
|
@ -157,6 +157,7 @@ namespace TagLib {
|
|||
// Reimplementations.
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -171,6 +172,7 @@ namespace TagLib {
|
|||
virtual float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &s);
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
virtual void setArtist(const String &s);
|
||||
virtual void setAlbum(const String &s);
|
||||
virtual void setComment(const String &s);
|
||||
|
|
|
@ -85,6 +85,15 @@ String Ogg::XiphComment::title() const
|
|||
return d->fieldListMap["TITLE"].toString();
|
||||
}
|
||||
|
||||
String Ogg::XiphComment::albumartist() const
|
||||
{
|
||||
if(!d->fieldListMap["ALBUMARTIST"].isEmpty())
|
||||
return d->fieldListMap["ALBUMARTIST"].toString();
|
||||
if(!d->fieldListMap["ALBUM ARTIST"].isEmpty())
|
||||
return d->fieldListMap["ALBUM ARTIST"].toString();
|
||||
return String();
|
||||
}
|
||||
|
||||
String Ogg::XiphComment::artist() const
|
||||
{
|
||||
if(d->fieldListMap["ARTIST"].isEmpty())
|
||||
|
@ -172,6 +181,11 @@ void Ogg::XiphComment::setTitle(const String &s)
|
|||
addField("TITLE", s);
|
||||
}
|
||||
|
||||
void Ogg::XiphComment::setAlbumArtist(const String &s)
|
||||
{
|
||||
addField("ALBUMARTIST", s);
|
||||
}
|
||||
|
||||
void Ogg::XiphComment::setArtist(const String &s)
|
||||
{
|
||||
addField("ARTIST", s);
|
||||
|
|
|
@ -81,6 +81,7 @@ namespace TagLib {
|
|||
virtual ~XiphComment();
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -93,6 +94,7 @@ namespace TagLib {
|
|||
virtual float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &s);
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
virtual void setArtist(const String &s);
|
||||
virtual void setAlbum(const String &s);
|
||||
virtual void setComment(const String &s);
|
||||
|
|
|
@ -93,6 +93,11 @@ String RIFF::Info::Tag::title() const
|
|||
return fieldText("INAM");
|
||||
}
|
||||
|
||||
String RIFF::Info::Tag::albumartist() const
|
||||
{
|
||||
return String();
|
||||
}
|
||||
|
||||
String RIFF::Info::Tag::artist() const
|
||||
{
|
||||
return fieldText("IART");
|
||||
|
@ -148,6 +153,10 @@ void RIFF::Info::Tag::setTitle(const String &s)
|
|||
setFieldText("INAM", s);
|
||||
}
|
||||
|
||||
void RIFF::Info::Tag::setAlbumArtist(const String &)
|
||||
{
|
||||
}
|
||||
|
||||
void RIFF::Info::Tag::setArtist(const String &s)
|
||||
{
|
||||
setFieldText("IART", s);
|
||||
|
|
|
@ -103,6 +103,7 @@ namespace TagLib {
|
|||
// Reimplementations
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -115,6 +116,7 @@ namespace TagLib {
|
|||
virtual float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &s);
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
virtual void setArtist(const String &s);
|
||||
virtual void setAlbum(const String &s);
|
||||
virtual void setComment(const String &s);
|
||||
|
|
|
@ -47,6 +47,7 @@ Tag::~Tag()
|
|||
bool Tag::isEmpty() const
|
||||
{
|
||||
return (title().isEmpty() &&
|
||||
albumartist().isEmpty() &&
|
||||
artist().isEmpty() &&
|
||||
album().isEmpty() &&
|
||||
comment().isEmpty() &&
|
||||
|
@ -60,6 +61,8 @@ PropertyMap Tag::properties() const
|
|||
PropertyMap map;
|
||||
if(!(title().isEmpty()))
|
||||
map["TITLE"].append(title());
|
||||
if(!(albumartist().isEmpty()))
|
||||
map["ALBUMARTIST"].append(albumartist());
|
||||
if(!(artist().isEmpty()))
|
||||
map["ARTIST"].append(artist());
|
||||
if(!(album().isEmpty()))
|
||||
|
@ -91,6 +94,16 @@ PropertyMap Tag::setProperties(const PropertyMap &origProps)
|
|||
} else
|
||||
setTitle(String());
|
||||
|
||||
if(properties.contains("ALBUMARTIST") ||
|
||||
properties.contains("ALBUM ARTIST")) {
|
||||
if (properties.contains("ALBUMARTIST"))
|
||||
setAlbumArtist(properties["ALBUMARTIST"].front());
|
||||
else
|
||||
setAlbumArtist(properties["ALBUM ARTIST"].front());
|
||||
oneValueSet.append("ALBUMARTIST");
|
||||
} else
|
||||
setAlbumArtist(String());
|
||||
|
||||
if(properties.contains("ARTIST")) {
|
||||
setArtist(properties["ARTIST"].front());
|
||||
oneValueSet.append("ARTIST");
|
||||
|
@ -154,6 +167,7 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static
|
|||
{
|
||||
if(overwrite) {
|
||||
target->setTitle(source->title());
|
||||
target->setAlbumArtist(source->albumartist());
|
||||
target->setArtist(source->artist());
|
||||
target->setAlbum(source->album());
|
||||
target->setComment(source->comment());
|
||||
|
@ -164,6 +178,8 @@ void Tag::duplicate(const Tag *source, Tag *target, bool overwrite) // static
|
|||
else {
|
||||
if(target->title().isEmpty())
|
||||
target->setTitle(source->title());
|
||||
if(target->albumartist().isEmpty())
|
||||
target->setAlbumArtist(source->albumartist());
|
||||
if(target->artist().isEmpty())
|
||||
target->setArtist(source->artist());
|
||||
if(target->album().isEmpty())
|
||||
|
|
|
@ -84,6 +84,12 @@ namespace TagLib {
|
|||
*/
|
||||
virtual String title() const = 0;
|
||||
|
||||
/*!
|
||||
* Returns the album artist name; if no artist name is present in the tag
|
||||
* String::null will be returned.
|
||||
*/
|
||||
virtual String albumartist() const = 0;
|
||||
|
||||
/*!
|
||||
* Returns the artist name; if no artist name is present in the tag
|
||||
* String::null will be returned.
|
||||
|
@ -149,6 +155,12 @@ namespace TagLib {
|
|||
*/
|
||||
virtual void setTitle(const String &s) = 0;
|
||||
|
||||
/*!
|
||||
* Sets the album artist to \a s. If \a s is String::null then this value will be
|
||||
* cleared.
|
||||
*/
|
||||
virtual void setAlbumArtist(const String &s) = 0;
|
||||
|
||||
/*!
|
||||
* Sets the artist to \a s. If \a s is String::null then this value will be
|
||||
* cleared.
|
||||
|
|
|
@ -178,6 +178,11 @@ String TagUnion::title() const
|
|||
stringUnion(title);
|
||||
}
|
||||
|
||||
String TagUnion::albumartist() const
|
||||
{
|
||||
stringUnion(albumartist);
|
||||
}
|
||||
|
||||
String TagUnion::artist() const
|
||||
{
|
||||
stringUnion(artist);
|
||||
|
@ -233,6 +238,11 @@ void TagUnion::setTitle(const String &s)
|
|||
setUnion(Title, s);
|
||||
}
|
||||
|
||||
void TagUnion::setAlbumArtist(const String &s)
|
||||
{
|
||||
setUnion(AlbumArtist, s);
|
||||
}
|
||||
|
||||
void TagUnion::setArtist(const String &s)
|
||||
{
|
||||
setUnion(Artist, s);
|
||||
|
|
|
@ -60,6 +60,7 @@ namespace TagLib {
|
|||
void removeUnsupportedProperties(const StringList &unsupported);
|
||||
|
||||
virtual String title() const;
|
||||
virtual String albumartist() const;
|
||||
virtual String artist() const;
|
||||
virtual String album() const;
|
||||
virtual String comment() const;
|
||||
|
@ -72,6 +73,7 @@ namespace TagLib {
|
|||
virtual float rgTrackPeak() const;
|
||||
|
||||
virtual void setTitle(const String &s);
|
||||
virtual void setAlbumArtist(const String &s);
|
||||
virtual void setArtist(const String &s);
|
||||
virtual void setAlbum(const String &s);
|
||||
virtual void setComment(const String &s);
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
NSURL *URL;
|
||||
|
||||
NSString *artist;
|
||||
NSString *albumartist;
|
||||
NSString *album;
|
||||
NSString *title;
|
||||
NSString *genre;
|
||||
|
@ -50,6 +51,8 @@
|
|||
BOOL Unsigned;
|
||||
float sampleRate;
|
||||
|
||||
NSString *codec;
|
||||
|
||||
NSString *endian;
|
||||
|
||||
BOOL seekable;
|
||||
|
@ -97,6 +100,7 @@
|
|||
@property(retain) NSURL *URL;
|
||||
|
||||
@property(retain) NSString *artist;
|
||||
@property(retain) NSString *albumartist;
|
||||
@property(retain) NSString *album;
|
||||
@property(nonatomic, retain) NSString *title;
|
||||
@property(retain) NSString *genre;
|
||||
|
@ -114,6 +118,8 @@
|
|||
@property BOOL Unsigned;
|
||||
@property float sampleRate;
|
||||
|
||||
@property(retain) NSString *codec;
|
||||
|
||||
@property float replayGainAlbumGain;
|
||||
@property float replayGainAlbumPeak;
|
||||
@property float replayGainTrackGain;
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
@synthesize URL;
|
||||
|
||||
@synthesize artist;
|
||||
@synthesize albumartist;
|
||||
@synthesize album;
|
||||
@synthesize genre;
|
||||
@synthesize year;
|
||||
|
@ -41,6 +42,8 @@
|
|||
@synthesize Unsigned;
|
||||
@synthesize sampleRate;
|
||||
|
||||
@synthesize codec;
|
||||
|
||||
@synthesize replayGainAlbumGain;
|
||||
@synthesize replayGainAlbumPeak;
|
||||
@synthesize replayGainTrackGain;
|
||||
|
@ -89,7 +92,7 @@
|
|||
|
||||
+ (NSSet *)keyPathsForValuesAffectingSpam
|
||||
{
|
||||
return [NSSet setWithObjects:@"artist", @"title", @"album", @"track", @"totalFrames", @"currentPosition", @"bitrate", nil];
|
||||
return [NSSet setWithObjects:@"albumartist", @"artist", @"title", @"album", @"track", @"totalFrames", @"currentPosition", @"bitrate", nil];
|
||||
}
|
||||
|
||||
+ (NSSet *)keyPathsForValuesAffectingPositionText
|
||||
|
@ -131,6 +134,7 @@
|
|||
self.URL = nil;
|
||||
|
||||
self.artist = nil;
|
||||
self.albumartist = nil;
|
||||
self.album = nil;
|
||||
self.title = nil;
|
||||
self.genre = nil;
|
||||
|
@ -139,6 +143,7 @@
|
|||
self.albumArtInternal = nil;
|
||||
|
||||
self.endian = nil;
|
||||
self.codec = nil;
|
||||
}
|
||||
|
||||
// Get the URL if the title is blank
|
||||
|
@ -167,12 +172,14 @@
|
|||
{
|
||||
BOOL hasBitrate = (self.bitrate != 0);
|
||||
BOOL hasArtist = (self.artist != nil) && (![self.artist isEqualToString:@""]);
|
||||
BOOL hasAlbumArtist = (self.albumartist != nil) && (![self.albumartist isEqualToString:@""]);
|
||||
BOOL hasAlbum = (self.album != nil) && (![self.album isEqualToString:@""]);
|
||||
BOOL hasTrack = (self.track != 0);
|
||||
BOOL hasLength = (self.totalFrames != 0);
|
||||
BOOL hasCurrentPosition = (self.currentPosition != 0) && (self.current);
|
||||
BOOL hasExtension = NO;
|
||||
BOOL hasTitle = (title != nil) && (![title isEqualToString:@""]);
|
||||
BOOL hasCodec = (self.codec != nil) && (![self.codec isEqualToString:@""]);
|
||||
|
||||
NSMutableString * filename = [NSMutableString stringWithString:[self filename]];
|
||||
NSRange dotPosition = [filename rangeOfString:@"." options:NSBackwardsSearch];
|
||||
|
@ -192,7 +199,12 @@
|
|||
|
||||
if (hasExtension) {
|
||||
[elements addObject:@"["];
|
||||
[elements addObject:[extension uppercaseString]];
|
||||
if (hasCodec) {
|
||||
[elements addObject:self.codec];
|
||||
}
|
||||
else {
|
||||
[elements addObject:[extension uppercaseString]];
|
||||
}
|
||||
if (hasBitrate) {
|
||||
[elements addObject:@"@"];
|
||||
[elements addObject:[NSString stringWithFormat:@"%u", self.bitrate]];
|
||||
|
@ -202,7 +214,12 @@
|
|||
}
|
||||
|
||||
if (hasArtist) {
|
||||
[elements addObject:self.artist];
|
||||
if (hasAlbumArtist) {
|
||||
[elements addObject:self.albumartist];
|
||||
}
|
||||
else {
|
||||
[elements addObject:self.artist];
|
||||
}
|
||||
[elements addObject:@" - "];
|
||||
}
|
||||
|
||||
|
@ -223,6 +240,11 @@
|
|||
[elements addObject:filename];
|
||||
}
|
||||
|
||||
if (hasAlbumArtist && hasArtist) {
|
||||
[elements addObject:@" // "];
|
||||
[elements addObject:self.artist];
|
||||
}
|
||||
|
||||
if (hasCurrentPosition || hasLength) {
|
||||
SecondsFormatter *secondsFormatter = [[SecondsFormatter alloc] init];
|
||||
[elements addObject:@" ("];
|
||||
|
|
|
@ -74,6 +74,7 @@
|
|||
[NSNumber numberWithBool:NO], @"floatingPoint",
|
||||
[NSNumber numberWithInt:2], @"channels", //output from gme_play is in stereo
|
||||
[NSNumber numberWithBool:YES], @"seekable",
|
||||
[NSString stringWithUTF8String:m_player->gettype().c_str()], @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -479,6 +479,7 @@ int lockmgr_callback(void ** mutex, enum AVLockOp op)
|
|||
[NSNumber numberWithDouble:totalFrames], @"totalFrames",
|
||||
[NSNumber numberWithInt:bitrate], @"bitrate",
|
||||
[NSNumber numberWithBool:seekable], @"seekable",
|
||||
[NSString stringWithUTF8String:avcodec_get_name(codecCtx->codec_id)], @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -317,6 +317,7 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS
|
|||
[NSNumber numberWithFloat:frequency],@"sampleRate",
|
||||
[NSNumber numberWithDouble:totalFrames],@"totalFrames",
|
||||
[NSNumber numberWithBool:[source seekable]], @"seekable",
|
||||
@"FLAC",@"codec",
|
||||
@"big",@"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ extern gme_err_t readCallback( void* data, void* out, long count );
|
|||
id<CogSource> source;
|
||||
long length;
|
||||
long fade;
|
||||
NSString* codec;
|
||||
}
|
||||
|
||||
- (void)setSource:(id<CogSource>)s;
|
||||
|
|
|
@ -261,6 +261,10 @@ static int psf_info_meta(void * context, const char * name, const char * value)
|
|||
{
|
||||
taglc = @"year";
|
||||
}
|
||||
else if ([taglc isEqualToString:@"album artist"])
|
||||
{
|
||||
taglc = @"albumartist";
|
||||
}
|
||||
|
||||
if ([taglc hasPrefix:@"replaygain_"])
|
||||
{
|
||||
|
@ -296,6 +300,7 @@ static int psf_info_meta(void * context, const char * name, const char * value)
|
|||
state->utf8 = true;
|
||||
}
|
||||
else if ([taglc isEqualToString:@"title"] ||
|
||||
[taglc isEqualToString:@"albumartist"] ||
|
||||
[taglc isEqualToString:@"artist"] ||
|
||||
[taglc isEqualToString:@"album"] ||
|
||||
[taglc isEqualToString:@"year"] ||
|
||||
|
@ -1686,6 +1691,19 @@ static int usf_info(void * context, const char * name, const char * value)
|
|||
|
||||
- (NSDictionary *)properties
|
||||
{
|
||||
NSString* codec = nil;
|
||||
switch (type) {
|
||||
case 1: codec = @"PSF"; break;
|
||||
case 2: codec = @"PSF2"; break;
|
||||
case 0x11: codec = @"SSF"; break;
|
||||
case 0x12: codec = @"DSF"; break;
|
||||
case 0x21: codec = @"USF"; break;
|
||||
case 0x22: codec = @"GSF"; break;
|
||||
case 0x24: codec = @"2SF"; break;
|
||||
case 0x25: codec = @"NCSF"; break;
|
||||
case 0x41: codec = @"QSF"; break;
|
||||
}
|
||||
|
||||
return [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithInt:2], @"channels",
|
||||
[NSNumber numberWithInt:16], @"bitsPerSample",
|
||||
|
@ -1698,6 +1716,7 @@ static int usf_info(void * context, const char * name, const char * value)
|
|||
[NSNumber numberWithFloat:replayGainTrackGain], @"replayGainTrackGain",
|
||||
[NSNumber numberWithFloat:replayGainTrackPeak], @"replayGainTrackPeak",
|
||||
[NSNumber numberWithFloat:volume], @"volume",
|
||||
codec, @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -114,6 +114,7 @@ static OSType getOSType(const char * in_)
|
|||
[NSNumber numberWithBool:YES], @"floatingPoint",
|
||||
[NSNumber numberWithInt:2], @"channels", //output from gme_play is in stereo
|
||||
[NSNumber numberWithBool:YES], @"seekable",
|
||||
@"MIDI", @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -211,6 +211,7 @@ mpc_bool_t CanSeekProc(mpc_reader *p_reader)
|
|||
[NSNumber numberWithBool:YES], @"floatingPoint",
|
||||
[NSNumber numberWithInt:2], @"channels",
|
||||
[NSNumber numberWithBool:[source seekable]], @"seekable",
|
||||
@"Musepack", @"codec",
|
||||
@"host",@"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -144,6 +144,7 @@ opus_int64 sourceTell(void *_stream)
|
|||
[NSNumber numberWithDouble:totalFrames], @"totalFrames",
|
||||
[NSNumber numberWithInt:bitrate], @"bitrate",
|
||||
[NSNumber numberWithBool:([source seekable] && seekable)], @"seekable",
|
||||
@"Opus", @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -93,6 +93,7 @@
|
|||
[NSNumber numberWithFloat:frequency],@"sampleRate",
|
||||
[NSNumber numberWithDouble:totalFrames],@"totalFrames",
|
||||
[NSNumber numberWithBool:seekable ],@"seekable",
|
||||
@"Shorten",@"codec",
|
||||
@"little",@"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -137,6 +137,7 @@ BOOL probe_length( Song * synSong, unsigned long * intro_length, unsigned long *
|
|||
[NSNumber numberWithBool:NO], @"floatingPoint",
|
||||
[NSNumber numberWithInt:2], @"channels",
|
||||
[NSNumber numberWithBool:YES], @"seekable",
|
||||
@"Syntrax", @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -71,11 +71,12 @@
|
|||
|
||||
if (tag)
|
||||
{
|
||||
TagLib::String artist, title, album, genre, comment;
|
||||
TagLib::String artist, albumartist, title, album, genre, comment;
|
||||
int year, track;
|
||||
float rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak;
|
||||
|
||||
artist = tag->artist();
|
||||
albumartist = tag->albumartist();
|
||||
title = tag->title();;
|
||||
album = tag->album();
|
||||
genre = tag->genre();
|
||||
|
@ -98,6 +99,9 @@
|
|||
|
||||
if (!artist.isEmpty())
|
||||
[dict setObject:[NSString stringWithUTF8String:artist.toCString(true)] forKey:@"artist"];
|
||||
|
||||
if (!albumartist.isEmpty())
|
||||
[dict setObject:[NSString stringWithUTF8String:albumartist.toCString(true)] forKey:@"albumartist"];
|
||||
|
||||
if (!album.isEmpty())
|
||||
[dict setObject:[NSString stringWithUTF8String:album.toCString(true)] forKey:@"album"];
|
||||
|
|
|
@ -138,6 +138,7 @@ long sourceTell(void *datasource)
|
|||
[NSNumber numberWithDouble:totalFrames], @"totalFrames",
|
||||
[NSNumber numberWithInt:bitrate], @"bitrate",
|
||||
[NSNumber numberWithBool:([source seekable] && seekable)], @"seekable",
|
||||
@"Vorbis", @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -290,6 +290,7 @@ int32_t WriteBytesProc(void *ds, void *data, int32_t bcount)
|
|||
[NSNumber numberWithBool:floatingPoint],@"floatingPoint",
|
||||
[NSNumber numberWithDouble:totalFrames],@"totalFrames",
|
||||
[NSNumber numberWithBool:[[wv source] seekable]], @"seekable",
|
||||
@"Wavpack",@"codec",
|
||||
@"little",@"endian",
|
||||
nil];
|
||||
}
|
||||
|
|
|
@ -11,6 +11,21 @@
|
|||
|
||||
#import "PlaylistController.h"
|
||||
|
||||
static NSString* get_description_tag(const char* description, const char *tag, char delimiter) {
|
||||
// extract a "tag" from the description string
|
||||
const char* pos = strstr(description, tag);
|
||||
const char* eos = NULL;
|
||||
if (pos != NULL) {
|
||||
pos += strlen(tag);
|
||||
eos = strchr(pos, delimiter);
|
||||
if (eos == NULL) eos = pos + strlen(pos);
|
||||
NSMutableData* data = [NSData dataWithBytes:pos length:(eos - pos + 1)];
|
||||
((char *)[data mutableBytes])[eos - pos] = '\0';
|
||||
return [NSString stringWithUTF8String:[data bytes]];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
@implementation VGMInfoCache
|
||||
|
||||
+(id)sharedCache {
|
||||
|
@ -48,6 +63,9 @@
|
|||
long totalFrames = vgmstream_get_samples(stream);
|
||||
|
||||
int bitrate = get_vgmstream_average_bitrate(stream);
|
||||
|
||||
char description[1024];
|
||||
describe_vgmstream(stream, description, 1024);
|
||||
|
||||
NSString * path = [url absoluteString];
|
||||
NSRange fragmentRange = [path rangeOfString:@"#" options:NSBackwardsSearch];
|
||||
|
@ -67,12 +85,16 @@
|
|||
NSNumber *year = [NSNumber numberWithInt:0];
|
||||
NSNumber *track = [NSNumber numberWithInt:0];
|
||||
NSString *title = @"";
|
||||
|
||||
NSString *codec;
|
||||
|
||||
NSNumber *rgTrackGain = [NSNumber numberWithInt:0];
|
||||
NSNumber *rgTrackPeak = [NSNumber numberWithInt:0];
|
||||
NSNumber *rgAlbumGain = [NSNumber numberWithInt:0];
|
||||
NSNumber *rgAlbumPeak = [NSNumber numberWithInt:0];
|
||||
|
||||
codec = get_description_tag(description, "encoding: ", 0);
|
||||
|
||||
STREAMFILE *tagFile = cogsf_create_from_url(tagurl);
|
||||
if (tagFile) {
|
||||
VGMSTREAM_TAGS *tags;
|
||||
|
@ -134,6 +156,7 @@
|
|||
rgAlbumPeak, @"replayGainAlbumPeak",
|
||||
rgTrackGain, @"replayGainTrackGain",
|
||||
rgTrackPeak, @"replayGainTrackPeak",
|
||||
codec, @"codec",
|
||||
@"host", @"endian",
|
||||
nil];
|
||||
|
||||
|
|
|
@ -73,3 +73,9 @@
|
|||
|
||||
/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "87"; */
|
||||
"87.title" = "N/A";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Album Artist:"; ObjectID = "vB6-9J-5qg"; */
|
||||
"vB6-9J-5qg.title" = "Album Artist:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Codec:"; ObjectID = "QPg-Mb-Urn"; */
|
||||
"QPg-Mb-Urn.title" = "Codec:";
|
||||
|
|
|
@ -625,3 +625,9 @@
|
|||
|
||||
/* Class = "NSMenuItem"; title = "Properties"; ObjectID = "Eds-my-DQr"; */
|
||||
"Eds-my-DQr.title" = "Properties";
|
||||
|
||||
/* Class = "NSTableColumn"; title = "Album Artist"; ObjectID = "yGV-gP-Wl6"; */
|
||||
"yGV-gP-Wl6.title" = "Album Artist";
|
||||
|
||||
/* Class = "NSTableColumn"; title = "Codec"; ObjectID = "3A3-9o-Gh9"; */
|
||||
"3A3-9o-Gh9.title" = "Codec";
|
||||
|
|
|
@ -73,3 +73,9 @@
|
|||
|
||||
/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "87"; */
|
||||
"87.title" = "N/A";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Album Artist:"; ObjectID = "vB6-9J-5qg"; */
|
||||
"vB6-9J-5qg.title" = "Album Artist:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Codec:"; ObjectID = "QPg-Mb-Urn"; */
|
||||
"QPg-Mb-Urn.title" = "Codec:";
|
||||
|
|
|
@ -622,3 +622,9 @@
|
|||
|
||||
/* Class = "NSMenuItem"; title = "Properties"; ObjectID = "Eds-my-DQr"; */
|
||||
"Eds-my-DQr.title" = "Properties";
|
||||
|
||||
/* Class = "NSTableColumn"; title = "Album Artist"; ObjectID = "yGV-gP-Wl6"; */
|
||||
"yGV-gP-Wl6.title" = "Album Artist";
|
||||
|
||||
/* Class = "NSTableColumn"; title = "Codec"; ObjectID = "3A3-9o-Gh9"; */
|
||||
"3A3-9o-Gh9.title" = "Codec";
|
||||
|
|
Loading…
Reference in New Issue