Attention! Translated article might be found on my English blog.

2016年7月31日日曜日

スペースチャンネル5 パート2 でナカマズカンの66〜75が埋まらなかった

結構情報を見つけるのに苦労したのでメモ。

スペースちゃんねる5より

382 :スペース花粉症:02/02/28 00:50
何度かこちらで出ていたイッパンジン66-75番をおかげさまで救出できました。
自分なりにまとめたので載せるです。

*
2週目レポート1の最初の二人は救出してもしなくても関係ないっぽい。

次のシューティングバトルでロボは倒し
・最初の2人は無視、3人目から救出。→66、68、70、72、74、75
・5人目から救出。→67、69
・5人目から救出し、途中の70番スペースシップ・ラウンジ嬢(褐色オレンジ服)をミス。→71
・人間はパーフェクトに救出し、途中の35番カンパイまん(両手にジョッキ)をミス。→73  
ようやく取れました。
最低3回はプレイする必要がありますね。めんどくさい〜。



2016年7月30日土曜日

non-interleaved(kAudioFormatFlagIsNonInterleaved)なデータを扱うためのノウハウ


  1. AudioBufferListの設定方法
  2. AudioStreamBasicDescription(ASBD)の設定方法
  3. frame <-> bytes 変換方法

1. AudioBufferListの設定方法

non-interleavedの場合、チャンネル数の分だけ余分にAudioBuffer領域を確保する必要があります。
例えば、
    AudioBufferList *list = calloc(sizeof(AudioBufferList) + sizeof(AudioBuffer) * (numCh - 1), 1);

とすると良いかもしれません。
参考: Core Audio その1 AudioBufferとAudioBufferList | Objective-Audio

2. AudioStreamBasicDescription(ASBD)の設定方法

non-interleavedの場合、ASBDのmBytesPerFrameは1チャンネルのみのバイトサイズを指定する必要があります。

However, when an ASBD has the kAudioFormatFlagIsNonInterleaved flag, the
                    AudioBufferList has a different structure and semantic. In this case, the ASBD
                    fields will describe the format of ONE of the AudioBuffers that are contained in
                    the list, AND each AudioBuffer in the list is determined to have a single (mono)
                    channel of audio data. Then, the ASBD's mChannelsPerFrame will indicate the
                    total number of AudioBuffers that are contained within the AudioBufferList -
                    where each buffer contains one channel. This is used primarily with the
                    AudioUnit (and AudioConverter) representation of this list - and won't be found
                    in the AudioHardware usage of this structure.


参考: CoreAudioTypes.h


3. frame <-> bytes 変換方法

結果として、non-ineterleavedの場合はLPCMであっても

mBytesPerFrame == (mChannelsPerFrame * mBitsPerChannel / 8)

 という式を満たさなくなってしまいます。

そのため、mBytesPerFrameを使っているコードは
bytesPerFrame = (mChannelsPerFrame * mBitsPerChannel / 8)

という変換を常に行う必要があります。

私は以下のコードを利用しています。

+ (UInt32)BPFofASBD:(ASBD)desc {
    if ((desc.mFormatFlags & kAudioFormatFlagIsNonInterleaved) == kAudioFormatFlagIsNonInterleaved) {
        return desc.mChannelsPerFrame * desc.mBitsPerChannel / 8;
    }
    
    return desc.mBytesPerFrame;
}


2016年7月28日木曜日

ExtAudioFileSeek()で-66568(kExtAudioFileError_InvalidSeek)が返ってきてシークできなかった

シークする前にExtAudioFileSetProperty()で kExtAudioFileProperty_ClientDataFormatをセットする必要があるようです。

参考: Audio Unit:音楽ファイルを再生する

