标签: speex

android中的speex支持

任何人都可以帮助我如何在Android中使用speex或jspeex?

我搜索了很多但无法找到任何地方.在code.google.com/android中有很多相关问题,但没有人回答过.这里也没有得到很好的回答,因为我的另一个问题是在Android中解码speex编码的字节数组.所以,如果您对此有所了解,请提供相关信息.

我需要使用此编解码器对音频文件的bytearray进行编码和解码.

我已经尝试了Android-ndk并完成了编码,在解码字节数组时遇到了问题.有没有其他替代方法来实现这一目标?

编辑

我的编码本机c文件中的函数如下:

#include <jni.h>
#include "speex/speex.h"

#define FRAME_SIZE 320

int nbBytes;
/*Holds the state of the encoder*/
void *state;
void *decod_state;


/*Holds bits so they can be read and written to by the Speex routines*/

SpeexBits decod_bits;
SpeexBits bits;
int i, tmp;

void Java_com_mycom_speex_SpeexEncodingActivity_init(JNIEnv * env, jobject jobj) {
   /*Create a new encoder state in narrowband mode*/
   state = speex_encoder_init(&speex_wb_mode);

   /*Set the quality to 8*/ …
Run Code Online (Sandbox Code Playgroud)

java android speex jspeex android-ndk

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

将getUserMedia()中的音频编码为JavaScript中的.OGG

所以我有一个我正在研究的HTML5项目,我将iOS应用程序转换为基于Web的应用程序.伴随应用程序内容创建的一部分是录音,我试图在JavaScript中复制而不使用插件; 到目前为止,我已经能够从getUserMedia()录制音频,并通过Recorder.js将其转换为WAV.

然而,现在,我有点迷失了.我目前有两个单独的视图,一个用于录制内容,另一个用于播放,但我不知道如何将音频导出的Recorder.js导入我的JSON有效负载进行播放(我想避免强制服务器)上传或客户端下载).

所以我想我的具体问题是,我如何获取由Recorder.js制作的blob对象(我几乎一无所知)并将其转换为原始数据,或以某种方式通过JSON发送文件?

