小编Ser*_*les的帖子

OCaml:在另一个内部匹配表达式?

我目前正在与OCaml合作开展一个小项目; 一个简单的数学表达式简化器.我应该在表达式中找到某些模式,并简化它们,以便表达式中的括号数减少.到目前为止,我已经能够实现大多数规则,除了两个,为此我决定创建一个递归的,模式匹配的"过滤器"函数.我需要实现的两个规则是:

- 将形式a - (b + c)或类似形式的所有表达式转换为a - b - c

- 将形式a /(b*c)或类似的所有表达式转换为a/b/c

...我怀疑它会相当简单,一旦我设法实现了一个,我就可以轻松实现另一个.但是,我遇到了递归模式匹配函数的问题.我的类型表达式是这样的:

type expr =
 | Var of string            (* variable *)
 | Sum of expr * expr       (* sum  *)
 | Diff of expr * expr      (* difference *)
 | Prod of expr * expr      (* product *)
 | Quot of expr * expr      (* quotient *)
;;
Run Code Online (Sandbox Code Playgroud)

我主要遇到麻烦的是在比赛表达中.例如,我正在尝试这样的事情:

let rec filter exp =   
    match exp with       
    | Var v -> Var v                        
    | Sum(e1, …
Run Code Online (Sandbox Code Playgroud)

ocaml pattern-matching

49
推荐指数
2
解决办法
3万
查看次数

Android上的低延迟音频播放

我目前正在尝试最小化简单应用程序的音频延迟:

我在PC上有一个视频,我正在通过RTP将视频的音频传输到移动客户端.使用非常相似的缓冲算法,我可以在iOS上实现90ms的延迟,但在Android上可以实现±180ms的可怕延迟.

我猜测差异源于Android上众所周知的延迟问题.

然而,在阅读了一下后,我发现了这篇文章,其中指出:

  1. 自Android 4.1/4.2以来,在某些设备中可以使用低延迟音频.

  2. 使用libpd可以实现低延迟音频,libpd是Android的纯数据库.

我有两个问题,与这两个陈述直接相关:

  1. 我在哪里可以找到有关Jellybean中新的低延迟音频的更多信息?这是我能找到的全部,但它缺乏具体的信息.如果这些更改对我来说是透明的,或者是否有一些新的类/ API调用我应该实现我注意到我的应用程序中的任何更改?我正在使用AudioTrack API,我甚至不确定它是否应该从这种改进中获益,或者我是否应该研究其他一些音频播放机制.

  2. 我应该考虑使用libpd吗?在我看来,这是我实现更低延迟的唯一机会,但由于我一直认为PD是一个音频合成实用程序,它是否真的适合于只从网络流中抓取帧并播放它们的项目?我不是在做任何合成.我跟踪错误的踪迹吗?

另外需要注意的是,在有人提到OpenSL ES之前,本文非常清楚地表明使用它时不应期望延迟有所改善:

"由于OpenSL ES是本机C API,调用OpenSL ES的非Dalvik应用程序线程没有与Dalvik相关的开销,例如垃圾收集暂停.但是,除此之外,使用OpenSL ES没有额外的性能优势.特别是,使用OpenSL ES不会导致比平台通常提供的更低的音频延迟,更高的调度优先级等."

audio android opensl

39
推荐指数
3
解决办法
4万
查看次数

可以使用N个密钥创建的二叉搜索树的可能数量由第N个加泰罗尼亚数给出.为什么?

这困扰了我一段时间.我知道,如果N键以二叉搜索树的形式排列,可以创建的树的可能数量对应于加泰罗尼亚序列中的第N个数字.

我一直试图确定这是为什么; 无法找到任何甚至可能试图直观地解释它的东西我诉诸于SO的集体知识.我找到了计算可能树木数量的其他方法,但它们似乎不太直观,除了如何使用它之外没有提供任何解释.加上维基页面(上面的链接)甚至可以显示带有3个键的可能树形图的图像,这将使我认为有一个很好的和整洁的解释可以被听到(不用说,不包括在文章中) ).

提前致谢!

math tree binary-tree binary-search

21
推荐指数
2
解决办法
1万
查看次数

Prolog:过滤清单?