以下のコードでは、ファイルと同じASBD(AudioStreamBasicDescription)をセットしています。
- (void)prepareForRead {
    NSAssert(self.fileURL != nil && self.fileRef == NULL, @"");
    
    ExtAudioFileRef fileRef;
    OSStatus err = ExtAudioFileOpenURL((__bridge CFURLRef _Nonnull)(self.fileURL),
                                       &fileRef);
    _ASSERT_NOERR;
    
    self.fileRef = fileRef;
    
    UInt32 size = sizeof(ASBD);
    ASBD desc;
    err = ExtAudioFileGetProperty(self.fileRef,
                                  kExtAudioFileProperty_FileDataFormat,
                                  &size,
                                  &desc);
    _ASSERT_NOERR;
    self.format = desc;
    
    // ExtAudioFileSeek()を行うために必要。
    err = ExtAudioFileSetProperty(self.fileRef,
                                  kExtAudioFileProperty_ClientDataFormat,
                                  size,
                                  &desc);
    _ASSERT_NOERR;
}
.mp3や.m4aなどのnon-LPCMを扱う場合はLPCM用のASBDをclientDataFormatとしてセットしてください。

なお、上記の対策を施してもなおkExtAudioFileError_InvalidSeekが返る場合は、
他の原因があるかもしれません。

参考: ExtAudioFileSeek - Extended Audio File Services Reference
参考: ExtAudioFileSeek returning -66568 (kExtAudioFileError_InvalidSeek)
参考: ExtAudioFile woes

2016年7月27日水曜日

[未解決] Today App ExtensionでmouseEntered: mouseExited:が実行されない

通常、マウスの出入りを追跡したい場合は-[NSView addTrackingArea:]を使う。
しかし、Today App Extensionの場合、マウスカーソルがエリアに入っても
通常のNSViewとは違って反応してくれないようだった。

この件について、以下の記事がとても興味深い。

参考: osx - NSTrackingArea in Today Extension doesn't provide events - Stack Overflow

こちらの環境でも、上記サイトと同じく追跡できなかった。

もちろん、通常のアプリケーションの場合、追跡できることは確認できている。

ひとまずOSのバージョンアップで治っている事を期待して、この問題を放置することにした。

AbeAni1.0b2をリリース

AbemaTVで放送中の番組名を表示するToday機能拡張AbeAni1.0b2をリリースしました。

AbeAni1.0b2.zip - Dropbox

AbeAniとそのアプリケーション拡張AbeAniTodayのMD5ハッシュは以下の通りです。

MD5 (AbeAni.app/Contents/MacOS/AbeAni) = 9e997694710a90c86e3e2dfe4eff053e
MD5 (AbeAni.app/Contents/PlugIns/AbeAniToday.appex/Contents/MacOS/AbeAniToday) = a5ed33c1406caaf62c8fced6e38e2b2b

動作環境はMac OS X 10.10以上でAbemaTVが閲覧できるようなネット環境が必要になります。

なお、β版ですのでPCスキルに自身のある方以外のご利用はご遠慮ください。

2016年7月25日月曜日

RedmineとGitレポジトリを連携させる

単に作業用レポジトリのパスを設定しただけでは上手くいきませんでした。
当方のサーバはCentOS 7ですが、Redmine と Git の連携設定 | EasyRamble の通りにしたらほぼOKでした。
(違いはsudoではなくsu -したくらい)

サービスアカウントではGoogle APIを使ってBloggerに投稿できない。

参考: google api - how to insert post to my blog in server by Service Account without any manual login - Stack Overflow
参考 :blogger - Cannot create or update posts using php v3 library ((403) We're sorry, but you don't have permission to access this resource.') - Stack Overflow

Web Application用のアカウントを作ってユーザ(自分自身)に認証させる必要があるようだ。
俺の数時間を返してくれ!

悲しいので試行錯誤した内容を書いときます。

下準備として、google-api-php-clientを入れて自環境で使えるようにしました。
Composerとかいうphp用パッケージ管理ツールを入れて、
自プロジェクトのトップディレクトリで
$ composer require google/apiclient:^2.0
とかやった気がします。

参考: CentOS6.5にcomposerをインストールする | joppot
参考: GitHub - google/google-api-php-client: A PHP client library for accessing Google APIs

でまあその後も色々すったもんだして、アクセス権が無いことを確認できたコード(笑)は以下の通りです。

<?php
require_once './vendor/autoload.php';

session_start();

$client = new Google_Client();
$client->setApplicationName("[YOUR_APP_NAME]");
$key = '[YOUR_KEY_FILE_PATH';
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $key);
$client->useApplicationDefaultCredentials();
$client->setScopes(array('https://www.googleapis.com/auth/blogger'));