更新:我决定尝试使用speex.js工具(https://github.com/jpemartins/speex.js)来编码.OGG(远小于.WAV).但是,我不确定如何使用它; 演示页面似乎对我不起作用,并且试图调用.encode()Speex对象的函数似乎并没有实际编码数据,我只在对象字段中得到零.有谁知道我可以学习如何使用这种工具的任何资源?

javascript html5 json speex getusermedia

13
推荐指数
1
解决办法
5822
查看次数

如何在HTML5/JavaScript(无Flash)中调用SPEEX音频解码/编码

我正在开发一个项目,需要通过HTTP向/从服务器流式传输音频数据.

我们需要使用SPEEX压缩音频数据.

在Flash中,我们可以使用Alchemy和LibSpeex,但我们如何在JavaScript中完成它.可以使用HTML5.

谢谢.

彼得

javascript html5 speex audio-streaming

10
推荐指数
2
解决办法
7586
查看次数

针对speex的Android NDK设置

我正在尝试将speex集成到我的程序中,只是为它下载了NDK.我在安装Android NDK时遇到了麻烦(我在Mac OS上).当我输入

./ndk-build -C ../android_dev/oler_android/

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: 
~/Desktop/android_dev/oler_android//jni/Android.mk    
make: Entering directory `/Users/Oler/Desktop/android_dev/oler_android'
/Users/Oler/Desktop/android-ndk/build/core/add-application.mk:187: *** Android NDK:        
Aborting...    .  Stop.
make: Leaving directory `/Users/Oler/Desktop/android_dev/oler_android'
Run Code Online (Sandbox Code Playgroud)

我在jni文件夹下创建了Application.mk和Android.mk.

./ndk-build NDK_LOG = 1的输出

HOST_OS=darwin
HOST_ARCH=x86_64
HOST_TAG=darwin-x86_64 
GNUMAKE=/Users/Oler/Desktop/android-ndk/prebuilt/darwin-x86_64/bin/make (NDK prebuilt)
Android NDK: NDK installation path auto-detected: '/Users/Oler/Desktop/android-ndk'
Android NDK: GNU Make version 3.81 detected
Android NDK: Host OS was auto-detected: darwin
Android NDK:  Host operating system detected: darwin
Android NDK: Host CPU was auto-detected: x86
Android NDK: HOST_TAG …
Run Code Online (Sandbox Code Playgroud)

android speex android-ndk

9
推荐指数
1
解决办法
1523
查看次数

Speex编码的SWF?

我正在处理的项目需要能够动态创建声音资产SWF文件(使用DefineSound标记).尽管我已经能够使用原始pcm成功创建DefineSound标签,但我无法使用Speex这样做.

SWF格式规范(PGS 202-204)规定,你可以在一个DefineSound标签使用的是Speex,但其相当含糊的细节.它只是speex_bits_write没有框架的输出吗?它是否与speexenc的输出相同(例如,一个Ogg文件)?它是一系列在每个之前长度的帧吗?我尝试了所有这些的变化,但没有一个起作用.

CS4可用于创建声音资产SWF,这对于拥有真实世界的示例非常有用.问题是,GUI只允许一些编码(MP3,Nellymoser,raw等),但不允许Speex.

所以,我的问题是:有没有人这样做过?你能指点我参考实现或Speex SWF的例子吗?

apache-flex flash actionscript-3 speex

8
推荐指数
0
解决办法
686
查看次数

帮助创建Speex Voip服务器和客户端

我试图创建一个Speex Voip客户端和服务器.我已经掌握了基础知识,并且通过UDP在本地计算机上运行正常.我使用JSpeex来实现可移植性.我正在寻找有关创建客户端和服务器的提示.你的想法是什么?

JSpeex库每次调用只能编码320个字节,因此发送到服务器的数据包很小(在我的情况下为~244字节).在发送或让服务器处理缓冲数据包之前,客户端是否要等到大约1或2 KB的编码数据就绪?

此外,任何有关如何实现缓冲数据的帮助都会很好.

我在本地机器上工作的一些东西.

客户: __CODE__

__CODE__

__CODE__

java voip speex jspeex

8
推荐指数
1
解决办法
1939
查看次数

使用Speex和DirectSound进行声学回声消除(AEC)

我正在尝试使用Speex编解码器库执行声学回声消除(AEC).根据Speex文档,我需要执行两个调用:

 speex_echo_playback(echo_state, echo_frame); 
Run Code Online (Sandbox Code Playgroud)

每次播放音频帧,和

 speex_echo_capture(echo_state, input_frame, output_frame);
Run Code Online (Sandbox Code Playgroud)

对于每个捕获的帧.

由于我使用的是DirectSound,我认为我可以在调用speex_echo_playback时使用主DirectSound缓冲区作为echo_frame,例如,

  DWORD offset = 0;
  DWORD length = 0;
  LPVOID block1, block2;
  DWORD length1, length2;
  DWORD flags = DSBLOCK_ENTIREBUFFER;

  HRESULT hr = primary_buffer->Lock(
        offset
      , length
      , &block1
      , &length1
      , &block2
      , &length2
      , flags
      );

  // Would like to convert the buffer into a form that
  // speex_echo_capture() can use.
  // Why does length1 == length2 == 0 always? 

  hr = primary_buffer->Unlock( block1, length1, block2, length2 );
Run Code Online (Sandbox Code Playgroud)

文档确实说这些是只写指针,但是无论如何都不能自己使用缓冲区数据?

这基本上就是我创建缓冲区的方式:

  CComPtr< …
Run Code Online (Sandbox Code Playgroud)

c++ audio directsound echo speex

7
推荐指数
1
解决办法
5966
查看次数

使用本机库在Flash/Flex中进行声学回声消除

我必须在Flex视频会议应用程序中实现AEC.我知道它不能直接在Flash中完成.我正在考虑编写一个本地应用程序或库,它将在Flex之外执行AEC.

据我所知,Adobe Connect Pro正在使用一些执行AEC的外部库.我想按照这个方向做一些类似的事情.

我脑子里有两种可能性:

1)独立定制AEC过滤器.

