作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如果你口齿不清,请不要尝试说出我的标题。
但是,是的,什么是生成简单的最简单的方法,或者更复杂的锯齿波和其他波的 Bonus。
最佳答案
根据我的经验 .wav file format (Wikipedia entry 列出了提供文件格式的其他文档;使用您认为最好的一种)是最简单且广泛使用的一种。编写未压缩的 PCM 非常容易。
对于正弦波和锯齿波之类的东西,我会将任务分为采样和文件制作。所以你可能有一个界面,例如:
public interface IWave
{
double Sample(double time);
}
其中 Sample
将被赋予一个大于 0(但可能大于 1)的时间,并且应该返回一个介于 -1 和 1 之间的值。(您可以为此使用委托(delegate)。)然后编写文件生成器以根据采样持续时间(例如“100000 波”)和采样频率(例如 50000 Hz)创建 wav 文件。
那么这只是一个适本地实现 IWave
的例子——例如一个为简单的正弦波返回 sin(time/(2 * pi))
或为锯齿波返回 (time % 1.0) * 2 - 1
的版本。对于额外的娱乐,您可以编写组合函数来加速或减慢波浪、放大它、组合其他波浪等。当然,文件生成器不需要知道这些。任何。它只需要采用单个 IWave
并对其进行适当次数的采样,适本地将 [-1, 1] 范围缩放到 [0, 255]。
关于c# - 如何在 C# 中合成和输出简单的声波?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933617/
我是一名优秀的程序员,十分优秀!