$blogger = new Google_Service_Blogger($client);
$post = new Google_Service_Blogger_Post();
$post->setTitle('自動投稿テスト');
$post->setContent('CentOSからの自動投稿です。');
$data = $blogger->posts->insert('[YOUR_BLOG_ID]', $post);
var_dump($data);
?>

参考: google-api-php-client/UPGRADING.md at master · google/google-api-php-client · GitHub
参考: google api v3 blogger post insert php ajax - Stack Overflow

2016年7月24日日曜日

AbemaTVで放送中の番組名を表示するAbeAni1.0bをリリース

AbemaTVで放送中の番組名を表示するMac用ウィジェット、AbeAni1.0bをリリースいたしました。

AbeAni1.0b.zip - Dropbox

AbeAniとそのアプリケーション拡張AbeAniTodayのMD5ハッシュは以下の通りです。

MD5 (AbeAni.app/Contents/MacOS/AbeAni) = 91ffe3bd1905dcff649ea1765f3e3db0
MD5 (AbeAni.app/Contents/PlugIns/AbeAniToday.appex/Contents/MacOS/AbeAniToday) = fc2ae4cdb407bd378256c96094c9ff93


AbeAniTodayをインストールすると、現在AbemaTVで放送中の番組をこんな感じでTodayウィジェット内で表示してくれます。




動作環境はMac OS X 10.10以上でAbemaTVが閲覧できるようなネット環境が必要になります。

なお、β版ですのでPCスキルに自身のある方以外のご利用はご遠慮ください。
(土日でサクッと作ったので動作検証も十分ではありません)

以上、よろしくお願いします。

2016年7月23日土曜日

日時や時刻を好きなフォーマットにする

NSDateを使うと見せかけてtime.hの関数を使いました。

参考: C言語関数辞典 - strftime

とりあえずyyyymmddという形が必要だった自分の場合、
char suffix[9]; // yyyymmdd\0
time_t now = time(NULL);
struct tm *local = localtime(&now);
strftime(suffix, sizeof(suffix), "%Y%m%d", local);
    
て感じで利用しました。
若干localeが合ってるか気になってるので、
もしダメそうなら記事を更新します。

UIGestureRecognizerがxib上で使えるのはXcode 4.2から

Xcode 4.2以上で作成したxibでUIGestureRecognizerを使っている場合、Xcode 4.1でビルドしようとしたりxibを編集しようとすると
Unable to resolve Interface Builder plug-in dependencies for "MainWindow.xib". Xcode 4 is missing components necessary to load the following classes: IBUITapGestureRecognizer, IBUIPanGestureRecognizer, and IBUIPinchGestureRecognizer. Ensure that Xcode has been properly installed.
というようなエラーが表示される。どうやらxib上でUIGestureRecognizerが使えるようになったのはXcode 4.2かららしい。 4.1以前ではソースコード側でrecognizerを作成/設定していたようだ。その場合は Event Handling Guide for iOS: Gesture RecognizersのListing 1-2 Creating a single tap gesture recognizer programmaticallyを参考にすると良さげ。

UIGestureRecognizerの利用でUIButtonの反応が鈍くなった場合の対処

