diff --git a/jni/libopus/opus.m4 b/jni/libopus/opus.m4
new file mode 100644
index 0000000..47f5ec4
--- /dev/null
+++ b/jni/libopus/opus.m4
@@ -0,0 +1,117 @@
+# Configure paths for libopus
+# Gregory Maxwell <greg@xiph.org> 08-30-2012
+# Shamelessly stolen from Jack Moffitt (libogg) who
+# Shamelessly stole from Owen Taylor and Manish Singh
+
+dnl XIPH_PATH_OPUS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libopus, and define OPUS_CFLAGS and OPUS_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_OPUS],
+[dnl
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(opus,AC_HELP_STRING([--with-opus=PFX],[Prefix where opus is installed (optional)]), opus_prefix="$withval", opus_prefix="")
+AC_ARG_WITH(opus-libraries,AC_HELP_STRING([--with-opus-libraries=DIR],[Directory where the opus library is installed (optional)]), opus_libraries="$withval", opus_libraries="")
+AC_ARG_WITH(opus-includes,AC_HELP_STRING([--with-opus-includes=DIR],[Directory where the opus header files are installed (optional)]), opus_includes="$withval", opus_includes="")
+AC_ARG_ENABLE(opustest,AC_HELP_STRING([--disable-opustest],[Do not try to compile and run a test opus program]),, enable_opustest=yes)
+
+  if test "x$opus_libraries" != "x" ; then
+    OPUS_LIBS="-L$opus_libraries"
+  elif test "x$opus_prefix" = "xno" || test "x$opus_prefix" = "xyes" ; then
+    OPUS_LIBS=""
+  elif test "x$opus_prefix" != "x" ; then
+    OPUS_LIBS="-L$opus_prefix/lib"
+  elif test "x$prefix" != "xNONE" ; then
+    OPUS_LIBS="-L$prefix/lib"
+  fi
+
+  if test "x$opus_prefix" != "xno" ; then
+    OPUS_LIBS="$OPUS_LIBS -lopus"
+  fi
+
+  if test "x$opus_includes" != "x" ; then
+    OPUS_CFLAGS="-I$opus_includes"
+  elif test "x$opus_prefix" = "xno" || test "x$opus_prefix" = "xyes" ; then
+    OPUS_CFLAGS=""
+  elif test "x$opus_prefix" != "x" ; then
+    OPUS_CFLAGS="-I$opus_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    OPUS_CFLAGS="-I$prefix/include"
+  fi
+
+  AC_MSG_CHECKING(for Opus)
+  if test "x$opus_prefix" = "xno" ; then
+    no_opus="disabled"
+    enable_opustest="no"
+  else
+    no_opus=""
+  fi
+
+
+  if test "x$enable_opustest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OPUS_CFLAGS"
+    LIBS="$LIBS $OPUS_LIBS"
+dnl
+dnl Now check if the installed Opus is sufficiently new.
+dnl
+      rm -f conf.opustest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <opus.h>
+
+int main ()
+{
+  system("touch conf.opustest");
+  return 0;
+}
+
+],, no_opus=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_opus" = "xdisabled" ; then
+     AC_MSG_RESULT(no)
+     ifelse([$2], , :, [$2])
+  elif test "x$no_opus" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.opustest ; then
+       :
+     else
+       echo "*** Could not run Opus test program, checking why..."
+       CFLAGS="$CFLAGS $OPUS_CFLAGS"
+       LIBS="$LIBS $OPUS_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <opus.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Opus or finding the wrong"
+       echo "*** version of Opus. If it is not finding Opus, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occurred. This usually means Opus was incorrectly installed"
+       echo "*** or that you have moved Opus since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OPUS_CFLAGS=""
+     OPUS_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(OPUS_CFLAGS)
+  AC_SUBST(OPUS_LIBS)
+  rm -f conf.opustest
+])
