- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 XAudio2 流式传输 MS ADPCM 文件(在 C++ 中,但这个问题似乎与语言无关)。
该文件使用 ADPCMEncode.exe 进行编码,这将生成一个格式标记为 WAVE_FORMAT_ADPCM 的 WAV 文件。
与任何流一样,我创建了一个 IXAudio2SourceVoice(从文件的开头开始使用完整的 ADPCMWAVEFORMAT)并在它请求时将其提供给 block 对齐的缓冲区。在循环之前,数据似乎运行良好。
循环读取器正如您所期望的那样:如果发生短读取,则将偏移量返回到开始位置并进行另一次读取以填充缓冲区的其余部分。 PCM 没问题,但 MS ADPCM 有时声音会停止。它似乎停止请求更多缓冲区,因此用完并停止。
错误发生的时间各不相同。有时它在数据循环时发生,有时在循环几次后发生。显然我需要通过 XAUDIO2_BUFFER 传递一些额外的信息,但我找不到任何文档告诉我什么。
谁能指出我正确的方向?
最佳答案
再一次,为互联网牺牲尊严取得了成果。 ;)
我意识到我错误地为 ADPCM 使用了示例循环 WAV 片段。它仍然是样本而不是字节,所以它需要转换成字节(因为 ADPCM 大约是 25% 的压缩,而立体声样本是 4 字节,这两个值是相似的,这就是愚弄我的原因>__<)。
每个 block 的样本很容易从 block 对齐中计算出来:
unsigned int samplesPerBlock = m_format.nBlockAlign - 12;
unsigned int startBlock = sampleLoop.start / samplesPerBlock;
unsigned int startBlockOffset = sampleLoop.start % samplesPerBlock;
unsigned int endBlock = sampleLoop.end / samplesPerBlock;
unsigned int endBlockOffset = sampleLoop.end % samplesPerBlock;
unsigned int loopStart = startBlock * m_format.nBlockAlign;
unsigned int loopLength = (endBlock - startBlock) * m_format.nBlockAlign;
如果循环点没有完全对齐,您可以对 XAUDIO2_BUFFER 的 Play/LoopBegin/Length 成员做一些额外的调整,但只要您在原始 WAV 中正确对齐它们(就像您对任何其他风格所做的那样) ADPCM)你不需要它,提交的压缩数据的 block 对齐就足够了。
关于c++ - 流式传输和循环 MS ADPCM (WAVE_FORMAT_ADPCM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31029775/
关于ADPCM ADPCM(Adaptive Differential Pulse Code Modulation, 自适应差分脉冲编码调制) 是一种音频信号数字化编码技术, 音频压缩标准G.
我正在为嵌入式处理器(ARM Cortex-M4)编写代码 此代码的目的是解码 Intel/DVI 格式(也称为 IMA 格式)的 4 位 ADPCM。我使用 Python 的 audioop 对方波
我正在尝试与托管未加密视频+音频流的摩托罗拉 Blink1 摄像头(婴儿监视器)连接,视频是 mjpeg,但特别感兴趣的是 ADPCM 编码的音频流。视频+音频提要通过本地网络上的公共(public)
当我尝试将 IMA ADPCM 解码为 16 位签名 PCM 时,我得到了半垃圾 PCM 我尝试在 WAV 文件中解码和编码 IMA ADPCM(22050 个样本/秒,4 位/样本,36(!)字节(
我正在尝试使用 XAudio2 流式传输 MS ADPCM 文件(在 C++ 中,但这个问题似乎与语言无关)。 该文件使用 ADPCMEncode.exe 进行编码,这将生成一个格式标记为 WAVE_
我有一些原始的 ADPCM 压缩音频流,我想用 pygame 播放它们,但据我所知,这在 pygame 中是不可能的。我怎样才能用 python 将它们解压缩为普通的 PCM 流(或其他 pygame
从哪里可以获得简单的开源 pcm 到 adpcm C\C++ 编码器库? 最佳答案 sox package可以处理多种 ADPCM 作为源格式和目标格式。 关于c++ - 从哪里获得简单的开源 adp
我有一个从 http://wiki.multimedia.cx/index.php?title=IMA_ADPCM 解压缩 IMA ADPCM 的算法, 但无法将其重新压缩回 IMA ADPCM。有没
我有一个传递客户端 PCM 或 ADPCM 数据的服务器。 我最初决定使用 PCM,因为我不想处理编码和解码。 我让 PCM 工作,但是在我听到的每个音频 block 之间都有故障。(有点像剪辑) 所
我有一个视频源,它使用 ADPCM 编解码器向我发送音频。但是,android 只支持 PCM 格式。如何将 ADPCM 音频输入转换为 PCM 音频输入? 这个问题的答案可能类似于 this que
我通常会在 SoX 或 Window 的内置音频库中查找这些内容,但似乎两者都没有 G.726 编解码器。 所以我有一个字节序列,我知道它被编码为 G.726,尽管目前尚不知道比特率以及它是 mu-l
这是 objective-c 姐妹问题,它可能会提供一些见解: c and objective-c -- const char* and char* 我正在做以下事情: g_ADPCMstate.va
我正在尝试将原始文件( headless 文件)转换为 wav 在 ADPCM 16 速率 8000 我已经尝试了三个控制台命令 sox -e ima-adpcm -r 8000 input.raw
如何在 Alvas.Audio 中将每秒 6000 个样本的 Dialogic ADPCM VOX 文件转换为 Wave GSM ? 最佳答案 请参阅example和下面的代码 private sta
我是一名优秀的程序员,十分优秀!