上周公众号发布的以下文章:
本期知识小集的主要内容包括:
- 使用 Audio Queue 进行流式录音
- JSON 格式化显示
- Xcode 10 文件无法关联的 bug
使用 Audio Queue 进行流式录音
作者 : halohily
在 iOS 中录音的需求很常见,对于大多数场景采用系统提供的
AVAudioRecorder
。指定一个音频文件存储路径,即可开启录音。然而,这样我们只能在录音结束之后获得音频数据,无法实时进行。讯飞输入法的
ASR SDK
中提供了一个写入音频 data 的接口,就是期望我们自己采用流式录音,录音过程中可以实时获得音频数据,从而接连不断地传递给讯飞的 SDK。
对于流式录音,这里推荐使用
Audio Queue
实现。它同样是官方提供的组件,只不过相对于
AVFoundation
更底层一些。使用它录音,首先初始化一个音频队列 AudioQueue,然后是三个
buffer
,用来存储流式录音过程中的每一帧音频 data。注意,通过
buffer
大小的不同设置,即可实现每一帧时长的控制。最后,即是实现每一帧完成后的回调函数,在这个函数中完成音频数据的实时传递。
相反的,它同样支持音频的流式播放。除此之外,它还可以满足对音频编码的不同需求。
参考资料
JSON 格式化显示
作者 : Lefe_x
有时候我们想查看网络请求的内容,我们往往看到的结果是(格式非常混乱):
{"status":{"msg":"success","code":0},"data":{"book_info":[{"doc_id":"a4bdba4cf7ec4afe04a1df7c1","author":"Lefe_x","is_white_book":0,"rec_tag":"热门推荐","small_cover_url":"http:\/\/a3.att.hudong.com\/42\/58\/01300000820274128088583100471.jpg","rec_reason":"十分好看","book_title":"孩子你慢慢来"},{"doc_id":"a4bdba4cf7ec4afe04a1df7c3","author":"林语堂","is_white_book":0,"rec_tag":"","small_cover_url":"http:\/\/image.hexun.com\/book\/upload\/2013\/03\/07\/153148_20_c.jpg","rec_reason":"容易理解","book_title":"亲爱的安德烈"}]}}
复制代码
上面这中方式,看起来非常不友好。如果能够显示成下图的格式,是不是很爽?我们来看看具体的实现。
想实现上面的效果,可以使用 JS 中的
JSON.parse
和
JSON.stringify
方法对 json 字符串转换,把转换后的结果使用 UITextView 或者 UILabel 显示出来即可。使用 UITextView 的好处是,内容太长直接可以滚动。图中的实现方式是使用的
WKWebView
,目的是给
Json 高亮
(高亮代码可以参考 highlight.min.js)。
iOS 中调用 JS 中的方法我们在知识小集的
《一本走心的JS-NA 交互电子书》
上有很详细的讲解,还不会
JS-NA
交互的朋友可以在知识小集公众号输入 jn 即可免费获得。
把用到的 JS 方法定义到一个 JS 文件中,命名为
json_parse.js
:
function parseJson(string) {
try {
return JSON.parse(string);
} catch (error) {
return null;
}
}
function renderJson(json) {
return JSON.stringify(json, null, 2);
}
复制代码
iOS 端的代码如下:
NSString *json = @"iOS中的json字符串";
NSString *filePath = [[NSBundle