uigesturerecognizer - UITapGestureRecognizer waiting for second tap, buttons slow - Stack Overflowを参考にすると、どうやらダブルタップ入力待ちのために一瞬固まるように見えてしまうようだ。(もしかするとダブルタップ用ジェスチャを外すと治るのかも)
この対策として、「ボタン類にタップした時はジェスチャ判定を行わない」という処理を追加する。
具体的にはUIGestureRecognizerのdelegateにUIGestureRecognizerDelegateプロトコル対応クラスのオブジェクトをセットし、
そのクラスにてgestureRecognizer:shouldReceiveTouch:を実装する。
UIControl類をタップした時に無視する場合は以下のようなコードで良さそうだ。


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { // ボタンやテキストフィールドに対してはジェスチャ判定は行わない return ![[self hitTest:[touch locationInView:self] withEvent:nil] isKindOfClass:[UIControl class]]; }

ここで、selfはUIViewのサブクラスのオブジェクトでUIGestureRecognizerDelegateプロトコルに対応させてあり、使用するジェスチャのdelegateとしてセット済み。

UnitTestが未終了扱いになる場合はsleepを入れる

テストが速攻終わるような場合、
HogeTest.octest(Tests) did not finish
みたいなwarningが出て、テストが失敗してるわけではないんだけどグリーン表示でもないので今ひとつスッキリしない状況になることがあります。 Some of my unit tests tests are not finishing in XCode 4.4 - Stack Overflowを参考にすると、

「アプリをロードする前にテストが終わっちまうんだよなHAHAHA」

ということらしいので、

 [NSThread sleepForTimeInterval:1.0];
をteardown辺りに入れておくと良いようです。

「スリープさせると上手く行く」系の不具合の1つなんですかね。

10.9 MavericksではControl + パワーキー(電源ボタン)で終了ダイアログを表示する

Mavericksではパワーキーを押すと即スリープするようになってしまい
パワーキーを長押ししなければ終了ダイアログが表示されなくなってしまいましたが、
Controlキーを押しながらであれば長押ししなくても従来通り終了ダイアログが表示されるようです。

また、OS X 10.9 Mavericks から電源ボタンがスリープへ変更 | NEO-SHOCKER.COMによると、Control + Ejectでも良いみたいですが自分のMacBook ProにはEjectが無いので未確認です。

確かに最近はシャットダウンの必要性をあまり感じなくなりましたが、
シャットダウンやら再起動やら使う場面はまだまだ多いと思います。

Mac OSとiOSの融合の一環なんですかね〜

Logitec LAN-GTJU3が10.9 Mavericksでも動作した

LogitecのUSB-LAN変換アダプタLAN-GTJU3が10.9 Mavericksでも問題無く動作しましたので報告します。
ドライバは[[LAN-GTJU3]] - ドライバ & マニュアル(取扱説明書)ダウンロード - ロジテックからダウンロードできます。

速度は測ってませんがUSB3.0+1000Base-T環境が有れば純正品より速いはずだし、値段もツクモで2,480円+ポイント5%だったので安く済むのではないでしょうか。

"ERROR: unable to get the receiver data from the DB!"というログはキャッシュをクリアすれば出なくなる

参考: Solve a AFNetworking warning
~/Library/Caches/[bundle identifier] というディレクトリを削除すると出なくなった。
出るようになった原因はよくわからないが、WebViewを使っているのでネットワーク上のデータにアクセスしているせいかも。
ログ吐いてるのがメインスレッド以外のスレッドだった。
定期的にキャッシュを削除すると良いかも

AVSpeechSynthesizerで喋らせる

iOS >= 7.0
AVFoundation.framework追加後

#import <AVFoundation/AVFoundation.h>
AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"ja-JP"];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"こんにちは"];
utterance.voice = voice;
self.synth = [[AVSpeechSynthesizer alloc] init];
[self.synth speakUtterance:utterance];

声はOS Xで言うkyokoさんなんだと思う。
utteranceは"アタランス"という発音らしい。
アデランスみたいやなw

2016年7月21日木曜日

WebView内のJavaScriptで実行した通信結果を取得する

JavaScriptでの通信結果を取得するには、WebViewのWebResourceLoadDelegateでwebView:resource:didFinishLoadingFromDataSource:を実装すれば良い。
ただし、WebDataSourceが持つsubresourcesを個々に調べる必要がありそう。(subresourcesはWebResourceの配列)

どこと通信したかはURLプロパティ、通信内容はdataプロパティを見る。
dataはNSDataだが、文字列の場合は-[NSString initWithData:encoding:]でNSStringにできる。

参考: WebResourceLoadDelegate Protocol Reference - Apple Developer

Cで現在時刻をUNIX timestampで取得する

基本すぎて思わず検索してしまった…。

time_t t = time(NULL);

で良い。

参考: time

なお、

time_t time = time(NULL);

としようとすると、宣言した変数timeを関数として実行しようとしていると解釈されてエラーになる処理系もあるみたいなので注意。

Safariの"Google で検索"コンテキストメニュー実行時に新規タブを開いて検索する

Safariで"Google で検索"を実行すると選択した文字列で検索できますが、
表示中のページが見えなくなってしまうので今ひとつ使ってませんでした。

