问题标签 [juce]

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 投票
1 回答
542 浏览

pdf - 使用 CIDFont 生成 pdf

全部

我正在为一种不太流行的新语言编写一个 pdf 生成库。我已经完成了一些功能,包括文本输出和图像嵌入,但它只支持标准的 14 种字体。

我现在正在为其添加大字符集支持,这意味着我必须使用除标准 14 字体之外的其他字体。在我看来,utf-8编码的字符可以被pdf正确识别,并且通过一个CIDFont CMap,它可以找到字符的字形并进行绘制。

我查阅了一些关于此的文档,发现最好的方法是将字体嵌入到 pdf 文档中,包括标准的 14 种字体。

因为大字符集是一个非常大的集合,所以我想我可以使用 CharSet 和 CIDSet 来解析它的一个子集。

我使用的语言将JUCE包装为内核,我可以使用它来操作字体。所以我想我可以正常得到字体的字形。

但是作为一个跨平台(桌面操作系统和移动操作系统),JUCE不支持更多的字体信息,例如领先,stemV,ItalicAngle,大写高度等,即使我不知道字体的类型( Type1、TrueType、OpenType 或其他)。所以我不知道它是否可以用于pdf生成?

如果不能,那么我必须手动解析外部 type1(ccf?) 或 ttf(ttc) 字体文件吗?然后我将大员工(约2MB)嵌入到pdf中?

如果可以,那该怎么做?如何使用字符字形生成嵌入字体流?并使用自定义 CMap 找到它们?

另一个问题是我应该使用什么编码?我使用utf-8作为字符串编码,不知道能不能用于CIDFont。

代码位于:a pdf library for 8th

谢谢。

0 投票
1 回答
2489 浏览

c++ - JUCE - 制作新窗口

在使用 JUCE 中的可视 WYSISWYG 编辑器制作单页应用程序后,我在弄清楚如何调用新窗口(在主 GUI 窗口之外)时遇到了一些麻烦。我制作了一个测试应用程序,它只有一个使用可视化编辑器创建的最小主 GUI。它有一个按钮“制作新窗口”。我的目标是能够单击该按钮并弹出一个新窗口,并且这个新窗口是 JUCE“GUI 组件”(AKA,图形/可视 GUI 编辑器文件)。现在,我实际上已经实现了这一点,但是,它会抛出错误和断言,因此获得一个非常简单的分步教程会很棒。

我研究了 Projucer 自动创建的 main.cpp 文件,以了解它们是如何创建窗口的。这就是我所做的。

1) 在我的项目中,我添加了一个新的 GUI 组件(它变成了一个类)并将其命名为“InvokedWindow”。2) 在我的主 GUI 组件类头中,我添加了一个 InvokedWindow 类型的新范围指针:ScopedPointer<InvokedWindow> invokedWindow; 3) 我在主 GUI 编辑器中创建了一个名为“Make New Window”的新按钮,并将其添加到处理程序代码中: newWindowPtr = new InvokedWindow;以便任何时候按下按钮,就会创建一个 InvokedWindow 类型的新对象。4) 在 InvokedWindow 类的构造函数中,在自动生成的代码之上,我添加了:

这是我从 JUCE 应用程序的主文件中得到的。

我还在这个新窗口中添加了一个滑块,只是为了向它添加功能。

5)我添加了一个重载函数让我关闭窗口:

所以,现在当我运行应用程序并单击 make new window 按钮时,会弹出一个新窗口,但我得到一个断言:

此外,我可以关闭一次窗口并点击主 GUI 中的按钮以创建另一个 newWindow 实例,但再次关闭它会导致错误:

这一切都让我有点过头了。我认为能够通过一个按钮创建一个新窗口并不会太糟糕。我可以使用图形 GUI 编辑器编辑一个新窗口,但通过我尝试过,我无法完全靠自己解决所有问题。任何人都可以发布一步一步的指南来正确地做到这一点吗?我确实在 JUCE 论坛上发布了这个,但由于我缺乏 GUI 编程,我无法理解发布的解决方案(我自己的错),所以我希望得到一个非常简单的指南。将不胜感激。谢谢你。

0 投票
1 回答
1491 浏览

fonts - 在 JUCE 中嵌入字体

我正在寻找在 JUCE 中嵌入字体的简单分步解决方案。

