C# 中真正的低电平声音生成?
有人知道在 C# 中创建任意声波并从扬声器播放的明智方法吗?
多年来这个问题时不时地出现,我总是在多次失败后找不到解决方案而放弃。
我想做的就像一个反向可视化器,也就是说,我不想从声音生成“数字”,我想从数字生成声音。
就像获取我提供的采样率、样本大小和声音数据(例如整数数组)的函数一样,它会从中生成适当的 wav 文件(实时声音播放是理想的,但我'我也会对此感到非常满意)。
我知道 wav 文件规范遍布互联网,并且确实多次尝试创建上述函数,在低频方面取得了一些成功,但是一旦我开始弄乱每个样本的位数等......它就会变成一个巨大的、无法控制的混乱。
这不是已经以任何方式完成了吗? 我不介意它使用什么,只要有一个 .NET 托管包装器(并且我可以从最近的 VS 访问它)。 XNA 不支持这种方式的低电平音频。还发现了几个声称可以实现类似功能的例子,但它们要么根本不起作用,要么做了完全不同的事情。
谢谢。
Anyone knows of a sensible way to create an ARBITRARY sound wave in C# and play it back from the speakers?
This issue has been coming back to every now and then for years, I always end up giving it up after a lot of failure without finding a solution.
What I want to do is like a reverse-visualizer, that is, I don't want to generate "numbers" from sound, I want to generate sound from numbers.
Like get a function that I provide with sample rate, sample size, and the sound data (an array of integers for example), and it would generate the appropriate wav file from it (real-time sound playback would be ideal, but I'd be more than pleased with this too).
I know the wav file specifications are all over the interweb, and did make several attempts creating the above function, had some success for low frequencies, but once I start messing with bits per sample etc... it becomes a HUGE, uncontrollable mess.
Is this not already done in any way?
I wouldn't mind what it uses, as long as there's a .NET managed wrapper for it (and I can access it from the most recent VS to time).
XNA doesn't support low level audio this way. Also found several examples that claim to achieve something similar, but they either don't work at all, or do something entirely different.
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这看起来很有趣,所以我开发了一个简单的应用程序:
您可以轻松更改采样率、音调频率和采样持续时间。该代码非常丑陋且空间效率低下,但它可以工作。以下是一个完整的命令行应用程序:
This looked interesting so I've knocked up a simple app that:
You can easily change the sample rate, tone frequency and sample duration. The code is very ugly and space-inefficient but it works. The following is a complete command-line app:
FMOD 可以从内存加载样本并具有 C# 包装器。
FMOD can do sample loads from memory and has a C# wrapper.
下面如何从数组中播放
How to play from an array below