小编Gus*_*ori的帖子

实时midi输入和音频同步

我已经构建了一个项目的独立应用程序版本,到目前为止只是一个VST/audiounit.我通过rtaudio提供音频支持.

我想使用rtmidi添加MIDI支持,但我不清楚如何同步音频和MIDI部分.

在VST/audiounit land中,我习惯于具有时间戳的MIDI事件,该时间戳指示从音频块的开始处的样本中的偏移.

rtmidi提供了自上次事件以来以秒为单位的增量时间,但我不确定如何抓住这些事件以及如何计算与音频线程中当前样本相关的时间.

插件主机如何做到这一点?

我可以理解事件在回放时的样本是如何准确的,但是在使用实时输入时它们是如何准确地采样的还不清楚.

rtaudio给了我一个回调函数.我将以低块大小运行(32个样本).我想我会将指向rtmidi实例的指针作为回调的userdata部分传递,然后调用midiin-> getMessage(&message); 在音频回调中,但我不确定这是否是线程敏感的.

非常感谢您给我的任何提示

audio midi vst audiounit

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

VST仪器多进出

我想创建一个具有16个MIDI输入和至少16个音频输出的VST乐器.类似于kontakt或halion这样做.

有任何想法吗?

c++ audio midi vst

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

包含由列和行字符串索引索引的数据的数据结构

我有一个要显示给用户的对象列表.基本上,它是用户的一组权限.我想显示一个表,其中用户为列,操作为行.然后,权限将显示在用户和操作之间的交集处.

我正在寻找一种在C#数据结构中表示这些数据的方法.它将允许使用用户(字符串)和操作(字符串)进行访问,并为每个"单元格"提供默认值.理想情况下,它将绑定到具有自动列创建的网格控件.

数组会很棒,但它只允许整数作为索引.当添加新的行/列时,还需要重新创建和复制数组.

我考虑过创建一个Dictionary<String, Dictionary<String, Permission>>对象,但它需要进行大量的错误检查,并且不能很好地处理数据网格控件.

是否存在针对该类数据结构的现有(开源?)项目?基本上,它只是"双键值"结构的增强版本.

谢谢

c# data-structures

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

VisualStudio 2010 Designer会抛出已实现的虚拟方法