我在我的应用程序中嵌入字体时遇到了一些麻烦(完全忘记在应用程序发布之前投入时间,现在我的应用程序没有在用户系统上显示我的字体 - 可以理解)。

我已经搜索并关注了有关该主题的所有可用帖子,但仍然遇到问题。我想将嵌入字体添加到我的应用程序中已经存在的标签中,这些标签是我们通过 ProJucer GUI 组件创建和布局的。

到目前为止我所做的:

1) 将字体添加到我的 ProJucer 会话中,以便将其添加到 BinaryData

2) 创建了一个名为“EmbeddedFont:”的类

3)在我的 GUI 组件类的标题中创建了一个实例 4)尝试将此字体传递给标签字体:

不太确定从这里做什么。另外,在我让嵌入的字体工作之后,我应该对 projucer GUI 组件中的字体字段做些什么?我应该将其设置为相同的字体吗?我只是问,因为从技术上讲,我将在构造函数中设置字体两次(一次来自 GUI 组件选项下拉菜单,一次来自手动编码嵌入字体)。

我已经尝试了几天,但仍然遇到问题。谢谢你的帮助。这是我在发布下一个应用程序更新之前需要做的最后一件事,因此非常感谢任何帮助。

0 投票
1 回答
356 浏览

c++ - JUCE 无法在音频插件上插入按钮

我正在尝试在音频插件中添加一个按钮,但在测试时似乎无法显示它。

我正在使用插件主机进行测试,并查看 GUI。pad1定义在PluginEditor.h

我已将以下代码放入PluginEditor.cpp

我按照本教程作为如何添加按钮的指南:https ://www.juce.com/doc/tutorial_rectangle_advanced

有什么我想念的吗?它看起来与指南中的代码相同。

0 投票
1 回答
991 浏览

graphics - 视口在 Juce 中是如何工作的?

谁能解释一下视口在 JUCE 框架中是如何工作的。我在论坛上找到了一个讨论,但我无法理解分层组件。我很困惑,请用一个简单的例子来解释我。

0 投票
1 回答
130 浏览

enums - 如何使用 Cython 调用 JUCE?

目前我正试图让 JUCE 音频框架在 Cython 上工作。因此,我首先想通过 JUCE 框架显示一个AlertWindow来运行一个小而简单的示例,但目前我似乎遇到了两个小问题: 1. 从 JUCE 框架调用枚举时遇到问题2.我不知道如何包含整个框架进行编译和链接。

我的 setup.py(用“python3 setup.py build_ext --inplace”调用):

我的 testb.pyx(问题 1 在这里):

此外,我不断收到这些类型的错误,据我所知,这是由于框架的其余部分没有被编译和包含/链接造成的。我该怎么做?

此外,使用 --inplace 标志,所有编译的文件都会转储到我的主文件夹中,这似乎不是很可扩展,尤其是对于较大的框架。如何确保所有 .so 文件最终都包含在内,以便轻松引用?还是有更好的方法来解决这个问题?


好的,所以在@ead 的帮助下,我能够更进一步。代码现在如下所示:

还有我的 Cython 文件:

该示例现在可以正常编译。但是,当我导入生成的包时,出现以下错误:

这似乎与 Cocoa (here)或 CoreGraphics (here)有关(我也相信它是 Cocoa 的继承者)。那么我将如何解决这个问题?我是否需要包含 CoreGraphics 框架,如果需要,如何包含?(只需添加标志-framework CoreGraphics会导致clang: error: unknown argument: '-framework CoreGraphics'不幸的是)

提前感谢您的回答!

0 投票
1 回答
145 浏览

c++ - 局部变量的赋值导致音频在 JUCE 中停止处理

编辑:结果证明这是一个未初始化的变量,会产生混乱的行为。请参阅这篇关于获取更多 JUCE 编译器警告的帖子

我试图创建一个基本的合成器,但在尝试为新声明的变量赋值时很快遇到了一个荒谬的问题。在遵循 JUCE 简单的正弦合成教程之后,我遇到了问题。这是我的getNextAudioBlock()函数在产生白噪声时的基本代码。请注意如何在整个过程中声明和分配四个整数:

但是,一旦我尝试添加另一个 int,我就再也听不到声音了。只需简单地int unusedVariable = 0;在函数中的任何位置添加该行,getNextAudioBlock()但在buffer[sample]分配立即从函数返回之前,因此它不会产生音频。