が、commandキーを押しながらメニューを選択すると新規タブで検索できることを発見しました!
しかも、シフトやオプションも組み合わせると色々出来るようです。

  • コマンドキー: 新規タブを背面で開いて検索
  • コマンドキー + シフトキー: 新規タブを前面で開いて検索
  • コマンドキー + オプションキー: 新規ウインドウを背面で開いて検索
  • コマンドキー + シフトキー + オプションキー: 新規ウインドウを前面で開いて検索
ktkr!

Obj-CでJSONをNSArrayやNSDictionaryとして読み込む

-[NSJSONSerialization JSONObjectWithData:options:error:]を使う。

参考: iOSでjson | Professional Programmer

例えば

NSData *json = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"json"]];
    
id dic = [NSJSONSerialization JSONObjectWithData:json
                                             options:0
                                               error:nil];

返り値はNSArrayかNSDictionaryになるようなので、中身が不定なJSONの場合は
クラスをチェックする必要がありそうです。

2016年7月17日日曜日

Xbox360版バイオハザード0 HDリマスターで「反撃の鐘を鳴らせ」を取得した

参考: biohazard0 バイオハザード0 攻略 (Shift-JIS)

3回トライして3回とも焼夷弾Aパターンでした。
B3のプレイグローラーが居る部屋のヒルの色が両方とも青だった気がしたけど、
HD版だと微妙に変わってたりするんだろうか…。

なお、XBOX360 実績解除スレまとめ @wiki - バイオハザード0 HDリマスター にある通り、
100個集めてクリアすれば他のリワードも取得できるようですね。
何度もやらずに済んで良かった…と思いきや!
「荷物は任せて」とか「館の掃除人」とかいう実績があるみたいですね…。
しかもバイオハザード0 HDリマスター - PSVita トロフィーまとめwikiを見ると、
ハードのクリアデータだとリーチハンターもハードになるようですね…。

うーん、ハードで殲滅はちょっと厳しいかも…。
つらあじ…。


WebViewのJavaScriptを無効化する

WebViewが持つWebPreferencesのjavaScriptEnabledをNOに設定すれば良い。

self.view.preferences.javaScriptEnabled = NO;

参考: WebPreferences Class Reference - developer.apple.com

なお、xibでインスタンスを作っている場合はEnable JavaScriptというチェックボックスがあったはず。
ソースコード中で自分でallocした場合はデフォルトでYESになっている模様。

2016年7月16日土曜日

丸い氷を作る製氷器を買ってみた

これですね。

 

ちなみに自分はamazonではなく、ハンズの店舗で買いました。
(通販では取り扱ってなさそう)

amazonのレビューではちゃんと丸い氷を作れている方が多いみたいですね。
自分の環境ではなかなか成功しません。どうしても上側が欠けてしまいます。



水の量が足りないんでしょうかね。
もうちょっと研究してみたいと思います。


SheepShaver上のMac OS 9でファンタスマゴリアが動いた

プリメ2Myst-Jに続き、ファンタスマゴリアで試してみました。




こちらも無事動作することを確認。
ただこちらもプチプチの音割れしてしまっています。
ホストの処理能力が上がれば改善するのかもしれません。

ダンマス2スカルキープも持ってるはずなんだけど見つからんかった…
見つかったら試してみます。

SheepShaver上のMac OS 9でMyst-Jが動いた

先日のプリメ2に続きMyst-Jを発掘したので試してみたところ、
無事動きました。


不具合といえば、たまに音割れするくらいでしょうか。
動画として上げた方が良いのかなこういうのは。

2016年7月15日金曜日

古いbinary形式の.nibをXML形式の.xibに変換する

Xcodeのproject navigator(ウインドウの左のペイン)でnibファイルを選択し、
[File]-[Export...]メニューを選択します。

"File Format"ポップアップメニューで"Interface Builder Cocoa XIB"を選択して書き出します。



XML形式の.xibファイルとして書き出されます。

2016年7月13日水曜日

続・Vistaでポップアップ広告が何度も表示され困った

前回から1ヶ月も経たないうちに、また親父のPCがアドウェアに感染しました。

前回と違い、タスクスケジューラには何もセットされておらず、
レジストリも特にそれらしいものは無さそう。

