小编Kil*_*KRT的帖子

用于实时应用的音频/ MIDI C++库

正如我在另一个帖子中已经说过的那样,我正在开发一个与音频实时图形编程相关的项目(类似Pure Data,Max/MSP,Reaktor).

我在互联网上做了一天的研究,寻找一个好的(维护的,文档齐全的,高度可移植的)C++库,用于与音频和MIDI的低级交互,但我仍然无法决定一个库.

我正在考虑PortAudio + PortMIDI(PortMedia),但他们缺少文档(特别是PortMIDI),并且没有官方社区,只有邮件列表(我认为论坛社区非常重要!),同样(或最差)的情况RTAudioRTMidi库.

我也尝试一下:

  • STK,我不喜欢它的文件组织.
  • Juce,我认为它对我来说太过分了,我只需要简单的硬件集成
  • OpenAL,我不了解它的架构,它依赖于ASIO/ALSA/CoreAudio ......?我可以访问MIDI端口吗?

所以...我的问题是:你有任何实时音频/ MIDI的经验吗?你推荐我哪个图书馆?

谢谢

c++ audio midi real-time openal

16
推荐指数
2
解决办法
2万
查看次数

lambda 参数中的结构化绑定

为什么在这种情况下我不能使用 C++17 结构化绑定?

std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
Run Code Online (Sandbox Code Playgroud)

c++ c++17 structured-bindings

10
推荐指数
1
解决办法
956
查看次数

C#中的密集图形应用程序(使用.NET/Mono)

如果你在C#中编写一个2d图形密集型应用程序(如动画软件或带有自动图形控件的音序器),哪一个是图形库的更好选择?

我想开发一个跨平台的应用程序(至少在Windows 7,Linux上是可移植的),我只想使用C#,避免在C++中混合代码(由于互操作问题).

我已经尝试过OpenTK,但它缺少文档,而且它似乎不是很稳定(使用Mono它让我有时会崩溃X服务器!!!)......也许我错了,但是我觉得这不是一个长期支持的库,它会死...

.NET/Mono 有一个好的和稳定的 OpenGL包装器吗?

我知道在Mono(Moonlight)上有一个Silverlight的移植,但我读到它的性能很差.

谢谢.

.net c# opengl graphics mono

9
推荐指数
1
解决办法
3411
查看次数

OpenGL中的GUI工具包

我想开发一个类似于Pure Data的应用程序(在C++中),但是有一个很酷的GUI和更好的文档...是的,像Max/MSPReaktor,但是免费且开放!

为了创建一个吸引人的,反应性的和可移植的界面,我正在考虑使用OpenGL.在我看来,有一些像Blender GUI.

在开始开发我的自定义GUI工具包之前,我用Google搜索,以了解是否存在我可以使用的东西,并且我发现:

  • Juce:看起来很受支持,但我不明白你是否只能在界面中嵌入OpenGL画布,或者可以使用OpenGL渲染所有小部件.
  • nUI:它看起来非常酷且便携,但是...它的论坛是一片沙漠,很难找到一个教程!
  • ceGUI,FLTK,GLUI:如此扁平和灰色;-)并且任何都不会被维护.

你知道其他工具包吗?如您所知,我正在寻找一个可移植的库(在C++中),快速且受支持.

另一种可能性是从头开始使用SDL或Freeglut我的自定义工具包,在这种情况下,这可能是最好的解决方案?

PS:阅读关于这个主题的其他主题我注意到许多开发人员建议使用Qt ... Qt可以依赖OpenGL进行渲染吗?或者它只能托管OpenGL画布?无论如何你认为在Qt中创建这样的东西是可能的(有良好的性能):

c++ opengl user-interface qt toolkit

6
推荐指数
1
解决办法
5660
查看次数

如何创建虚拟 MIDI 设备

我必须编写一个将 MIDI 音符发送到通用DAW的应用程序(如步进音序器或琶音器),所以我认为实现这种事情的唯一方法是创建一个应该被识别为 MIDI 输入/输出的虚拟 MIDI 设备操作系统的接口。