我目前正在开发一个关于Prolog的非常短的项目,并且试图将我创建的"过滤器"应用到列表中.我有你可以称之为过滤器的东西,但我无法应用它.如果我说明一下会更好:

filter(A, B) 
Run Code Online (Sandbox Code Playgroud)

...如果满足某些条件,则输出'true'.

filterList(A, [X, Y, Z])
Run Code Online (Sandbox Code Playgroud)

...输出一个列表,其中包含第二个参数中使过滤器输出为false的所有元素.(因此,如果过滤器(A,X)为真,则输出为[Y,Z]).

我已准备好"过滤器"功能,但现在我需要将它应用于第二个示例中所示的列表,排除在应用第一个参数时过滤器返回true的所有元素.

因此,如果过滤器是简单的A == B,则该函数应该接收A [A,B,A,C,D,A]并输出[B,C,D],删除了所有元素显然,过滤器适用.

我在功能的基本结构方面遇到了麻烦,所以如果有人能为这样的功能提供一个基本的轮廓,那将会有很大的帮助.我尽可能地简化了我的情况,所以我可以拿出你能提供的任何东西,并根据我的需要进行修改.

提前致谢!

list prolog filter meta-predicate

16
推荐指数
2
解决办法
1万
查看次数

Haskell:将文件中的每一行插入到列表中

我目前正在与Haskell合作,并发现自己遇到了一些麻烦.我应该在"dictionary.txt"文件中读取并插入列表中的每一行,但我似乎无法这样做.我有这个代码:

main = do
    let list = []
    loadNums "dictionary.txt" list

loadNums location list = do
    inh <- openFile location ReadMode
    mainloop inh list
    hClose inh

mainloop inh list = do 
    ineof <- hIsEOF inh
    if ineof
        then return ()
        else do 
            inpStr <- hGetLine inh
            inpStr:list
            mainloop inh list
Run Code Online (Sandbox Code Playgroud)

它应该得到每一行(我知道它确实得到每一行,因为用"putStrLn inpStr"替换"inpStr:list"正常工作,显示所有行),并将其插入列表但我得到以下错误:

