我喜欢电子音乐,我对这一切都很感兴趣.我在库上发现了很多有用的问题,可以用来播放音频,过滤器等等.但我真正好奇的是实际上是什么样的:如何在效果和振荡器之间传递数据?我已经研究了dsp的数学方面,我已经解决了问题的结束,但我不确定使用什么缓冲系统等.最终的目标是有一个简单的对象层次效果和振荡器传递数据彼此之间(如果我最终没有拉出所有的头发试图实现它,可能使用多线程).它不会成为下一个Propellerhead Reason,但我对它的运作方式感兴趣,这更像是一种运动而不是最终产品.
目前我使用.net和C#,我最近学习了F#(可能会或可能不会导致一些有趣的处理数据的方法),但如果这些不适合这项工作,我可以在必要时学习另一个系统.
问题是:使用缓冲区通过程序获取大量信号数据的最佳方法是什么?例如,我会更好地使用队列,数组,链接列表等?我是否应该使样本不可变并在每次将效果应用于系统或仅编辑缓冲区中的值时创建一组新数据?Shoud我有一个调度程序/线程池样式对象来组织传递数据,或者效果函数是否应该直接在彼此之间传递数据?
谢谢.
编辑:另一个相关的问题是我如何使用Windows API来播放这个数组?我真的不想使用DirectShow,因为微软现在几乎让它死了
EDIT2:感谢所有的答案.看完所有的技术后,我要么使用XNA 4(我花了一段时间在网上搜索,发现这个网站解释了怎么做)或者NAudio输出音乐...不确定哪一个,取决于如何先进系统最终成为.当C#5.0问世时,我将使用其异步功能来创建一个效果架构.我几乎平等地使用了每个人的答案,所以现在我有一个难题是谁给予赏金......
我已经谷歌搜索了一段时间......好吧,对不起,这个很简单,但是F#中有一个运算符来比较类类型,比如C#中的'is'关键字?我不想使用完整的匹配声明或开始铸造东西.干杯
我已经在这个上浪费了几个小时:
XmlSerializer serializer;
Run Code Online (Sandbox Code Playgroud)
是的,就在using那里,引用就在那里,我使用.NET 4.0在VS2010中制作了整个解决方案,所以它不是那些东西.如果我进入对象资源管理器,我可以XmlSerializer在正确的命名空间中找到我想要的类但是如果我尝试在我的代码文件中键入上面的行并编译我得到了可怕的
找不到类型或命名空间名称"XmlSerializer"(您是否缺少using指令或程序集引用?)
死亡警告.我也没有在IntelliSense上得到它.我看过的所有其他主题/网站都是空白的,或者我已经排除了其中一个解决方案.我错过了什么?干杯
对不起,如果这已经得到解答,但其他帖子已经过时了.
我想用HTML5和JavaScript构建一个Windows 8应用程序,它使用F#可移植库项目来完成计算繁重的工作.这是允许的吗?当我试图从JS项目中添加对我的F#项目的引用时VS2012给了我一个错误,但是我还是让它添加它,这会在以后爆炸吗?我也想制作一个Windows Phone 8版本
谢谢
目前我正在使用一个List<short>缓冲区来保存一段时间,同时根据缓冲区中的其他值对每个值进行计算.然后我意识到这可能不是很有效,因为我被告知这List<>是一个链表,所以每次我做whatever = myList[100];穷人的事情就是必须先跳过所有其他节点才能得到我想要的值.我不想使用的规则阵列,因为我已经得到的负荷Add()和Remove()在代码中的其他地方踢周围秒.所以我需要一个继承IList<T>但使用常规数组数据结构的类.有没有人知道.net中的一个类是这样工作的,所以我不必自己编写?我尝试使用ArrayList,但它'通用!
这个问题让我很生气.这是一般要点:
我在解决方案中有两个项目:第一个是F#控制台应用程序,第二个是带有DisplayWindow从WPF窗口继承的C#+ XAML类的C#库.DisplayWindow有一种方法public void SetMessage(string s) {...}可以让窗口以大闪亮的字母显示传递给它的文本,这些字母可能也会闪烁并旋转,并完成WPF擅长的所有其他操作.
问题是:从我的F#程序中我需要创建一个函数,let openAWindow text = ???以便DisplayWindow每次用文本调用它时都会异步打开一个新函数.做这个的最好方式是什么?使用async {}或System.Threading.Thread?谢谢您的帮助 :)
编辑:我发现这篇博客文章http://deanchalk.com/2010/10/08/f-interacting-with-wpf-dispatcher-via-f-interactive-window/有效,但有时(?)会导致ArgumentException错误文本"已存在具有相同密钥的条目".所以我不知道那里发生了什么:(
任何人都可以帮我解决C#的语法问题吗?我不知道该怎么做.
class SomeClass<T> : SomeOtherClass<T> where T : ISomeInterface , IAnotherInterface
{
...
}
Run Code Online (Sandbox Code Playgroud)
我想SomeClass的从SomeOtherClass继承和IAnotherInterface以及对于T继承ISomeInterface 只
似乎问题是where关键字将一切都搞砸了,以便编译器认为ISomeInterface和IAnotherInterface都应该由T继承.
这个问题非常烦人,我认为解决方案是某种括号,但我尝试过但找不到有效的方法.此外,切换从SomeClass继承的两个项的顺序不起作用,因为继承的类总是必须在任何接口之前.我在MSDN C#泛型页面上找不到任何解决方案,我无法相信我是第一个遇到此问题的人.
谢谢,非常感谢任何帮助!
我正在尝试制作一个程序,该程序可以从用户的音乐库中获取 .mp3 文件,并使用 Windows Media Foundation 将其转换IMFSourceReader为包含 PCM 值的数组,用于一些令人兴奋的 DSP 操作。但是,我遇到了问题。
我的解决方案有两个项目;一个包含 UI 代码的 C#/XAML 和一个 C++ 库,其中包含一些与 Media Foundation 和 XAudio2 一起使用的本机代码以及一些public refC# 代码可以与之交互的类。
我无法使用,MFCreateSourceReaderFromURL因为即使您在应用程序清单中具有音乐库功能,它也会返回 ACCESS DENIED HRESULT。所以看起来我将不得不使用MFCreateSourceReaderFromByteStream或MFCreateSourceReaderFromMediaSource。现在,使用Windows.Storage.KnownFolders.MusicLibraryaStream或 anIInputStream以及其他一些流类型来访问音乐文件很容易,但是如何将其转换为 anIMFByteStream或 anIMFMediaSource或仅以某种方式将 mp3 解码为具有 PCM 值的字节数组?
我还考虑了将音乐文件重新保存在应用程序文件夹中的想法,以便我可以使用,MFCreateSourceReaderFromURL或者可以直接绕过与 Media Foundation 的工作,并使用类似Windows.Media.Transcoding的方法转换为 PCM。我不确定这是 Transcoding 命名空间的用途。
我花了几个小时阅读 Media Foundation 文档,我发现了一丝希望MFCreateMFByteStreamOnStream,可以将 COM 转换IStream为字节流,但我需要找到/编写一个包装器来将我的 .net 流转换为 IStream。在我开始这项任务之前,我只想确保我朝着正确的方向前进,或者有更好的方法来做到这一点? …
到目前为止,我对F#中的类型推断给我留下了深刻的印象,但是我找到了一些它没有真正得到的东西:
//First up a simple Vect3 type
type Vect3 = { x:float; y:float; z:float } with
static member (/) (v1 : Vect3, s : float) = //divide by scalar, note that float
{x=v1.x / s; y= v1.y /s; z = v1.z /s}
static member (-) (v1 : Vect3, v2 : Vect3) = //subtract two Vect3s
{x=v1.x - v2.x; y= v1.y - v2.y; z=v1.z - v2.z}
//... other operators...
//this works fine
let floatDiff h (f: float -> float) x = …Run Code Online (Sandbox Code Playgroud) 谁能帮我?我无法弄清楚我做错了什么,但似乎会有一个简单的解决方案:
通常你可以is像这样使用:
if (theObject is MyClass) ...
Run Code Online (Sandbox Code Playgroud)
但是如果你想指定它在运行时检查的类型,那么就不会编译
Type theType = ...
if (theObject is theType) ...
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
if (theObject.GetType() == theType) ...
Run Code Online (Sandbox Code Playgroud)
但这只有theType在确切类型的情况下才有效,并且不会像is语句那样考虑继承
我确定存在一个解决方案(可能使用泛型),但我现在想不到一个(它突然记得你点击'发布'时如何做的事情)
好吧,我在VS2012中创建了一个F#可移植库项目,并且我有一些代表Utf-32编码字符的整数,例如:0x0001D538这是一个双击A.通常要将它变成Utf-16代理对,你会使用System.Char.ConvertFromUtf32(i),工作完成.但是,Microsoft已经决定不在.net可移植子集中包含此方法.(它在交互式窗口中运行良好,必须运行完整的.net).那么,我应该怎样做才能从这些整数中获得我最喜欢的代理对?它们需要是整数,因为我对它们进行了一些算术运算.等待下一个版本的东西出来是一个可行的选择.