问题标签 [opus]

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 投票
2 回答
4937 浏览

c++ - Portaudio + Opus 编码/解码音频输入

我正在使用 Portaudio 和 opus 开发 VOIP 客户端。我在一帧中从麦克风中读取 - 使用 Opus 对每一帧进行编码并将其放入列表中 - 从列表中弹出第一个元素并对其进行解码 - 使用 portaudio 读取它

如果我在不编码声音的情况下做同样的事情,效果会很好。但是当我使用 Opus 时,我的声音很糟糕,我听不懂声音(这对 voip 客户端来说很糟糕)

我无法更改必须使用 Opus 的库。采样率为 48000,每个缓冲区的帧数为 480,我尝试了单声道和立体声。

我究竟做错了什么?

0 投票
2 回答
29237 浏览

c++ - 解码 Opus 音频数据

我正在尝试将 Opus 文件解码回原始 48 kHz。但是我找不到任何示例代码来做到这一点。

我目前的代码是这样的:

“编码”的参数可能是大量的数据,所以我想我必须把它分成帧。我不确定我该怎么做。

作为 Opus 的初学者,我真的很害怕把事情搞砸。

有人可以帮忙吗?

0 投票
2 回答
9311 浏览

python - Python : PortAudio + Opus 编码/解码

我正在使用 Pyaudio 从我的麦克风中捕获音频,并尝试使用 opus 编解码器对其进行编码/解码。我正在使用 SvartalF ( https://github.com/svartalf/python-opus ) 对 libopus 的绑定。

这是我的代码:

我必须输入chunk*2而不是chunk输入data.append(streamin.read(chunk*2))DECDATA LENGTH == DATA LENGTH*2,我不知道为什么。

输出:

没有编码/解码,第一个streamout.write(''.join(data))工作完美。使用编码/解码,streamout.write(decdata)有点工作,但混合了很多噼啪声。

我在这里做错了什么?

0 投票
4 回答
12259 浏览

android-ndk - 为 Android 编译 Opus 编解码器所需的 Makefile

我正在尝试编译 opus 音频编解码器 ( http://www.opus-codec.org/downloads/ ) 以在 Android 应用程序中使用。我正在使用 Android NDK(版本 6)来编译我的库。到目前为止,我必须为我的应用程序编译的本机 C 库非常简单,我已经能够将我的 Android.mk 文件基于 jni,主要基于教程或其他示例。但是,Opus 的编译看起来要复杂一些。tar.gz 存档包含一个用于为 Windows 编译库的解决方案文件,它还包含一些用于标准 Unix 实现的 Makefile,但是将这些文件转换为 Android.mk makefile 以供 Android NDK 使用有点挑战。

我已经搜索过,但一直无法找到用于编译 libopus 的 Android makefile 的在线版本。有人可以将我链接到这样的makefile吗?或者,我可能会遗漏一些更简单的东西?是否可以使用 Automake 或某种转换器从 tar.gz 中已包含的 unix makefile 为我生成 Android.mk 文件?

0 投票
0 回答
687 浏览

android - Android 应用中的 Opus 采样率

我正在尝试使用Opus压缩音频流并将其发送到另一部手机进行播放。我的问题是,在 Opus 中,编码器和解码器使用 48KHz 的音频样本,而 Android 保证工作的唯一采样率是 44.1Khz。

所以,我的问题是我是否需要在发送之前总是对音频进行上采样(我想是使用另一个库),然后在播放之前进行下采样,或者是否可以直接传入音频而无需重新采样?

0 投票
1 回答
593 浏览

pipe - 如何使用 start-stop-daemon 启动几个管道进程

我一直在寻找一种方法来正确和干净地启动一系列通过管道传输的二进制文件,并让所有的东西像一系列守护进程一样正常启动......但没有运气。

简而言之,这是我的命令:

基本上,它从捕获设备中获取 oss v4 pcm 音频,将输出 aout 传输到 opusenc 二进制文件,然后将其编码为 opus 格式,最后,我将结果通过管道传输到 icecast2 服务器(所有这些或多或少都有很好的记录on the opus docs)而且效果很好!

问题是所有这些都发生在 cli 上,它捕获标准输出并开始输出。作为所有这些东西,我无法控制一系列管道进程。此外,最好有某种启动/停止脚本,这样就可以让所有这些都在后台运行。

我像往常一样一直在与 start-stop-daemon 作斗争,但我的知识基本上涵盖了处理单个二进制文件及其参数(如 docs 中所示),我认为我在盲目地踩着神圣大师的领域。

所以,也许有人可能会发现这可以完全或部分完成。

0 投票
1 回答
1025 浏览

android - Android 使用自定义编码器录制音频

Android 具有原生音频编码器和音频解码器,您可以毫无问题地使用这种原生格式录制播放,但您也可以实现自己的音频编解码器。我不太明白怎么做,有人知道android平台中自定义编码编解码器的实现吗?我正在尝试使用opus格式进行更具体的操作,但是任何其他编解码器格式的实现都可以让我了解如何做到这一点。

0 投票
1 回答
644 浏览

encoding - 如何读取 Opus 文件中的数据包大小?

我正在使用启用 VBR 选项的“opusenc”将语音样本(*.WAV 格式)编码为 *.opus 文件。在成功完成编码后,opus 编码器返回一个报告,简要介绍 XXX 个 YY 页中的许多数据包以及数据包大小范围(以字节为单位)。

但是,我需要比这更多的信息。我想知道生成的 opus 文件中每个数据包的实际字节数,当然是按照编码数据包的正确顺序。

任何人都可以帮助我以最少的编程实现目标吗?是否有任何 opus 文件分析器或播放器来提供我需要的信息?

0 投票
2 回答
2014 浏览

android - 支持 opus 的 Android ffmpeg

我正在关注教程,进行了一些更改,我想添加opus支持,我认为添加选项--enable-libopus是我所需要的,但没有,当我尝试使用 shell 编译时,我得到了错误:

配置文件

错误:

如果想要我可以发布config.log内容,但它很大。

在文件夹 ffmpeg 我有一个来自 source.ffmpeg.org 分支的 git clonerelease/1.2

0 投票
2 回答
2393 浏览

ios - 使用 XCode 5 为 iOS 编译 Opus 1.1-rc2

我正在尝试使用针对 iOS 的 ARM NEON 优化来编译 Opus 1.1-rc2。

这是我正在使用的配置:

如果我使用--disable-asm,一切都编译得很好 :) 但我确实想要 ARM NEON 优化,所以我不想设置标志。麻烦来了:

没有-no-integrated-as,我得到:

-no-integrated-as,我得到:

那么我应该怎么做才能为 iOS 编译带有 ASM NEON 优化的 Opus 呢?

(顺便说一句,使用 ASM Neon optims 为 Android 编译 Opus 非常简单直接)