しかしmsconfigのスタートアップ項目にwebasdatという怪しい項目を発見。
スタートアップ項目をオフにするとポップアップが出なくなりました。
やはりお前か!

その後ネットを検索してみると、asa-one.comのアダルト広告の削除方法 | スマホ上手という記事のコメントで同じようにwebasdatに感染したケースを発見。
やはりアダルト系アドウェアなようでした。

念のためadwcleanerをインストールしてスキャンしてみましたが、
スタートアップ項目から消せませんでした。
その代わり他のアドウェアが大量にヒット…。勘弁してくれ親父…。

2016年7月10日日曜日

v3のAudioUnitをAudioComponentInstanceNew()しようとするとkAudioUnitErr_CannotDoInCurrentContextが返る

Xcode 7.3のtarget templateで作ったAudioUnitがAudioComponentInstanceNew()で-10863(kAudioUnitErr_CannotDoInCurrentContext)を返して失敗しており、
その原因を探っていました。

なお、そのAudioUnitはauvaltool -vでも失敗してしまうようでした。

$ auvaltool -v aufx vibr Symi

    AU Validation Tool
    Version: 1.6.1a1 
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options

--------------------------------------------------
VALIDATING AUDIO UNIT: 'aufx' - 'vibr' - 'Symi'
--------------------------------------------------
Manufacturer String: Shakeyama
AudioUnit Name: VibratoUnit
Component Version: 1.6.0 (0x10600)

* * PASS
--------------------------------------------------
TESTING OPEN TIMES:
COLD:
Time to open AudioUnit:         333.540 ms
WARM:
Time to open AudioUnit:         101.261  ms
This AudioUnit is a version 3 implementation.
FIRST TIME:
FATAL ERROR: Initialize: result: -50

メッセージを読むと、どうやらversion 3のAudioUnitのようです。
version 3のAudioUnitは例えばSwiftのAVAudioUnit.instantiateWithComponentDescription()で初期化できるようです。
参考: Shared/SimplePlayEngine.swift

色々試行錯誤した結果、
Obj-Cでは+[AUAudioUnit instantiateWithComponentDescription:options:completionHandler:]、
CではAudioComponentInstantiate()で同様に初期化できることを確認しました。

ただし、これらの方法は非同期に初期化が行われるので、
初期化後のコードをblock内に書くようホスト側を修正しなければなりません。

version 2のAudioUnitを作りたい場合はAudio Unit Examples (AudioUnit Effect, Generator, Instrument, MIDI Processor and Offline)を参考に作るといいかもしれません。
当面はこちらの方が楽かな…。

2016年7月8日金曜日

インストールされているAudioUnit一覧を確認する

Finding Audio Units plug-ins on your computer - Apple Supportによると、

  • Apple純正のAudioUnitはファイルとして存在しない
  • サードパーティ製のAudioUnitは/Library/Audio/Plug-Ins/Componentsか~/Library/Audio/Plug-Ins/Componentsに有る
だそうです。
Apple純正のものも含めて確認したい場合はauvaltoolを使うと良さげです。
こちらの環境での実行結果は以下の通りです。

$ auvaltool -a

    AU Validation Tool
    Version: 1.6.1a1 
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options