我想知道这是否可以使用Portmidi开发,或者我是否需要更复杂的东西。

OS X 支持是必须的,Linux 和 Windows 支持是很好的。

midi port virtual

6
推荐指数
1
解决办法
8980
查看次数

RefCell&lt;X&gt; 和 RefCell&lt;&amp;X&gt; 上的borrow_mut 之间的区别

如果我猜std::rc::Rc,就不可能在 Rust 中通过a创建可变借用,您必须使用CellRefCell。但无论如何我无法理解如何使用它们。例如考虑这个简单的例子

use std::cell::RefCell;

struct X (i32);

impl X {
    fn foo(&mut self) {
        self.0 = 0;
    }
}

fn main () {
    let x = X(5);
    let rcx = RefCell::new(&x);

    let mut mutx: std::cell::RefMut<&X> = rcx.borrow_mut();
    (*mutx).foo();
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

16:5: 16:9 error: cannot borrow immutable local variable `mutx` as mutable
16     mutx.foo();
Run Code Online (Sandbox Code Playgroud)

但是,如果我从行中删除引用(并更新类型mutx):

let rcx = RefCell::new(x);
Run Code Online (Sandbox Code Playgroud)

一切安好。但我不明白为什么,因为RefMut::deref_mut() -> &mut T在第 16 …

reference mutability rust interior-mutability

5
推荐指数
1
解决办法
1003
查看次数

使用复杂的GUI编写跨平台应用程序

我想开发一个带有复杂GUI的应用程序(带动画的组合框,带样条的图表,透明层......).我有很好的C#2.0经验,而且我正在学习WPF,但我读到了,遗憾的是,没有计划将WPF移植到Mono.

  • 如果我坚持使用C#并使用OpenGL创建自定义GUI控件(通过OpenTK),我觉得这将是一项艰苦的工作(与GTK集成,调试,难以用于设计表单).

  • 我可以使用Java(使用JOGL),但我不熟悉它,而且我不了解性能问题.

  • 最后一个选项是C++,但我必须做一个大的修订(自上次使用它以来的几年),我发现很难用C++开发GUI和便携式应用程序.(也许我错了!不过,我很害怕用这种语言开发这么复杂的应用程序.)

你有什么建议?我最好选择C#+ OpenTK,Java + JOGL还是返回C++?

c# c++ opengl wpf jogl

2
推荐指数
1
解决办法
3575
查看次数

C#中的并行事件处理

我正在开发一个模块,它必须处理来自外部系统的许多事件.我将使用提供事件(OnNewMessage)的第三方类将一些参数作为输入传递,将两个参数作为输出传递,每个事件需要一堆时间才能被处理.我想以并行方式提供这些事件,以避免阻塞调用者并并行处理多个请求.

这是我的代码示例:

void Init()
{
   provider.OnNewMessage += new OnMessageEventHandler(processEvent);
}

void processEvent(string xml, int …, out string resultXML, out string description)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

在C#3.5中执行此操作的最佳方法是哪种?

谢谢

c# parallel-processing events multithreading

2
推荐指数
1
解决办法
1687
查看次数

使用相同的方法在向量中查找并推送元素

我觉得我的实现过于繁琐,我想有更好的方法来实现这个简单的事情.

我有一个Grid表示游戏板的结构,我有一个方法可以将一个单元添加到网格中,这个方法(add_cell)检查网格中是否已经存在一个单元格才能添加它.

struct Cell {
    // A simplified version with only one coordinate
    position: i8,
}

struct Grid {
    // List of cells in the grid
    cells: Vec<Rc<Cell>>,
}

impl Grid {
    // Add a cell in to the grid
    pub fn add_cell(&mut self, cell: Cell) {
        let is_not_yet_in;
        {
            if self.cells.iter().find(|&c| c.position == cell.position).is_some() {
                is_not_yet_in = false;
            } else {
                is_not_yet_in = true;
            }
        }
        if is_not_yet_in {
            self.cells.push(Rc::new(cell).clone());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在声明之后放了假 …

vector rust borrow-checker

0
推荐指数
1
解决办法
592
查看次数