在C#中创建一个.wav文件
发布时间:2020-12-15 06:34:30 所属栏目:百科 来源:网络整理
导读:作为学习C#的借口,我一直在尝试编写一个简单的项目:创建音频文件.要开始,我想确保我可以编写符合WAVE格式的文件.我已经在线研究了格式(例如 here),但是每当我尝试播放文件时,它将无法正确打开.这是我的代码有东西丢失还是不正确? uint numsamples = 44100;
作为学习C#的借口,我一直在尝试编写一个简单的项目:创建音频文件.要开始,我想确保我可以编写符合WAVE格式的文件.我已经在线研究了格式(例如
here),但是每当我尝试播放文件时,它将无法正确打开.这是我的代码有东西丢失还是不正确?
uint numsamples = 44100; ushort numchannels = 1; ushort samplelength = 1; // in bytes uint samplerate = 22050; FileStream f = new FileStream("a.wav",FileMode.Create); BinaryWriter wr = new BinaryWriter(f); wr.Write("RIFF"); wr.Write(36 + numsamples * numchannels * samplelength); wr.Write("WAVEfmt "); wr.Write(16); wr.Write((ushort)1); wr.Write(numchannels); wr.Write(samplerate); wr.Write(samplerate * samplelength * numchannels); wr.Write(samplelength * numchannels); wr.Write((ushort)(8 * samplelength)); wr.Write("data"); wr.Write(numsamples * samplelength); // for now,just a square wave Waveform a = new Waveform(440,50); double t = 0.0; for (int i = 0; i < numsamples; i++,t += 1.0 / samplerate) { wr.Write((byte)((a.sample(t) + (samplelength == 1 ? 128 : 0)) & 0xff)); } 解决方法
主要问题是:
你应该做什么 将字符串转换为字节,然后直接写入字节. byte[] data = System.Text.Encoding.ASCII.GetBytes("RIFF"); binaryWriter.Write(data); 或做一行: binaryWriter.Write(System.Text.Encoding.ASCII.GetBytes("RIFF")); 也可能有其他问题,像您正在撰写的整数可能不一样大小.你应该仔细检查. 至于endianess,你所提供的链接指出数据是小端,而BinaryWriter使用小端,所以这不应该是一个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |