问题标签 [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.
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。
谢谢。
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 编程,我无法理解发布的解决方案(我自己的错),所以我希望得到一个非常简单的指南。将不胜感激。谢谢你。
fonts - 在 JUCE 中嵌入字体
我正在寻找在 JUCE 中嵌入字体的简单分步解决方案。
我在我的应用程序中嵌入字体时遇到了一些麻烦(完全忘记在应用程序发布之前投入时间,现在我的应用程序没有在用户系统上显示我的字体 - 可以理解)。
我已经搜索并关注了有关该主题的所有可用帖子,但仍然遇到问题。我想将嵌入字体添加到我的应用程序中已经存在的标签中,这些标签是我们通过 ProJucer GUI 组件创建和布局的。
到目前为止我所做的:
1) 将字体添加到我的 ProJucer 会话中,以便将其添加到 BinaryData
2) 创建了一个名为“EmbeddedFont:”的类
和
3)在我的 GUI 组件类的标题中创建了一个实例 4)尝试将此字体传递给标签字体:
不太确定从这里做什么。另外,在我让嵌入的字体工作之后,我应该对 projucer GUI 组件中的字体字段做些什么?我应该将其设置为相同的字体吗?我只是问,因为从技术上讲,我将在构造函数中设置字体两次(一次来自 GUI 组件选项下拉菜单,一次来自手动编码嵌入字体)。
我已经尝试了几天,但仍然遇到问题。谢谢你的帮助。这是我在发布下一个应用程序更新之前需要做的最后一件事,因此非常感谢任何帮助。
c++ - JUCE 无法在音频插件上插入按钮
我正在尝试在音频插件中添加一个按钮,但在测试时似乎无法显示它。
我正在使用插件主机进行测试,并查看 GUI。pad1
定义在PluginEditor.h
:
我已将以下代码放入PluginEditor.cpp
:
我按照本教程作为如何添加按钮的指南:https ://www.juce.com/doc/tutorial_rectangle_advanced
有什么我想念的吗?它看起来与指南中的代码相同。
graphics - 视口在 Juce 中是如何工作的?
谁能解释一下视口在 JUCE 框架中是如何工作的。我在论坛上找到了一个讨论,但我无法理解分层组件。我很困惑,请用一个简单的例子来解释我。
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'不幸的是)
提前感谢您的回答!
c++ - 局部变量的赋值导致音频在 JUCE 中停止处理
编辑:结果证明这是一个未初始化的变量,会产生混乱的行为。请参阅这篇关于获取更多 JUCE 编译器警告的帖子
我试图创建一个基本的合成器,但在尝试为新声明的变量赋值时很快遇到了一个荒谬的问题。在遵循 JUCE 简单的正弦合成教程之后,我遇到了问题。这是我的getNextAudioBlock()
函数在产生白噪声时的基本代码。请注意如何在整个过程中声明和分配四个整数:
但是,一旦我尝试添加另一个 int,我就再也听不到声音了。只需简单地int unusedVariable = 0;
在函数中的任何位置添加该行,getNextAudioBlock()
但在buffer[sample]
分配立即从函数返回之前,因此它不会产生音频。
如果我只是简单地声明新变量 ( int unusedVariable;
),那么它仍然有效。只有特别是分配部分导致错误。此外,如果我将变量声明为全局成员,那么函数内的赋值就可以正常工作。
重申一下,这有效:
这有效:
但这不会:
我唯一的想法是在音频线程上分配新内存会导致错误,但我已经看到在其他在线资源中完成声明和分配,甚至在我完全相同的函数中使用 numChannels、numSamples、channel 和 sample 都分配和分配得很好。我还认为它与使用 Random 类有关,但即使它生成正弦波,我也会遇到同样的问题。
编辑:这是从项目复制的确切代码。这里 nextSample 是全局声明的,因为在本地声明缓冲区时缓冲区不会被填充
c++ - 使用 JUCE 和重编译器的 Apple Mach-O 链接器错误
我目前正在使用 JUCE 框架和从Heavy Pure Data Online Compiler生成的 C 代码编写一个超级基本的插件。源代码构建良好,但是 Xcode 没有创建独立的应用程序、AudioUnit 或 VST。我的猜测是该项目没有正确设置以使用包含的代码,但是我仍在学习有关 Xcode 的方法,并且似乎无法解决修复以下错误的问题。关于如何解决这个问题的任何建议?
编辑:终于开始使用 git 并将项目上传到 GitHub here。
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 对那个警告不好。
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 是有状态的,并且有我需要控制的自己的时钟?
我的波形是一些众所周知的问题的症状吗?