自定义AEC过滤器将在后台运行,并将处理来自麦克风和声卡的所有数据并执行AEC.回声信号将是要播放但在临时缓冲区中延迟的数据,如下所示:aec(输入,delayed_input,输出).

我不知道它是否有效,因为Flash麦克风输入不知道我的自定义输入和扬声器相同.但是在WinXP/Vista中如何在系统级别拥有AEC呢?

2)AEC过滤器与Flex的NativeProcess交互.

过滤器将由NativeProcess运行.Flex应用程序将通过麦克风声音,接收到远程语音到过滤器并返回已删除回声的语音,然后Flex将此输出到扬声器.这是对的吗?

如果2)方法没问题,那么我有以下问题:

  1. 我将从Speex的AEC开始,那么Flex的数据应采用何种格式?如果我选择Flex Speex编解码器进行声音压缩,我可以将它直接传递给speex库吗?
  2. 性能会好吗?我认为,每个声音帧缓冲区调用NativeProcess库可能非常耗时.
  3. 为什么在AS3中没有可以直接从Flash使用的AEC实现?据我所知,做AEC你必须有回声数据和麦克风数据(在Flash 10中可以直接访问麦克风).肯定有一些东西停止这样做,但我不知道它是什么:)
  4. 是否有一些免费的AEC实现或DSP库除了我可以使用的Speex?

PS我现在是Flash/Flex专家,对于一些愚蠢的问题抱歉:)

感谢提前帮忙,ternyk

apache-flex flash audio echo speex

7
推荐指数
1
解决办法
1948
查看次数

Speex回声消除配置

我正在使用其AudioRecord和AudioTrack类制作Android到Android的VoIP(扬声器)应用程序,以及通过NDK的Speex进行回声消除.我能够成功传入并从Speex的speex_echo_cancellation()函数中检索数据,但回声仍然存在.

以下是录制/发送和接收/播放音频的相关android线程代码:

//constructor
public MyThread(DatagramSocket socket, int frameSize, int filterLength){
  this.socket = socket;
  nativeMethod_initEchoState(frameSize, filterLength);
}

public void run(){

  short[] audioShorts, recvShorts, recordedShorts, filteredShorts;
  byte[] audioBytes, recvBytes;
  int shortsRead;
  DatagramPacket packet;

  //initialize recorder and player
  int samplingRate = 8000;
  int managerBufferSize = 2000;
  AudioTrack player = new AudioTrack(AudioManager.STREAM_MUSIC, samplingRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, managerBufferSize, AudioTrack.MODE_STREAM);
  recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, managerBufferSize);
  recorder.startRecording();
  player.play();

  //record first packet
  audioShorts = new short[1000];
  shortsRead = recorder.read(audioShorts, 0, audioShorts.length);

  //convert shorts to bytes to …
Run Code Online (Sandbox Code Playgroud)

android voip speex aec

7
推荐指数
1
解决办法
9022
查看次数

在Android上播放opus-codec

我正在寻找一种方法将opus-codec(解码器部分)与我的Android应用程序集成.

你知道有没有这样做的实现?我们目前正在使用ogg-vorbis进行语音提示,考虑使用speex(不推荐使用,但记录很少的尝试)或opus(目前没有记录尝试).

如果我们必须采用NDK路线,您认为它应该为我们提供应用程序大小改进吗?OggVorbis得到了平台的支持,无论是speex还是opus都没有.

android speech speex android-ndk

6
推荐指数
1
解决办法
3917
查看次数