我想要一个抽象的UserControl,BaseControl实现一个接口IBaseControl.但是,将类设置为抽象会破坏VisualStudio设计器(这是Visual Studio的已知问题(例如,请参阅此StackOverflow发布以获取更多信息),据我所知,预计在不久的将来不会发生任何变化

所以,要解决这个问题,我BaseControl不是抽象的,而是IBaseControl虚拟方法的实现.但是,由于这些方法对于a没有意义BaseControl(例如,尚未添加所有组件),我将它们抛出:

public class BaseControl : UserControl, IBaseControl
{
    /// <summary>
    /// This IBaseControl method is not abstract because 
    /// that breaks the Designer
    /// </summary>
    public virtual void LoadSettings()
    {
        throw new NotImplementedException("Implement in derived class.");
    }

    private void BaseControl_Load(object sender, EventArgs e)
    {
        // intention: derived methods automagically load their settings
        this.LoadSettings();
    }
}
Run Code Online (Sandbox Code Playgroud)

在派生控件中,我有相应的覆盖:

public partial class DerivedControl : BaseControl
{ …
Run Code Online (Sandbox Code Playgroud)

c# user-controls abstract-class designer visual-studio

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

使用Task.FromAsync的IAsyncResult重载的性能成本

我正在尝试将一些现有的APM调用(BeginX,EndX)包装Tasks进去,以获得它们的所有好处.不幸的是,我们的方法是非常规的并使用out参数,所以不能使用标准FromAsync方法,你给它的开始和结束代表,并让它很好地包装它.

本文描述了另一种选择:一个带有a的重载,IAsyncResult只需要你实现结束回调.他们拿走IAsyncResult句柄,然后等到它完成,然后调用你传入的代表.

这似乎很好,但后来我读了另一篇关于在任务中包装APM调用的文章.他还提到IAsyncResult过载不如其他方法有效.在我看来,这意味着回调不用于报告方法的完成.这意味着他们必须使用AsyncWaitHandle或轮询IsCompleted.他们使用哪一个?它的性能损失是多少?

如果它正在进行轮询,这意味着回调可能不会立即发生,他们必须在整个通话期间忙着检查它.如果他们有一个AsyncWaitHandle,他们有另一个线程坐着等待结果,这完全打败了我使用异步方法的意义.

有谁知道他们在做什么以及这种性能损失有多严重?

.net c# asynchronous task

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

自动附加到支持行为并不完全成功

我有一个包含几个C#项目的Visual Studio 2010解决方案,并安装并启用了Resharper 5.1.所有这些项目都以.NET Framework 4为目标.

这个解决方案已经运行了好几个月,但今天早上我在加载解决方案时得到以下消息:

Visual Studio 2010错误

我四处寻找有关此消息含义的解释,但运气不佳.

此外,我无法重现此错误,它似乎没有破坏我的项目.

尽管如此,我不喜欢这些无法解释的错误,所以我想知道是否有人读到这个错误根本原因?

visual-studio-2010 resharper-5.1

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

c#在sendkeys之间暂停

我正在基于Java的网页上做一些自动化,需要在条目之间做一些验证,所以我想我只是Thread.Sleep在每个之间做一个SendKeys.Send,但由于某种原因它只是睡了10秒(10 x 1秒暂停)因为它加载页面然后在整个表单中进行拍摄而不会在每个按键之间暂停.

任何想法为什么这样做,或任何建议的替代方式实现sendkeys之间的暂停?

Thread.Sleep(1000);
SendKeys.Send("{TAB}");
Thread.Sleep(1000);
SendKeys.Send(strTEST);
Run Code Online (Sandbox Code Playgroud)

这是一个browser_DocumentCompleted事件

.net c# automation sendkeys

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

当它是IEnumerable时,如何通过类型为"T"的对象进行枚举

这有点难以解释.所以这就是它.

我有这样的功能:

public T FooBar<T>(Func<T> function)
{
   T returnData = function();

   // want to iterate through returnData to do something to it

   return returnData;
}
Run Code Online (Sandbox Code Playgroud)

如果returnData(T)是一个IEnumerable列表,那么我想枚举通过returnData反射修改其内容.但我似乎无法做到这一点.当我尝试强制returnData转换为可枚举类型时,我得到一个异常:

无法转换类型的对象

'System.Collections.Generic.List`1 [汽车]'

输入

'System.Collections.Generic.List`1 [System.Object的]'.

我不会知道返回类型将是一个"汽车"列表,例如提前,仅在运行时.所以我必须检查使用反射,如果它是一个列表,然后尝试投射它,以便我可以枚举它.

除非我以错误的方式去做.returnData如果它是类型的,我该如何枚举T

c# reflection

5
推荐指数
2
解决办法
3249
查看次数

如何使方法在“后台”中运行(线程?)

我目前有一些代码在文本文件中循环查找特定短语。但是,运行此方法时,整个应用程序将锁定。我想是因为它在循环,这就是我想要的。

我希望这种情况在后台发生,因此常规方法和用户与应用程序的交互仍然可以完成。

如何做到/改善呢?

private void CheckLog()
{   
    while (true)
    {
        // lets get a break
        Thread.Sleep(5000); 

        if (!File.Exists("Command.bat"))
        {
            continue;
        }

        using (StreamReader sr = File.OpenText("Command.bat"))
        {
            string s = "";

            while ((s = sr.ReadLine()) != null)
            {
                if (s.Contains("mp4:production/"))
                {
                    // output it
                    MessageBox.Show(s);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# windows multithreading

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

XML名称空间中不存在该标记

我在'FluidMoveBehavior'上看到以下错误.

The tag 'FluidMoveBehavior' does not exist in XML namespace
'http://schemas.microsoft.com/expression/2010/interactions'.
Line 22 Position 14.
Run Code Online (Sandbox Code Playgroud)

这是XAML文件:

<Window x:Class="GoogleMapProject.KinectOverlay"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
        xmlns:GoogleMapProject_Behaviors="clr-namespaces:GoogleMapProject.Behaviors"
        WindowState="Maximized" WindowStyle="None" Background="Transparent"
                     AllowsTransparency="True"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Height="300"
        Width="300"
        Title="KinectOverlay"
        DataContext="{Binding PoseViewModel,
                      Source={StaticResource MainViewModel}}">

    <Grid>
        <i:Interaction.Behaviors>
            <ei:FluidMoveBehavior AppliesTo="Children" Duration="0:0:0.5">
                <ei:FluidMoveBehavior.EaseX>
                    <SineEase EasingMode="EaseInOut"/>
                </ei:FluidMoveBehavior.EaseX>
                <ei:FluidMoveBehavior.EaseY>
                    <SineEase EasingMode="EaseInOut"/>
                </ei:FluidMoveBehavior.EaseY>
            </ei:FluidMoveBehavior>
        </i:Interaction.Behaviors>
        <Canvas Background="Transparent"
                DataContext="{Binding PoseViewModel,
                              Source={StaticResource MainViewModel}}">

            <!-- Left hand -->
            <Image Source="{Binding LeftHandImage}" x:Name="leftHand" Stretch="Fill"
                   Canvas.Left="{Binding LeftHandPosition.X, Mode=TwoWay}"  
                   Canvas.Top="{Binding LeftHandPosition.Y, Mode=TwoWay}"
                   Visibility="{Binding HandVisibility}" Opacity="0.75"
                   Height="118" Width="80" RenderTransformOrigin="0.5,0.5">
                <Image.RenderTransform> …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml

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