Couldn't match expected type `IO' against inferred type `[]'
Run Code Online (Sandbox Code Playgroud)

可能是因为hGetLine不是一个字符串,而是一个IO字符串,我不知道如何处理以获得一个正确的字符串,我可以在我的列表中插入.我不知道如何解决这个问题,或者问题究竟是什么,但如果有人知道如何正确地将文件中的每一行都放入列表中,我会很感激.

提前致谢!

io haskell file input

11
推荐指数
2
解决办法
9665
查看次数

SVN复制:创建目标路径(如果不存在)

当我将SVN服务器中的目录复制到同一服务器中的另一个目录时,是否有一些选项可用于创建目录以防它不存在?例如:

svn copy file:///home/svn/folder/app/trunk file:///home/svn/folder/app/branches/release

...什么时候没有/ branches /文件夹?我知道如果我只想创建一个单级目录(如果命令停在"/ branches",它可以工作,但是我想将其进一步复制到"release"),我可以这样做.但是,如果我尝试该命令,它会抱怨缺少/ branches /文件夹来创建/ release文件夹.

任何明显或有创意的解决方案?我只是喜欢创建我指定的路径结构的东西,如果它发现它不存在.

svn copy

10
推荐指数
1
解决办法
5356
查看次数

Android Lollipop:ImageView忽略fitsSystemWindows属性(透明状态栏)

我正在开发一个我想要启用透明状态栏的应用程序.我想要一个ImageView(我的scaleType属性需要)覆盖整个屏幕,以便图像显示在状态栏下方.这是我的布局:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:src="@drawable/picture" />

        <android.support.v7.widget.Toolbar
            (...toolbar stuff...)
        />

        (...some other stuff...)

    </RelativeLayout>

    <include layout="@layout/drawer" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

如你所见,这是一个常规的DrawerLayout.请注意DrawerLayout,the RelativeLayout和the ImageViewall都将fitsSystemWindows属性设置为true.

我的问题是:如果我设置背景资源(如颜色或图片)来完成的DrawerLayoutRelativeLayout在上面的代码中,我可以看到"下面"的状态栏的颜色或图片,正是我所想要的,但ImageView's'src'drawable总是显示在它下面,好像它fitsSystemWindows完全忽略了属性一样.

我的主题中有以下属性:

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/primary_dark</item>
Run Code Online (Sandbox Code Playgroud)

随着primary_dark是一个半透明的黑色(这不应该怎样都无所谓,因为正如我所说,这似乎是专属我的一个问题ImageView.透明状态栏的作品完美无论是DrawerLayoutRelativeLayout.

android imageview android-layout android-5.0-lollipop

10
推荐指数
1
解决办法
2880
查看次数

使用NDK对静态库中的函数进行未定义的引用

所以我试图在我的本机代码上使用libopus来安装Android应用程序.我的Android.mk文件如下所示:

PLATFORM_PREFIX := /opt/android-ext/
LOCAL_PATH := $(PLATFORM_PREFIX)/lib

include $(CLEAR_VARS)

LOCAL_MODULE := libopus
LOCAL_SRC_FILES := libopus.a

include $(PREBUILT_STATIC_LIBRARY)

# I have to redeclare LOCAL_PATH because the library is in /opt/android-ext/
# and my project is somewhere else. Not very elegant.

LOCAL_PATH := /home/sergio/workspace/Project/jni

include $(CLEAR_VARS)

LOCAL_MODULE := opusUtilsNative
LOCAL_SRC_FILES := opusUtilsNative.c
LOCAL_C_INCLUDES += $(PLATFORM_PREFIX)/include
LOCAL_STATIC_LIBRARIES := android_native_app_glue libopus

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

我在opusUtilsNative.c中的代码如下所示:

#include "opusUtilsNative.h"
#include <opus/opus.h>
#include <opus/opus_types.h>

JNIEXPORT jbyteArray JNICALL Java_Project_OpusUtils_encode
  (JNIEnv * je, jclass jc, jbyteArray data){

    int rc;
    opus_int16 …
Run Code Online (Sandbox Code Playgroud)

android android-ndk

5
推荐指数
1
解决办法
5878
查看次数

iOS:从流中播放PCM缓冲区

我从包含编码PCM缓冲区的套接字收到一系列UDP数据包.解码后,我留下了一个int16*音频缓冲区,我想立即播放.

预期的逻辑是这样的:

init(){
   initTrack(track, output, channels, sample_rate, ...);
}

onReceiveBufferFromSocket(NSData data){
   //Decode the buffer
   int16 * buf = handle_data(data);

   //Play data
   write_to_track(track, buf, length_of_buf, etc);
}
Run Code Online (Sandbox Code Playgroud)

我不确定与播放缓冲区有关的所有事情.在Android上,我可以通过创建一个AudioTrack对象来实现这一点,通过指定采样率,格式,通道等来设置它...然后只需用缓冲区调用"write"方法(就像我希望的那样)我可以在上面的伪代码中)但在iOS上我很快就会出现.

我尝试使用音频文件流服务,但我猜我做错了,因为没有声音出现,我觉得这些功能本身并没有实际播放.我还试图理解音频队列服务(我认为它可能接近我想要的),但是我无法找到任何简单的代码示例来使用它.

任何帮助将不胜感激,特别是以示例代码的形式.

audio pcm ios

5
推荐指数
1
解决办法
9609
查看次数

通过Google Analytics获取整个iOS堆栈跟踪/崩溃日志

我基本上寻找的是iOS相当于Android的Google Analytics Exception Reporter/Exception Parser.

在Android上,这些使我能够检测未捕获的异常,并在Analytics的Web UI的崩溃和异常部分中为每次崩溃接收整个堆栈跟踪/崩溃日志.

然而,在iOS上这些似乎并不可用,而且我似乎仍然坚持在他们的位置出现的严重不完整的堆栈跟踪.

我是否坚持使用Google Analytics上的不完整描述?我知道还有其他选项,例如Flightpath确实提供了这些日志,所以我唯一的选择就是使用其中一个,或者Google Analytics iOS SDK是否有一些我尚未找到的功能可以让我获得完整的访问权限日志?

google-analytics exception-handling ios

5
推荐指数
0
解决办法
609
查看次数