问题标签 [vorbis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
312 浏览

ios - 有没有办法在 Xamarin.iOS 中播放 vorbis ogg 文件?

是否有任何支持/绑定库或任何工具可用于将 .ogg 文件运行到 Xamarin.ios 项目中?

我已经尝试过

  1. Nvorbis、NAudio:这些库需要大量的系统 dll,不适合用于移动应用程序开发。
  2. IDZAQAudioPlayer:但它是一个 Xcode 项目(与 Xcode 一起工作但我需要 Xamarin.iOS 的东西 - Xamarin Studio)
  3. Urho.Audio:不支持IOS 7.0

任何帮助,将不胜感激。谢谢。

0 投票
1 回答
649 浏览

python-3.x - 如何在播放状态下更改Gstreamer中音频编码的比特率?

  • 我想将 FLAC 文件转换为 MP3(和 Vorbis,第二次)文件。

  • 然后将这些 MP3/Vorbis 流原始传输到解码它们的第二个设备。

  • 根据传输质量,我希望能够即时更改比特率。

  • 更改必须是无缝的(因此标题中的“处于播放状态”)。

  • 特定的编码器是lamemp3encvorbisenc(并且不能更改)。


据我所知,这些编解码器实际上无法在播放时更改比特率。

但我想有一些干净简单的方法可以改变比特率,而不会在流中引入任何间隙:我想了解它们中的任何一个。

(注意:我确实写了任何,而不是全部,我不是要求“最好”的方式,我不是要求审查,我只是想要一些有效的东西。)

0 投票
0 回答
370 浏览

android - 为 Android 编译 libvorbis 和 libvorbisfile

我正在将使用 libvorbis 和 libvorbis 文件的游戏移植到 Android。我只能通过在https://github.com/vincentjames501/libvorbis-libogg-android上运行 ndk-build 来构建 libvorbis 。但是我的游戏还需要 libvorbisfile,我找不到任何 Android 端口。

如何在 Android 上获取 libvorbisfile?

0 投票
1 回答
685 浏览

c++ - 为什么 QMediaPlayer::duration() 给我的值为-1?

这是我的代码:

某处显然存在错误,但除了检查文件名之外,我对问题所在感到遗憾。难道只是.ogg不支持吗?我是在对象完全加载到内存之前调用函数吗?或者是别的什么?

谢谢。

0 投票
0 回答
131 浏览

java - 如何在 Java 中同步播放多个 ogg 文件?

我有一首歌在不同的 ogg 文件中有不同的曲目。我可以使用 Vorbis SPI 一起播放这些 ogg 文件以获得完整的歌曲。但是,我通过在单独的线程中播放每个 ogg 来做到这一点,并且我无法防止每个 ogg 文件的播放不同步。

您将如何确保它们保持同步。理想情况下,如果读取任何音轨有延迟,所有音轨都会暂停。

一旦我完成了这项工作,我还希望与屏幕上显示的图形同步。

我觉得我需要的是某种时间/位置记录,所以我知道每个 ogg 播放的距离。然后我可以延迟其他线程,直到一切恢复同步。

我还处于早期阶段,所以我很高兴考虑替代播放库。

编辑 :

按照 JimmyB 的建议,我现在可以读取 4 字节缓冲区。然后我使用以下代码将缓冲区添加在一起:

这确实有效,但输出失真。我怀疑正在发生剪辑。如何在没有这种效果的情况下组合声音字节?

编辑 2:将字节除以输入数会停止剪辑,但会大大降低播放质量。

编辑 3:我想我也失去了轨道之间的同步。我的读取方法如下:

似乎读取的字节数和时间之间的关系可能不是线性的?也许那是在我的脑海里。

0 投票
0 回答
120 浏览

c - libvorbis:关闭块时出现段错误(vorbis_analysis_wrote)

我正在尝试编写一个 POC 来编码和解码往返 vorbis 的音频“往返”。

编码函数被传递了 88200 个字节(22050 个介于 -1.f 和 1.f 之间的浮点样本)。这些被一次复制到vorbis_analysis_buffer最多 1024 个样本。

根据libvorbis API 概述,并参考源中 /src 和 /examples 目录中的示例和测试文件,vorbis_analysis_wrote应将0作为值传递,以告知块写入器没有更多数据到来。这会导致段错误,我无法弄清楚为什么

顺便说一句,如果我只是省略对 的 0 值调用vorbis_analysis_wrote,则在输入缓冲区时不会输出任何数据(vorbis_analysis_blockout每次传递都返回 0)。

运行结果:

内存映射和堆栈转储:

可以在此处查看完整的进行中的源代码。音频数据在这里(原始 pcm)

使用:

  • libvorbis 1.3.5
  • gcc 5.4.0
  • linux 4.4.0-45-通用

ldd:

0 投票
0 回答
557 浏览

audio - ffmpeg解码ogg最后添加样本,导致输出过长

使用 ffmpeg 解码 ogg 文件时,输出的原始音频最后会包含一个“尾巴”。尽管 ffprobe 报告了以样本和秒为单位的正确持续时间,但在解码文件的末尾添加了大约 8ms。

这对我来说听起来像是编码器延迟的事情,我在 mp3(LAME 标签)和 m4a(ITUNSMB 标签)中对此有经验,但在 ogg 中没有。

当我在 audacity 中打开同一个 ogg 文件时,该文件被正确解码,没有“尾巴”(并且 audacity 正在使用 ffmpeg ..)。所以文件中似乎有足够的信息来正确解码。

我正在考虑解析 ffprobe 并截断为duration_ts帧数,但如果 ffmpeg 有一些构建标志,我宁愿这由解码器处理......

这是同一文件的图像,首先由 ffmpeg 解码并作为 raw 导入(带尾部),然后由 audacity 打开和解码(不带尾部):

大胆截图

有什么线索吗?

这是完整的ffmpeg输出:

0 投票
0 回答
595 浏览

gstreamer - GStreamer: vorbis transmuxing (pass-through) and transcoding via parsebin

任何人都可以帮助我了解如何通过parsebin元素在 Gstreamer 中使用 vorbis 吗?在下面的示例中,我使用带有一个视频 (h264) 和一个音频 (vorbis) 流的 matroska 文件。

例如下一个案例(使用 auto****sink w/o vorbisparse 使用 auto****sink w/o vorbisparse


但在这种情况下,所有挂起(使用 auto****sink和 vorbisparse


工作(使用单独的文件接收器vorbisparse):使用带有 vorbisparse 的单独文件接收器


挂起(使用不带 vorbisparse的单独文件接收器):


工作(使用多队列,单独的文件接收器和 vorbisparse):使用多队列、单独的文件接收器和 vorbisparse


挂起(使用多队列、单个文件接收器和 vorbisparse):使用多队列、单文件接收器和 vorbisparse


PS 我的主要目标是使用这个parsebin元素并获得根据需要转码或转码流的能力。例如:

  • 视频 => 转换,音频 => 转换
  • 视频 => 转换,音频 => 转码
  • 视频 => 转码,音频 => 转码
  • 视频 => 转码,音频 => 转码

我将感谢您的澄清和帮助

0 投票
1 回答
320 浏览

python - Python:如何将二进制数据写入标准输出,以便 bash 脚本可以使用进程替换?

我需要使用ogg123将输入 ogg 文件转换为 wav 的程序。我的 ogg 在 S3 上 - 所以我需要先下载它,然后再转码。但我认为使用进程替换对声音进行转码会更快——无需写入磁盘源 ogg 文件。

从 bash 我想这样做:

ogg123 -d wav <(./test.py) -f out.wav

在 Python 中,对于二进制输出,我尝试过:

os.write

sys.stdout.buffer.write

fp = os.fdopen(sys.stdout.fileno(), 'wb'); fp.write

例如:

./test.py在所有情况下打印视觉上有效的数据。例如:

xxd <(./test.py) | head打印:

但是所有这些变体都会从 ogg123 生成相同的错误:

Error opening /dev/fd/63 using the oggvorbis module. The file may be corrupted.

我在本地尝试了相同的文件 - 文件是正确的:

你能推荐什么?

0 投票
0 回答
541 浏览

java - Java 将传入的 opus 流写入文件

我正在使用Discord4J为不和谐创建一个机器人,我希望该机器人能够将传入的语音数据记录到文件中。我对编写音频文件一无所知。我可以使用的是当机器人接收到音频数据时触发的方法。

我有一个名为vorbis的库,它出现在谷歌搜索中,但正如我之前所说,我不知道在音频方面我在做什么,也不知道从哪里开始或确切地搜索什么。任何援助将不胜感激。

[编辑] 我应该说我打算在使用停止记录命令后写入数据。所以我问我应该如何存储这些数据,合并不同的用户流,并写入文件。

我当前的代码updated