aufx bpas appl  -  Apple: AUBandpass
aufx dcmp appl  -  Apple: AUDynamicsProcessor
aufx dely appl  -  Apple: AUDelay
aufx dist appl  -  Apple: AUDistortion
aufx filt appl  -  Apple: AUFilter
aufx greq appl  -  Apple: AUGraphicEQ
aufx hpas appl  -  Apple: AUHipass
aufx hshf appl  -  Apple: AUHighShelfFilter
aufx lmtr appl  -  Apple: AUPeakLimiter
aufx lpas appl  -  Apple: AULowpass
aufx lshf appl  -  Apple: AULowShelfFilter
aufx mcmp appl  -  Apple: AUMultibandCompressor
aufx mrev appl  -  Apple: AUMatrixReverb
aufx nbeq appl  -  Apple: AUNBandEQ
aufx nsnd appl  -  Apple: AUNetSend
aufx nutp appl  -  Apple: AUNewPitch
aufx pmeq appl  -  Apple: AUParametricEQ
aufx raac appl  -  Apple: AURoundTripAAC
aufx rogr appl  -  Apple: AURogerBeep
aufx sdly appl  -  Apple: AUSampleDelay
aufx tmpt appl  -  Apple: AUPitch
aupn ambi appl  -  Apple: AUSoundFieldPanner
aupn hrtf appl  -  Apple: HRTFPanner
aupn sphr appl  -  Apple: AUSphericalHeadPanner
aupn vbas appl  -  Apple: AUVectorPanner
aumu dls  appl  -  Apple: DLSMusicDevice
aumu msyn appl  -  Apple: AUMIDISynth
aumu samp appl  -  Apple: AUSampler
aumu ssyn appl  -  Apple: SinSynth
aumu synt YMCK  -  Magical 8bit Plug
aumu Pas2 Demo  -  __MyCompanyName__: MyInstrument
aumx 3dem appl  -  Apple: AUSpatialMixer
aumx 3dmx appl  -  Apple: AUMixer3D
aumx mcmx appl  -  Apple: AUMultiChannelMixer
aumx mspl appl  -  Apple: AUMultiSplitter
aumx mxmx appl  -  Apple: AUMatrixMixer
aumx smxr appl  -  Apple: AUMixer
aufc conv appl  -  Apple: AUConverter
aufc defr appl  -  Apple: AUDeferredRenderer
aufc ipto appl  -  Apple: AUNotQuiteSoSimpleTime
aufc merg appl  -  Apple: AUMerger
aufc nutp appl  -  Apple: AUNewTimePitch
aufc splt appl  -  Apple: AUSplitter
aufc tmpt appl  -  Apple: AUTimePitch
aufc vari appl  -  Apple: AUVarispeed
auou ahal appl  -  Apple: AudioDeviceOutput
auou def  appl  -  Apple: DefaultOutputUnit
auou genr appl  -  Apple: GenericOutput
auou sys  appl  -  Apple: SystemOutputUnit
auou vpio appl  -  Apple: AUVoiceProcessor
augn afpl appl  -  Apple: AUAudioFilePlayer
augn nrcv appl  -  Apple: AUNetReceive
augn sspl appl  -  Apple: AUScheduledSoundPlayer
augn ttsp appl  -  Apple: AUSpeechSynthesis
auol tmpt appl  -  Apple: AUTimePitch
auol vari appl  -  Apple: AUVarispeed

左からタイプ、サブタイプ、製造元、ユニット名、だったと思います。
詳しくはauvaltool -hで確認願います。

ExtAudioFileを使ってMP3ファイルをPCMデータとして取得する

-- 2016/07/10追記 --

私が下の方で書いたコードだと、ファイルによってはいつまで経っても
whileループから抜け出さないケースに遭遇しました。

どうやらkExtAudioFileProperty_FileLengthFramesが返す総フレーム数と
実際の総フレーム数が異なるためwhileループの条件がfalseにならず
延々と読み込み処理を続けてしまうようでした。

ExtAudioFileRead()はファイルがEOFに達するとフレーム数には0が入るようです。
参考: Extended Audio File Services Reference

この動作を利用してExtAudioFileRead()の後に
        // 0ならend-of-fileらしい
        if (numFramesToRead == 0) {
            break;
        }
という処理を入れ、ループを抜ける仕組みを入れた方が良いでしょう。

-- 2016/07/10追記終了 --

前回の続き、というかExtAudioFileを使えば簡単にnon-LPCMを変換できることに気づきました…。
というわけで変更後のソースは以下の通り。
#include <CoreServices/CoreServices.h>
#include <AudioToolbox/AudioToolbox.h>

#define _ERR_RETURN(err)  {if(noErr != err){printf("%d - err:%d\n", __LINE__, err); return err;}}

typedef AudioStreamBasicDescription ASBD;
typedef AudioBufferList ABL;

OSStatus DecodeExtFileAtPath(const char *inputFilePath, const char *outputFilePath);
void SetStandardDescription(AudioStreamBasicDescription *descPtr);
static inline ABL MakeABL(UInt32 ch, UInt32 bytes, void *buf);

