- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经安装了 Speex Voice ACM Codec 1.0.1.1 编解码器,它们似乎有不同的 .wav header ,然后是这个 NSpeex(C#) 包中的 C# 代码中描述的 header 。
我可以读取使用“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件,并成功解码它们,但是当我创建 .wav 文件时,“Speex Voice ACM Codec 1.0.1.1”无法识别我的 header 。我用十六进制编辑器检查过,.wav header 中有一些字节是“Speex Voice ACM Codec 1.0.1.1”创建的,我没有创建,它们与 NSpeex.PcmWaveWriter 类中的不同。
所以,我同意这部分:
raf.Write(WAVE_FORMAT_SPEEX); // Format tag: Speex
raf.Write((short)channels); // Number of channels
raf.Write(sampleRate); // Sampling frequency
raf.Write((CalculateEffectiveBitrate(mode, channels, quality) + 7) >> 3); // Average bytes per second
raf.Write((short)CalculateBlockSize(mode, channels, quality)); // Blocksize of data
raf.Write((short)quality); // Bits per sample
但是,与 NSpeex.PcmWaveWriter 类的代码中的其余部分不同。
在十六进制编辑器中,我在“Speex Voice ACM Codec 1.0.1.1”创建的 .wav 文件中看到(在上述部分之后):
//byte[] speexSpecific ={
// 0x00, 0x01, 0x02, 0x00,0x0a, 0x00,
// 0x00, 0x00, 0xf4, 0x01,
// 0x03, 0x00, 0x00, 0x00};
但我不知道那是什么以及如何创建与“Speex Voice ACM 编解码器 1.0.1.1”兼容的 .wav header 。同样,我可以解码他们的 .wav 文件,并创建我可以解码的 .wav 文件,但该编解码器似乎无法识别我的 .wav header 。
Speex 应该是“开源”的,有人可以揭示 .wav (speex) header 中的 secret 字节吗?
最佳答案
我找到了!这正好解释了我丢失的 14 个字节(检查 SPEEX_WFX_EXTRA_BYTES=14)
//typedef struct tWAVEFORMATEX
//{
// WORD wFormatTag; /* format type */
// WORD nChannels; /* number of channels (i.e. mono, stereo...) */
// DWORD nSamplesPerSec; /* sample rate */
// DWORD nAvgBytesPerSec; /* for buffer estimation */
// WORD nBlockAlign; /* block size of data */
// WORD wBitsPerSample; /* number of bits per sample of mono data */
// WORD cbSize; /* the count in bytes of the size of */
// /* extra information (after cbSize) */
//} WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX;
//#define WAVE_FORMAT_SPEEX 0xa109
//#define SPEEXWAVEFORMAT_VERSION 0x0100 // 1.0
//#define SPEEX_WFX_EXTRA_BYTES 14
///*
// wfx.wFormatTag = WAVE_FORMAT_SPEEX
// wfx.nChannels = 1,2
// wfx.nSamplesPerSec = 8000,16000,32000
// wfx.nAvgBytesPerSec = ...
// wfx.nBlockAlign = CBR? ... : 1
// wfx.wBitsPerSample = 16
// wfx.cbSize = SPEEX_WFX_EXTRA_BYTES
// For VBR:
// wfx.nAvgBytesPerSec = SPEEX_BITRATE_24600;
//*/
//typedef struct speexwaveformat_tag
//{
// WAVEFORMATEX wfx;
// WORD nVersion; // SPEEXWAVEFORMAT_VERSION
// WORD nFramesPerBlock;// 1..
// WORD nQuality; // 0..10
// WORD nMode; // SPEEX_MODE_...
// WORD nVbrQuality; // 0..1000 ,float [0.00 , 10.00]
// WORD nComplexity; // 1..10
// WORD nFlags; // SPEEX_FLAG_...
//} SPEEXWAVEFORMAT;
// CBR,ABR,VBR
//#define SPEEX_MODE_CBR 0
//#define SPEEX_MODE_ABR 1
//#define SPEEX_MODE_VBR 2
//// flags
//#define SPEEX_FLAG_VAD 0x0001
//#define SPEEX_FLAG_DTX 0x0002
//#define SPEEX_DEF_QUALITY 3
//#define SPEEX_DEF_COMPLEXITY 3
//#define SPEEX_DEF_VBR_QUALITY 500
关于c# - .Wav Speex header 内容的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851537/
我想播放由 Speex 编码的 *.spx 文件在网上。 但我不了解 Flash/Flex 或任何 Flash 音频编解码器。谷歌搜索了一整天,我得到了一些解决方案,即: 用 FLV 容器包装 Spe
我需要您的帮助来确定以下定点编码示例代码(取自 speex 手册)中的问题。我测试了对 160 个样本帧进行编码,然后将其解码回来,但问题是解码后的帧与原始帧完全不同(请参阅下面评论中的输出)。这可能
我有一个基本的 audiorecord-audiotrack,两个 android 设备之间的 udp 数据包语音聊天。它有效,但我的回声不好。我正在尝试使用由 JNI 移植到 android 的 S
我正在使用其 AudioRecord 和 AudioTrack 类以及通过 NDK 的 Speex 来制作一个 Android 到 Android VoIP(扬声器)应用程序来进行回声消除。我能够成功
我正在使用 Speex 对原始数据进行编码,但是在我对数据进行解码后,音频以更快的速度播放,因为它让您听起来像花栗鼠。我正在使用 NSpeex和 Silverlight 4。 8kHz Samplin
如何在iPhone中使用“speex”进行音频编码/解码?我没有在项目中添加框架。 最佳答案 这个blog entry: Compile Speex For iPhone克利夫顿·克雷格(Clifto
是否有一个模块支持在 Windows 上的 Python 2.6 中播放 Ogg/Speex(不是 Ogg/Vorbis)编码文件的音频? 最佳答案 到目前为止,VLC Python 绑定(bind)
我一直在寻找有关如何将 Speex 库的预处理器用于多声道音频的示例。 speex_preprocess_state_init() 的文档说: Creates a new preprocessing
我尝试在 Qt 5.2.0 中使用 Speex Acoustic Echo Cancellation,但只有一部分回声被移除,它仍然存在。 这是我的测试(未针对内存管理进行优化)。它录制语音,去除回声
我正在使用一个使用 speex jitterbuffer 的应用程序。发生的情况是,当连接发生很大变化时, jitter buffer 似乎会变大,结果是严重的延迟(最多 5 秒)- 基本上,似乎没有
如何使用Speex从 python 中编码/解码?有 wrapper 吗?我发现了一个旧项目pySpeex但它现在已经过时了(需要 Python 2.2)。 最佳答案 我认为从 pySpeex 开始(
我编译成功 libavcodec 与 斯皮克斯 启用。 我修改了 FFMPEG 文档中的示例,将示例音频编码为 Speex。 但结果文件无法使用 VLC Player(具有 Speex 解码器)播放。
我正在开发一个语音应用程序,我有 2 个选项 speex 和 nellymoser 。为什么我应该在 flex 应用程序中使用 speex 而不是 nellymoser。 最佳答案 这应该说清楚,fl
我一直在我们的移动应用程序中实现 VOIP。在语音编码/解码中,听说SPEEX codec对提高音质很有帮助。尽管它质量很好,但我不敢使用它,因为在 speex 文档中他们提到“Speex 不是为手机
我正在使用 JSpeex API 将 .wav 文件转换为 .spx 文件。在桌面上测试时一切都很完美;只用了 2 秒。 Android 开发人员使用相同的代码,但在他们的模拟器和手机上编码相同的文件
我正在学习如何将 JSpeex 用于 VoIP 应用程序,稍后我将出于教育目的编写该应用程序。为了尝试了解如何使用 JSpeex,我决定编写一个简单的 echo 应用程序。基本上,它从音频输入线读取输
我有一个 .wav 文件,我正在使用 JSpeex (最新版本,即 0.9.7)对其进行编码,但如果有人处理过该文件,则编码不会正确进行。 最佳答案 来自here 您可以找到以下代码片段: 当我使用不
一段时间以来,我一直在使用 gsm 编解码器进行网络音频聊天。由于“语音预测”,现在我想实现像 speex 或 iLBC 这样的 smth。据我了解,我需要数据包的时间戳。我也知道要使编解码器预测语音
我已经安装了 Speex Voice ACM Codec 1.0.1.1 编解码器,它们似乎有不同的 .wav header ,然后是这个 NSpeex(C#) 包中的 C# 代码中描述的 heade
我只是想通过麦克风录制我的声音并从扬声器中听我自己的声音,现在问题是当我听我的声音时,添加了回声,我试图通过使用 Speex 库取消/删除回声,但是没有成功。有人可以帮我吗,下面是代码: 从https
我是一名优秀的程序员,十分优秀!