2016-07-19 20 views
0

私はnativescriptを初めて使い、iosバージョンアプリを開発しています。 Audio Queueコールバックの処理に問題があります。Nativescriptでios core audio(AudioQueue)にアクセスするには

デバイスのマイクで生のオーディオバッファデータをキャプチャする必要があります(入力レベルをミリ秒単位で評価する)1 これを行うには、カスタムプラグインからiOSネイティブAudioToolBox/AudioQueueNewInput APIを呼び出そうとしています。

最後に、

はここに私のコードです...それはエラーなしで実行されますが、コールバック「inCallbackProcは」解雇されることはありません。このコードを実行するときに

var kSamplingRate = 44100; 
var inUserData = null; 
var inCallbackRunLoopMode = kCFRunLoopDefaultMode; 
var inFlags = 0; 
//var outAQ = AudioQueueRef.alloc().init(); // error 
//var outAQ = new OpaqueAudioQueue(); //error 
var outAQ; 
var inFormat = 
    new AudioStreamBasicDescription(
    kSamplingRate, 
    kAudioFormatLinearPCM, 
    kLinearPCMFormatFlagIsFloat, 
    4, 
    1, 
    4, 
    1, 
    8, 
    0 
); 

var buffers = [null, null, null]; 

var audiomodule = { 
    inCallbackProc : function(
     inUserData, 
     inAQ, 
     inBuffer, 
     inStartTime, 
     inNumberPacketDescriptions, 
     inPacketDescs 
     ){ 
      console.log("callbacked"); 
     } 
    ,record: function(){ 
     console.log("recordstarting"); 

     AudioQueueNewInput (
     inFormat, 
     this.inCallbackProc.copy, 
     inUserData, 
     CFRunLoopGetCurrent(), 
     inCallbackRunLoopMode, 
     inFlags, 
     outAQ 
     ); 
     for (i in [0, 1, 2]) { 
      AudioQueueAllocateBuffer(outAQ, 256, buffers[i]) 
      AudioQueueEnqueueBuffer(outAQ, buffers[i], 0, null) 
      } 

    AudioQueueStart(outAQ, null); 
    } 

}; 

module.exports = audiomodule; 

app.jsが

var MyPlugin = require("myplugin"); 

exports.loaded = function(args) { 
    var page = args.object; 
    if (page.ios) { 
     MyPlugin.record(); 
    } 
}; 

、私は「エラーなしでコンソールログに "recordstarting" を見つけることができますが、見つけることができません

myplugin.ios.jsコールバック "。

私はこの文書を読んでいます。 NativeScript Doc - Marshaling

誰でも助けてくださってありがとうございます。

+0

私は同様のオーディオプラグインがNativeScriptのために存在することを発見し、あなたがオーディオを再生すると、記録のためにそれを使用することができます - HTTPS ://github.com/bradmartin/nativescript-audio –

+0

こんにちはNikolay、そのプラグインはAVAudioRecorderに基づいています。そのAPIは、待ち時間のために私のアプリには適していないかもしれません。 pls [this](http://stackoverflow.com/a/7402810/6606449)を参照してください。私は生のオーディオをキャプチャする必要があります。 – shige

+0

あなたのプロジェクトには、生のオーディオをキャプチャするのに適したプラグインが見つかりませんでした。ただし、ここで説明した手順を使用できます.http://stackoverflow.com/questions/6039291/simplest-way-to-capture-raw-audio-from-audio-input-for-real-time-processing-on-aこの機能を提供する独自のプラグインを作成することができます。もう一つの選択肢は、生のオーディオサポートのbradmartinのプラグインレポに新しい問題を記録することです。 –

答えて

1

自分のプラグインを作成することにしました。
独自のObjective-cライブラリは、ネイティブAudioRecord(Core Audio)APIをラップします。
独自のプラグインjsは、ライブラリ関数を公開しています。
最後に、コールバックの処理も機能します。

てMyLibrary(Objective-Cの)

@property (nonatomic, copy) void (^completionHandler)(NSString *result); 

myplugin.ios.js

mylibrary.completionHandler = (
function(response){ 
    console.log(response); 
} 
関連する問題