int main(int argc, char* argv[]) {
    if (argc != 3) {
        printf("usage: ./Mp3Decoder inFile outFile\n");
        return 0;
    }
    
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            OSStatus err = DecodeExtFileAtPath(argv[1], argv[2]);
            printf("done. err:%d\n", err);
    });
    
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
    
    return 0;
}

/*
 inputFilePathで指定したオーディオファイルを読み込み
 CDフォーマット(ただしbig-endian)のバイナリデータとして
 outputFilePathにファイルとして書き出す。
 主にMP3, AACなどnon-LPCMデータのLPCMデータへの変換動作確認用。(一応.wav, .aiffも読める)
 処理に失敗した場合は失敗箇所でのOSStatusを返す。
 */
OSStatus DecodeExtFileAtPath(const char *inputFilePath, const char *outputFilePath) {
    CFURLRef url = CFURLCreateWithBytes(NULL,
                                        (const UInt8 *)inputFilePath,
                                        strlen(inputFilePath),
                                        kCFStringEncodingUTF8,
                                        NULL);
    
    ExtAudioFileRef file;
    OSStatus err = ExtAudioFileOpenURL(url,
                                       &file);
    _ERR_RETURN(err);
    
    CFRelease(url);
    
    ASBD clientDesc;
    SetStandardDescription(&clientDesc);
    UInt32 size = sizeof(clientDesc);
    
    err = ExtAudioFileSetProperty(file,
                                  kExtAudioFileProperty_ClientDataFormat,
                                  size,
                                  &clientDesc);
    _ERR_RETURN(err);
    
    SInt64 fileFrameLength;
    size = sizeof(fileFrameLength);
    err = ExtAudioFileGetProperty(file,
                                  kExtAudioFileProperty_FileLengthFrames,
                                  &size,
                                  &fileFrameLength);
    _ERR_RETURN(err);
    
    const UInt32 numFramesToReadInACycle = 1024*1024;
    const UInt32 bufferSize = clientDesc.mBytesPerFrame * numFramesToReadInACycle;
    void *buffer = malloc(bufferSize);
    FILE *fp = fopen(outputFilePath, "w");
    SInt64 frameOffset = 0;
    while (frameOffset != fileFrameLength) {
        UInt32 numFramesToRead = numFramesToReadInACycle;
        AudioBufferList list = MakeABL(clientDesc.mChannelsPerFrame,
                                       bufferSize,
                                       buffer);
        err = ExtAudioFileRead(file,
                               &numFramesToRead,
                               &list);
        _ERR_RETURN(err); 
        
        fwrite(list.mBuffers[0].mData,
               list.mBuffers[0].mDataByteSize,
               1,
               fp);
        
        frameOffset += numFramesToRead;
    }
    fclose(fp);
    free(buffer);
    
    err = ExtAudioFileDispose(file);
    return err;
}

/*
 descPtrCD音質のASBDをセットする。
 ただし、big-endianなのでlittle-endianなプロセッサで扱う場合は注意
 */
void SetStandardDescription(AudioStreamBasicDescription *descPtr) {
    descPtr->mSampleRate = 44100.0;
    descPtr->mFormatID = kAudioFormatLinearPCM;
    descPtr->mFormatFlags = kAudioFormatFlagIsBigEndian |
                            kAudioFormatFlagIsSignedInteger |
                            kAudioFormatFlagIsPacked;
    descPtr->mBytesPerPacket = 4;
    descPtr->mBytesPerFrame = 4;
    descPtr->mFramesPerPacket = 1;
    descPtr->mChannelsPerFrame = 2;
    descPtr->mBitsPerChannel = 16;
}

static inline ABL MakeABL(UInt32 ch, UInt32 bytes, void *buf) {
    ABL list;
    list.mNumberBuffers = 1;
    list.mBuffers[0].mNumberChannels = ch;
    list.mBuffers[0].mDataByteSize = bytes;
    list.mBuffers[0].mData = buf;
    return list;
}
AudioConverterが不要なのは良いですね。(実際はExtAudioFileが内包しているようです)
kExtAudioFileProperty_FileLengthFramesで総フレーム数が取得できるのもありがたい…。
まだVBRなファイルは試してませんが、問題なく行けそうな気がします。