在.NET(C#或VB.NET)中生成摩尔斯电码(或任何音频),无需第三方依赖,也无需使用音频文件
那么,在.NET(WinForms)中播放简单生成的摩尔斯电码的最佳方式是什么,而不需要任何外部文件,也不需要任何第三方库?我只想使用CLR,没有不必要的依赖项。欢迎使用C#或VB.NET代码。我会说多种语言;P (我真的不在乎产生什么音频。一个简单的单频音调就可以了。)使用 使用 使用 使用在.NET(C#或VB.NET)中生成摩尔斯电码(或任何音频),无需第三方依赖,也无需使用音频文件,c#,.net,vb.net,winforms,audio,C#,.net,Vb.net,Winforms,Audio,那么,在.NET(WinForms)中播放简单生成的摩尔斯电码的最佳方式是什么,而不需要任何外部文件,也不需要任何第三方库?我只想使用CLR,没有不必要的依赖项。欢迎使用C#或VB.NET代码。我会说多种语言;P (我真的不在乎产生什么音频。一个简单的单频音调就可以了。)使用 使用 使用 使用 有很多方法可以实现你想要的 我想对你来说最简单的方法就是演奏一些MIDI音符 见本文: NAudio库是开源的,如果你对额外的DLL不满意,你可以复制粘贴相关类到你的项目中。有很多方法可以实现你想要的 我
有很多方法可以实现你想要的 我想对你来说最简单的方法就是演奏一些MIDI音符 见本文:
NAudio库是开源的,如果你对额外的DLL不满意,你可以复制粘贴相关类到你的项目中。有很多方法可以实现你想要的 我想对你来说最简单的方法就是演奏一些MIDI音符 见本文:
NAudio库是开源的,如果你对额外的DLL不满意,你可以复制粘贴相关类到你的项目中。有很多方法可以实现你想要的 我想对你来说最简单的方法就是演奏一些MIDI音符 见本文:
NAudio库是开源的,如果你对额外的DLL不满意,你可以复制粘贴相关类到你的项目中。有很多方法可以实现你想要的 我想对你来说最简单的方法就是演奏一些MIDI音符 见本文:
NAudio library是开源的,如果你真的对额外的DLL不满意,你可以将相关类复制粘贴到你的项目中。我在其他网站上找到了一半的在线帮助,大约一半是我自己找到的。对于我所需要的,这里有一个近乎理想的解决方案: 1:创建一个MemoryStream, 2:将WAV文件的字节写入MemoryStream(永远不会保存到磁盘,但会像从WAV文件播放一样播放), 3:查找到MemoryStream的开头, 4:使用
System.Media.SoundPlayer(MemoryStream.Play()
播放MemoryStream。
就这样。其中最困难的部分是创建WAV格式的字节流。。。除非你只是从像我这样的人那里复制代码P
下面是一个.NET方法,它将在没有外部DLL或任何.NET外部内容的情况下播放声音:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
public static void PlayBeep(UInt16 frequency, int msDuration, UInt16 volume = 16383)
{
var mStrm = new MemoryStream();
BinaryWriter writer = new BinaryWriter(mStrm);
const double TAU = 2 * Math.PI;
int formatChunkSize = 16;
int headerSize = 8;
short formatType = 1;
short tracks = 1;
int samplesPerSecond = 44100;
short bitsPerSample = 16;
short frameSize = (short)(tracks * ((bitsPerSample + 7) / 8));
int bytesPerSecond = samplesPerSecond * frameSize;
int waveSize = 4;
int samples = (int)((decimal)samplesPerSecond * msDuration / 1000);
int dataChunkSize = samples * frameSize;
int fileSize = waveSize + headerSize + formatChunkSize + headerSize + dataChunkSize;
// var encoding = new System.Text.UTF8Encoding();
writer.Write(0x46464952); // = encoding.GetBytes("RIFF")
writer.Write(fileSize);
writer.Write(0x45564157); // = encoding.GetBytes("WAVE")
writer.Write(0x20746D66); // = encoding.GetBytes("fmt ")
writer.Write(formatChunkSize);
writer.Write(formatType);
writer.Write(tracks);
writer.Write(samplesPerSecond);
writer.Write(bytesPerSecond);
writer.Write(frameSize);
writer.Write(bitsPerSample);
writer.Write(0x61746164); // = encoding.GetBytes("data")
writer.Write(dataChunkSize);
{
double theta = frequency * TAU / (double)samplesPerSecond;
// 'volume' is UInt16 with range 0 thru Uint16.MaxValue ( = 65 535)
// we need 'amp' to have the range of 0 thru Int16.MaxValue ( = 32 767)
double amp = volume >> 2; // so we simply set amp = volume / 2
for (int step = 0; step < samples; step++)
{
short s = (short)(amp * Math.Sin(theta * (double)step));
writer.Write(s);
}
}
mStrm.Seek(0, SeekOrigin.Begin);
new System.Media.SoundPlayer(mStrm).Play();
writer.Close();
mStrm.Close();
} // public static void PlayBeep(UInt16 frequency, int msDuration, UInt16 volume = 16383)
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Windows.Forms;
公共静态无效播放蜂鸣音(UInt16频率,完整时间,UInt16音量=16383)
{
var mStrm=新内存流();
BinaryWriter=新的BinaryWriter(mStrm);
常数double TAU=2*Math.PI;
int formatChunkSize=16;
int headerSize=8;
短格式类型=1;
短轨道=1;
int samplesPerSecond=44100;
短位样本=16;
短帧大小=(短)(轨迹*((比特采样+7)/8));
int bytesPerSecond=samplesPerSecond*帧大小;
int waveSize=4;
int样本=(int)((十进制)样本数秒*msDuration/1000);
int dataChunkSize=samples*frameSize;
int fileSize=waveSize+headerSize+formatChunkSize+headerSize+dataChunkSize;
//var encoding=new System.Text.UTF8Encoding();
Write.Write(0x46464952);/=encoding.GetBytes(“RIFF”)
writer.Write(文件大小);
Write.Write(0x45564157);/=encoding.GetBytes(“WAVE”)
writer.Write(0x20746D66);/=encoding.GetBytes(“fmt”)
writer.Write(formatChunkSize);
writer.Write(格式化类型);
编剧。写作(曲目);
writer.Write(样本秒);
writer.Write(字节秒);
writer.Write(框架大小);
writer.Write(bitsPerSample);
Write.Write(0x61746164);/=encoding.GetBytes(“数据”)
writer.Write(数据块大小);
{
双θ=频率*TAU/(双)采样每秒;
//“音量”为UInt16,范围为0到UInt16.MaxValue(=65 535)
//我们需要“amp”的范围为0到Int16.MaxValue(=32767)
double amp=volume>>2;//因此我们只需设置amp=volume/2
对于(int step=0;step
快乐编码-Humilulo我在其他网站上找到了一半的在线帮助,大约一半是我自己找到的。对于我所需要的,这里有一个近乎理想的解决方案: 1:创建一个MemoryStream, 2:将WAV文件的字节写入MemoryStream(永远不会保存到磁盘,但会像从WAV文件播放一样播放), 3:查找到MemoryStream的开头, 4:使用
System.Media.SoundPlayer(MemoryStream.Play()
播放MemoryStream。
就这样。其中最困难的部分是创建WAV格式的字节流。。。除非你只是从像我这样的人那里复制代码P
下面是一个.NET方法,它将在没有外部DLL或任何.NET外部内容的情况下播放声音:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
public static void PlayBeep(UInt16 frequency, int msDuration, UInt16 volume = 16383)
{
var mStrm = new MemoryStream();
BinaryWriter writer = new BinaryWriter(mStrm);
const double TAU = 2 * Math.PI;
int formatChunkSize = 16;
int headerSize = 8;
short formatType = 1;
short tracks = 1;
int samplesPerSecond = 44100;
short bitsPerSample = 16;
short frameSize = (short)(tracks * ((bitsPerSample + 7) / 8));
int bytesPerSecond = samplesPerSecond * frameSize;
int waveSize = 4;
int samples = (int)((decimal)samplesPerSecond * msDuration / 1000);
int dataChunkSize = samples * frameSize;
int fileSize = waveSize + headerSize + formatChunkSize + headerSize + dataChunkSize;
// var encoding = new System.Text.UTF8Encoding();
writer.Write(0x46464952); // = encoding.GetBytes("RIFF")
writer.Write(fileSize);
writer.Write(0x45564157); // = encoding.GetBytes("WAVE")
writer.Write(0x20746D66); // = encoding.GetBytes("fmt ")
writer.Write(formatChunkSize);
writer.Write(formatType);
writer.Write(tracks);
writer.Write(samplesPerSecond);
writer.Write(bytesPerSecond);
writer.Write(frameSize);
writer.Write(bitsPerSample);
writer.Write(0x61746164); // = encoding.GetBytes("data")
writer.Write(dataChunkSize);
{
double theta = frequency * TAU / (double)samplesPerSecond;
// 'volume' is UInt16 with range 0 thru Uint16.MaxValue ( = 65 535)
// we need 'amp' to have the range of 0 thru Int16.MaxValue ( = 32 767)
double amp = volume >> 2; // so we simply set amp = volume / 2
for (int step = 0; step < samples; step++)
{
short s = (short)(amp * Math.Sin(theta * (double)step));
writer.Write(s);
}
}
mStrm.Seek(0, SeekOrigin.Begin);
new System.Media.SoundPlayer(mStrm).Play();
writer.Close();
mStrm.Close();
} // public static void PlayBeep(UInt16 frequency, int msDuration, UInt16 volume = 16383)
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Windows.Forms;
公共静态无效播放蜂鸣音(UInt16频率,完整时间,UInt16音量=16383)
{
var mStrm=新内存流();
BinaryWriter=新的BinaryWriter(mStrm);
常数double TAU=2*Math.PI;
int formatChunkSize=16;
int headerSize=8;
短格式类型=1;
短轨道=1;
int samplesPerSecond=44100;
短位样本=16;
短帧大小=(短)(轨迹*((比特采样+7)/8));
int bytesPerSecond=samplesPerSecond*帧大小;
int waveSize=4;
int样本=(int)((十进制)样本数秒*msDuration/1000);
int dataChunkSize=samples*frameSize;
我