- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 libogg 和 libogg,我已成功将这些库添加到我的 iPhone xCode 项目并使用 Speex 对我的声音进行编码。问题是我不知道如何用 ogg 打包这些音频数据包。有人知道那种数据包应该是什么样子,或者有我可以使用的引用代码。
我知道在 Java 中它非常简单(您有一个专门的函数)但在 iOS 上则不然。请帮忙。
最佳答案
UPD 10.09.2013:请参阅 demo project ,它基本上从 wave 容器中获取 pcm 音频数据,使用 speex 编解码器对其进行编码,然后将所有内容打包到 ogg 容器中。也许稍后我会为 IOS 上的所有 speex 例程创建一个成熟的库/框架。
UPD 16.02.2015:演示项目是 republished在 GitHub 上。
我最近也在 iOS 上尝试使用 Speex,取得了不同程度的成功,但我发现了一些东西。基本上,如果您想将一些 speex 编码的语音打包到一个 ogg 文件中,您需要执行以下三个步骤(假设 libogg 和 libspeex 已经编译并添加到项目中)。
1) 添加带有Speex header的第一个ogg页面; libspeex 提供内置 tools为此(下面的代码来 self 的项目,不是最优的,只是为了举例):
// create speex header
SpeexHeader spxHeader;
SpeexMode spxMode = speex_wb_mode;
int spxRate = 16000;
int spxNumberOfChannels = 1;
speex_init_header(&spxHeader, spxRate, spxNumberOfChannels, &spxMode);
// set audio and ogg packing parameters
spxHeader.vbr = 0;
spxHeader.bitrate = 16;
spxHeader.frame_size = 320;
spxHeader.frames_per_packet = 1;
// wrap speex header in ogg packet
int oggPacketSize;
_oggPacket.packet = (unsigned char *)speex_header_to_packet(&spxHeader, &oggPacketSize);
_oggPacket.bytes = oggPacketSize;
_oggPacket.b_o_s = 1;
_oggPacket.e_o_s = 0;
_oggPacket.granulepos = 0;
_oggPacket.packetno = 0;
// submit the packet to the ogg streaming layer
ogg_stream_packetin(&_oggStreamState, &_oggPacket);
free(_oggPacket.packet);
// form an ogg page
ogg_stream_flush(&_oggStreamState, &_oggPage);
// write the page to file
[_oggFile appendBytes:&_oggStreamState.header length:_oggStreamState.header_fill];
[_oggFile appendBytes:_oggStreamState.body_data length:_oggStreamState.body_fill];
2) 添加第二个 ogg 页面 Vorbis comment :
// form any comment you like (I use custom struct with all fields)
vorbisCommentStruct *vorbisComment = calloc(sizeof(vorbisCommentStruct), sizeof(char));
...
// wrap Vorbis comment in ogg packet
_oggPacket.packet = (unsigned char *)vorbisComment;
_oggPacket.bytes = vorbisCommentLength;
_oggPacket.b_o_s = 0;
_oggPacket.e_o_s = 0;
_oggPacket.granulepos = 0;
_oggPacket.packetno = _oggStreamState.packetno;
// the rest should be same as in previous step
...
3) 以类似方式添加带有 speex 编码音频的后续 ogg 页面。
首先决定你想在每个ogg页面上有多少帧音频数据(0-255;我选择79很随意):
_framesPerOggPage = 79;
然后对于每一帧:
// calculate current granule position of audio data within ogg file
int curGranulePos = _spxSamplesPerFrame * _oggTotalFramesCount;
// wrap audio data in ogg packet
oggPacket.packet = (unsigned char *)spxFrame;
oggPacket.bytes = spxFrameLength;
oggPacket.granulepos = curGranulePos;
oggPacket.packetno = _oggStreamState.packetno;
oggPacket.b_o_s = 0;
oggPacket.e_o_s = 0;
// submit packets to streaming layer until their number reaches _framesPerOggPage
...
// if we've reached this limit, we're ready to create another ogg page
ogg_stream_flush(&_oggStreamState, &_oggPage);
[_oggFile appendBytes:&_oggStreamState.header length:_oggStreamState.header_fill];
[_oggFile appendBytes:_oggStreamState.body_data length:_oggStreamState.body_fill];
// finally, if this is the last frame, flush all remaining packets,
// which have been created but not packed into a page, to the last page
// (don't forget to set oggPacket.e_o_s to 1 for this frame)
就是这样。希望它会有所帮助。欢迎任何更正或问题。
关于ogg - 在 iOS 上用 Ogg 打包 Speex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277361/
我正在使用 libogg 和 libogg,我已成功将这些库添加到我的 iPhone xCode 项目并使用 Speex 对我的声音进行编码。问题是我不知道如何用 ogg 打包这些音频数据包。有人知道
我正在使用 libogg 和 libogg,我已成功将这些库添加到我的 iPhone xCode 项目并使用 Speex 对我的声音进行编码。问题是我不知道如何用 ogg 打包这些音频数据包。有人知道
我正在使用 Ogg Vorbis SPI作为解码 .ogg 文件的一种方式。 我用于加载 .ogg 文件并转换为 PCM 的代码片段与文档中建议的代码片段没有太大的不同: // The streams
您好,我一直在尝试使用本教程安装带有一些库的 FFmpeg https://trac.ffmpeg.org/wiki/CompilationGuide/Centos?version=85 使用此命令安
我正在尝试更改我的视频的帧速率。下面是示例输入和输出。我自己构建了 ffmpeg,我很确定我错过了正确的解码器/解复用器,但我不知道我需要什么。我认为 --enable-libtheora 足以启用多
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我有一个名为setSound()的方法,该方法设置队列并向其中添加轨道,然后播放。我在simpleInitGame()中调用该方法。但是没有声音播放,eclipse中的控制台说: Mar 13, 20
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
最近我试图了解如何ogg vorbis在里面工作,所以我为 ogg vorbis 编写了简单的编码器/解码器.现在我试图了解所有互联网 ogg 广播电台是如何工作的。我不明白的事情:如果您需要处理所有
有时音乐甚至没有开始播放,但是当开始播放时,它会在几秒钟后停止。文件长 2 分钟。我真的不知道是什么问题。 @Override public void onCreate(Bundle savedIns
当我看到 http://www.vorbis.com/music/Hydrate-Kenny_Beltrey.ogg 时,我感到非常惊讶链接没有给我下载选项,但有一个播放器不是 flash 播放音频。
我尝试使用标签音频。将 mp3 转换为 ogg 使用 ffmpeg -i "123.mp3" "1234.ogg" .ogg 的服务器响应内容类型,例如 video/ogg。我尝试了内容类型的 au
现在我正在制作一个服务器,用 HTML 显示视频。我尝试在我的计算机上使用 ..mp4 和 .ogg 视频,效果非常好。但是当我尝试使用移动设备时,只显示 .mp4,而 .ogg 没有显示。移动设备无
我正在尝试将章节添加到包含 vorbis 音频的 ogg 文件中。 来自 this link我复制了以下 ffmpeg 命令。 ffmpeg -threads auto -y -i in.ogg -i
如果我将带有专辑封面的音频文件转换为: ffmpeg -i sample1.flac -ar 48000 -vn -c:a libvorbis -b:a 320k sample1.ogg 我的 sam
回答问题 "How-to make a silent mp3 or wav-file" on ubuntuforums.org FakeOutdoorsman 提供了以下配方: Another met
我正在尝试从浏览器捕获用户的音频输入。我已经用 WAV 完成了,但是文件真的很大。我的一个 friend 告诉我,OGG 文件要小得多。 有谁知道如何将WAV转换为OGG? 我也有原始数据缓冲区,我真
是否有一个模块支持在 Windows 上的 Python 2.6 中播放 Ogg/Speex(不是 Ogg/Vorbis)编码文件的音频? 最佳答案 到目前为止,VLC Python 绑定(bind)
我有三个声音文件:sound1.ogg,sound2.ogg和sound3.ogg。每个文件的长度都是几秒钟,并存储在我项目的/res/raw文件夹中。 我希望它们在我的main_activity上的
我正在尝试从远程服务器获取ogg音频文件,并将播放器呈现给用户。我正在使用下面的代码。 这导致没有输出。但是检查代码可以发现音频标签在容器中: 但是,它在Firefox的检查器中显示为灰色。 DOM
我是一名优秀的程序员,十分优秀!