【发布时间】:2011-09-14 02:45:38
【问题描述】:
我喜欢电子音乐,我对它的节奏很感兴趣。 我在可用于播放音频、过滤器等的库上的 Stack Overflow 上发现了很多有用的问题。但我真正好奇的是实际情况如何:数据是如何在效果器和振荡器之间传递的?我已经对 dsp 的数学方面进行了研究,我已经解决了这个问题,但我不确定要使用什么缓冲系统等。最终目标是有一个简单的对象层次结构的效果和振荡器来传递数据彼此之间(如果我最终没有拔出所有头发试图实现它,可能会使用多线程)。它不会成为下一个 Propellerhead 原因,但我对它的工作原理很感兴趣,这更像是一种练习,而不是最终产品。
目前我使用 .net 和 C#,并且我最近学习了 F#(这可能会或可能不会导致一些有趣的数据处理方式)但如果这些不适合这份工作,我可以在必要时学习另一个系统.
问题是:使用缓冲区通过程序获取大量信号数据的最佳方法是什么?例如,使用队列、数组、链表等会更好吗?每次我对系统应用效果时,我应该使样本不可变并创建一组新数据,还是只编辑缓冲区中的值?我应该有一个调度程序/线程池样式的对象来组织传递数据,还是应该让效果函数在彼此之间直接传递数据?
谢谢。
编辑:另一个相关问题是我将如何使用 Windows API 来播放这个数组?我真的不想使用 DirectShow,因为微软现在几乎让它死了
EDIT2:感谢所有答案。在查看了所有技术之后,我将使用 XNA 4(我花了一段时间在互联网上搜索并找到了 this site,它解释了如何做到这一点)或 NAudio 来输出音乐......还不确定哪一个,取决于如何先进的系统最终成为。当 C# 5.0 出现时,我将使用它的异步功能在此基础上创建效果架构。我几乎平等地使用了每个人的答案,所以现在我有一个难题,谁应该给予赏金......
【问题讨论】:
-
你能问一个具体的问题吗?
-
是的,抱歉,有点含糊。
标签: c# .net audio f# buffering