我是nativescript的新手,现在正在开发ios版本的应用程序。 我在处理音频队列回调时遇到了一些麻烦。
我需要通过设备麦克风捕获原始音频缓冲区数据。(以毫秒为单位评估输入级别)1 为此,我尝试从我的自定义插件调用ios原生AudioToolBox / AudioQueueNewInput API。
最后,它运行时没有错误,但回调“inCallbackProc”永远不会被触发......
这是我的代码。
myplugin.ios.js
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”,没有错误,但找不到“回调”。
我已阅读此文档。 NativeScript Doc - Marshaling
感谢任何人的帮助或评论。
答案 0 :(得分:1)
我决定创建自己的插件 我自己的Objective-c库包装了原生的AudioRecord(Core Audio)API 并且自己的插件js暴露了库函数 最后,它的工作原理,回调工作也是如此。
在MyLibrary(目标-c)的
@property (nonatomic, copy) void (^completionHandler)(NSString *result);
myplugin.ios.js
mylibrary.completionHandler = (
function(response){
console.log(response);
}