当前位置: 首页 > 编程语言 > C#

C#是否可以生成复音?分享

时间:2023-04-10 14:28:29 C#

C#可以生成复音吗?我需要创建一种包含许多不同频率音调的声音。有没有办法在C#中执行此操作?到目前为止,我见过的唯一音调生成方法涉及console.beep,它有效,但仅适用于纯音(单频)。Audiere库使这变得非常容易。下面是一个几乎完整的C#程序,用于为“1”按钮生成DTMF音调:AudioDevicedevice=newAudioDevice();OutputStreamtone1a=device.CreateTone(697);//“1”按钮的DTMF的A部分OutputStreamtone1b=device.CreateTone(1209);//B部分tone1a.Volume=0.25f;tone1b.Volume=0.25f;tone1a.Play();tone1b.Play();线程.睡眠(2000);//当tone1a停止时,您可以很容易地判断出该音调确实是DTMFtone1a.Stop();要在C#中使用Audiere,启动和运行的最简单方法是使用HaraldFielker的C#绑定(他声称可以在Mono和VS中使用;我可以确认它适用于完整版本的VS2005和单独的Express2008C#和VC++版本)。您需要下载Win32AudiereDLL、库和标头(它们都在同一个zip文件夹中),您需要使用VC++和C#从源代码构建C#绑定。使用Audiere的一个好处是调用是非阻塞的。您不必等到tone1a停止播放后才开始播放tone1b,这显然是播放复杂音调所必需的。我不知道您可以使用多少个同步输出流有任何硬性限制,所以它可以是您的硬件/操作系统支持的任何东西。顺便说一句,Audiere还可以播放某些音频文件(MP3、WAV、AIFF、MOD、S3M、XM、IT本身;OggVorbis、Flac、带有外部库的Speex),而不仅仅是纯粹生成的音调。一个可能的缺点是当您开始或停止单一音调时会有轻微的“咔哒”声;如果您将音调添加到已经播放的音调中,则不会引起注意。我发现的最简单的解决方法是分别在音调打开或关闭时慢慢调高或调低音量。您可能需要调整斜坡速度以使其听起来“恰到好处”。请注意,Audiere是根据LGPL获得许可的,绑定没有附加许可。如果您想在商业产品中使用他的绑定,则必须咨询您的法律团队或尝试联系Harald。或者你可以约束自己,避免麻烦。@Tom:由于Harald的图书馆没有特定的许可证,我不确定托管它的含义是什么;但是,我相信我至少可以详细说明我的libaudieresharpglue项目是如何设置的。使用VisualC++Express2008,打开bindings/csharp/libaudieresharpglue/vc8.0/libaudieresharpglue.sln。VC++会自动将解决方案转换为VS9解决方案。在另一个文件夹中,您应该有来自Sourceforge的Audiere包。在VC++项目属性下,转到ConfigurationProperties>C/C++>General并确保在“AdditionalIncludeDirectories”中有路径/to/audiere-1.9.4-win32/include。然后,在同一窗口中,转到“链接器”>“常规”,并确保“其他库目录”中有/path/to/audiere-1.9.4-win32/lib。然后,您应该能够在vc8.0/Release文件夹中构建项目(最好在Release模式下)并输出libaudieresharpglue.dll。接下来,打开VisualC#Express2008。打开bindingscsharptestvc8.0AudiereCSharpTest.sln并让它转换解决方案。该项目应该可以正常构建,但是当您运行它时会出现错误。没关系;在csharp/test/vc8.0/bin/Release文件夹中,您需要添加来自VC++解决方案的libaudieresharpglue.dll和来自Sourceforge包的audiere.dll。您现在应该能够构建和运行AudiereCSharpTest。请注意,默认情况下,#definestream_test在AudiereTest.cs的顶部没有注释,这将引用不在硬盘驱动器上的文件。您可以简单地注释掉#define并取消注释noise_test或square_test。那应该涵盖它;如果我遗漏了任何细节,希望它们足够小,可以自己完成:)您可以随时尝试DirectSound...我一直在研究NAudio,希望创建一个程序来模拟播放背景音乐时的反馈。有一篇关于在特定频率下生成正弦波的博客文章,我怀疑这可以适应您正在寻找的内容。对的,这是可能的。这是有关此教程的链接。但是当然这也使用Console.Beep并且MSDN文档不清楚Console.Beep是否是异步的。如果是这样,您可以快速连续拨打尽可能多的电话,没有人会更聪明。当然,您需要使用频率和持续时间版本。基本上,您必须实现自己的软件合成器或找到第3方库。参见:http://en.wikipedia.org/wiki/Demo_(computer_programming)#Music以上是C#学习教程:C#是否可以生成复音?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: