What we talk about when we talk about Technology

技術について語ります。

CoreAudio

変調指数と音量の時間変化(エンベロープ)

音の減衰は、 音量の減衰 変調指数の減衰 の二つがある。 この二つを時間変化の仕方を変えることで、 音の減衰を調節できる。 この時間変化の様子をエンベロープといい、 横軸に時間、縦軸に音量・変調指数をとったグラフがよく使われる。 allabout.co.jp

Frequency Modulation

FMは異なる2つの周波数を組み合わせることで、 いろんな音色を生み出す変調の方式のこと。 2つの周波数(それぞれキャリア周波数Cとモジュレーター周波数M)の比のことを C:M比といい、C:M比により生じる周波数成分(側帯波)を調整する。 音色=(側帯波の数)は …

Audio Unit Types一覧

Audio Unit Types kAudioUnitType_Output kAudioUnitType_MusicDevice kAudioUnitType_MusicEffect kAudioUnitType_FormatConverter kAudioUnitType_Effect kAudioUnitType_Mixer kAudioUnitType_Panner kAUdioUnitType_OfflineEffect kAudioUnitType_Genera…

マイクの入力をそのまま再生する

RemoteIOのinputとoutputを直接つなぐと、 入力をそのまま出力することができる。 var remoteIONode: AUNode = 0 var remoteIOUnit: AudioUnit = nil NewAUGraph(&mAuGraph) AUGraphOpen(mAuGraph) var cd = AudioComponentDescription(componentType: kAudi…

AudioUnitのキー一覧

Converter unit kAudioUnitType_FormatConverter kAudioUnitSubType_AUConverter kAudioUnitManufacturer_Apple iPod Equalizer unit kAudioUnitType_Effect kAudioUnitSubType_AUiPodEQ kAudioUnitManufacturer_Apple 3D Mixer unit kAudioUnitType_Mixer k…

ラ!

結局ほとんどQiitanの記事のまんま let renderCallback: AURenderCallback = { inRefCon, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData in var def: SineWaveDef = UnsafeMutablePointer(inRefCon).memory let freq = 440 * 2.0 * M_PI…

音は出るが...

以下の形にして、再生してみたところ、音は出るも、ただのノイズ。。。 おそらくAudioUnitに設定するASBDがおかしいのだと思うが、 deprecateな値が多く、解決方法はまだみつかってません。 let renderCallback: AURenderCallback = { inRefCon, ioActionFla…

AudioUnitのAURenderCallbackで2チャンネル分取り出す

swiftだとAudioBufferListが配列として取り出せず、困っていたらこの記事を発見 qiita.com 以下のようにして配列として取り出し、2チャンネル取得しました。 サインカーブが鳴らせるか、明日やってみます。 let renderCallback: AURenderCallback = { inRefC…

Extended Audio File Service でリニアPCM→AppleLossless

Extended Audio File Serviceを使えばお手軽にリニアPCMファイルを圧縮ファイルに変換することができる。 1.読み出すファイルを開く var error: OSStatus var infile : ExtAudioFileRef = nil error = ExtAudioFileOpenURL(fromURL, &infile) 2.クライアント…

AudioConverterServiceでリニアPCM→AppleLossless

基本的にはMP3→リニアPCMの変換と同様だが、以下の変更点がある。 ・マジッククッキーに対応する。 AppleLossless形式のファイルからの伸展、AppleLossless形式のファイルへの圧縮にはマジッククッキーと呼ばれるものが必要となる。 伸展の場合にはオーディ…

AudioConverterServiceでMP3→リニアPCM②

1.変換前のデータを受け渡すためのバッファを用意する 2.受け渡すパケット数を計算する 3.受け取るパケット数を計算する 4.変換後のデータを受け取るためのバッファを用意する 5.ループ内でAudioConverterFillComplexBufferを呼び出す 6.変換されたパケット…

AudioConverterServiceでMP3→リニアPCM➀

変換したいファイルのパスを取得 let fromPath = NSBundle.mainBundle().pathForResource("loop", ofType: "mp3")! let fromURL = NSURL(fileURLWithPath: fromPath) 2.書き出す先のパスを作成 let filePaths = NSSearchPathForDirectoriesInDomains(.Docume…

音の高さと周波数の関係

人が感じる音の高さが1オクターブ上がるのに、 周波数は2倍になる必要があり、線形ではありません。 よって音の高さをUI部品等で変換するときは、そのことを考慮し、 変化量を音の高さと線形に対応させなければならないでしょう。 音の高さと周波数は以下の…

Swiftのクラス⇄UnsafeMutablePointer<Void>

C言語APIを触っていると、UnsafeMutablePointerにselfを入れたりすることがあって、 これどうするんだ。。。となることがある。 そんなときは以下のメソッドでブリッジしてあげる。 func bridge<T: AnyObject>(obj: T) -> UnsafeMutablePointer<Void> { return UnsafeMutablePoin</void></t:>…

Audio Unitのインスタンス化と初期化

Audio Unit を使える状態にするには以下のとおり。 import AudioUnit var cd = AudioComponentDescription(componentType: kAudioUnitType_Output, componentSubType: kAudioUnitSubType_RemoteIO, componentManufacturer: kAudioUnitManufacturer_Apple, co…