如果我只是简单地声明新变量 ( int unusedVariable;),那么它仍然有效。只有特别是分配部分导致错误。此外,如果我将变量声明为全局成员,那么函数内的赋值就可以正常工作。

重申一下,这有效:

这有效:

但这不会:

我唯一的想法是在音频线程上分配新内存会导致错误,但我已经看到在其他在线资源中完成声明和分配,甚至在我完全相同的函数中使用 numChannels、numSamples、channel 和 sample 都分配和分配得很好。我还认为它与使用 Random 类有关,但即使它生成正弦波,我也会遇到同样的问题。

编辑:这是从项目复制的确切代码。这里 nextSample 是全局声明的,因为在本地声明缓冲区时缓冲区不会被填充

0 投票
1 回答
238 浏览

c++ - 使用 JUCE 和重编译器的 Apple Mach-O 链接器错误

我目前正在使用 JUCE 框架和从Heavy Pure Data Online Compiler生成的 C 代码编写一个超级基本的插件。源代码构建良好,但是 Xcode 没有创建独立的应用程序、AudioUnit 或 VST。我的猜测是该项目没有正确设置以使用包含的代码,但是我仍在学习有关 Xcode 的方法,并且似乎无法解决修复以下错误的问题。关于如何解决这个问题的任何建议?

编辑:终于开始使用 git 并将项目上传到 GitHub here

0 投票
1 回答
278 浏览

c++ - 如何获得编译器警告 JUCE - Ubuntu

我最近正在处理一个错误,该错误应该很容易通过一个简单的编译器警告来实现
有谁知道在 Ubuntu 上编译 JUCE 项目时如何显示编译器警告make

我尝试过:

  • make -Wall来自gcc/gnu 警告选项文档-> 没有变化
  • make V=1如makefile中所述 - >它很冗长,但没有显示警告
  • 在 Projucer -> live build 中编辑实时构建设置在 Ubuntu 上不起作用

编辑:OMGtechy 回答

要将编译器警告添加到构建中:在 Projucer 文件管理器的 Exporter 选项卡中编辑 Linux Makefile 设置(参见他的答案中的图片)。但是,在我也使用优化标志运行之前,我没有看到任何“未初始化变量”警告-O2。显然gcc 对那个警告不好

0 投票
1 回答
601 浏览

vst - 如何发送要由合成器处理的音频块——没有间断

我正在使用Juce框架来构建 VST/AU 音频插件。音频插件接受 MIDI,并将 MIDI 渲染为音频样本——通过发送 MIDI 消息由FluidSynth(一种声音合成器)处理。

这几乎可以工作了。MIDI 消息正确发送到 FluidSynth。事实上,如果音频插件告诉 FluidSynth 将 MIDI 消息直接渲染到它的音频驱动程序——使用正弦波声音字体——我们会得到一个完美的结果:

完美的正弦波,通过将音频直接发送给驱动程序

但我不应该要求 FluidSynth 直接渲染到音频驱动程序。因为这样 VST 主机将不会收到任何音频。

要正确执行此操作:我需要实现一个renderer。VST 主机每秒会询问我 (44100÷512) 次以呈现 512 个音频样本。


我尝试按需渲染音频样本块,并将其输出到 VST 主机的音频缓冲区,但这是我得到的那种波形:

渲染音频块,效果不佳

这是同一个文件,每 512 个样本(即每个音频块)都有标记:

带标记

所以,很明显我做错了什么。我没有得到连续的波形。我处理的每个音频块之间的不连续性非常明显。


这是我的代码中最重要的部分:我对 JUCE 的SynthesiserVoice.

这是要求合成器的每个声音产生 512 个音频样本块的地方。

这里的重要功能是SynthesiserVoice::renderNextBlock(),我要求fluid_synth_process()生成一个音频样本块。


这是告诉每个声音的代码renderNextBlock():我的AudioProcessor.

AudioProcessor::processBlock()是音频插件的主循环。在其中,Synthesiser::renderNextBlock()调用每个声音的SynthesiserVoice::renderNextBlock()


我在这里有什么误解吗?让 FluidSynth 给我与前一个样本块背靠背的样本是否需要一些时间上的微妙之处?也许我需要传入一个偏移量?

也许 FluidSynth 是有状态的,并且有我需要控制的自己的时钟?

我的波形是一些众所周知的问题的症状吗?

源代码在这里,以防我遗漏了任何重要的东西。提交时发布的问题95605