⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavesound.cs

📁 visual c++编写关于声音分析的 傅立叶变换.超牛
💻 CS
字号:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace SteganoTape {
	public class WaveSound {

		private WaveFormat format;
		private short[] samples;

		public WaveFormat Format
		{
			get { return format; }
		}

		public int Count
		{
			get { return samples.Length; }
		}

		public short[] Samples
		{
			get { return samples; }
		}

		public short this[int indexer]{
			get { return samples[indexer]; }
			set { samples[indexer] = value; }
		}

		public WaveSound(WaveFormat format, short[] samples)
		{
			this.format = format;
			this.samples = samples;
		}

		public Stream CreateStream()
		{
			MemoryStream stream = new MemoryStream();
			BinaryWriter writer = new BinaryWriter(stream);

			writer.Write(System.Text.Encoding.ASCII.GetBytes("RIFF".ToCharArray()));

			writer.Write((Int32)(samples.Length + 36)); //File length minus first 8 bytes of RIFF description

			writer.Write(System.Text.Encoding.ASCII.GetBytes("WAVEfmt ".ToCharArray()));

			writer.Write((Int32)16); //length of following chunk: 16

			writer.Write(format.FormatTag);
			writer.Write(format.Channels);
			writer.Write(format.SamplesPerSec);
			writer.Write(format.AvgBytesPerSec);
			writer.Write(format.BlockAlign);
			writer.Write(format.BitsPerSample);

			writer.Write(System.Text.Encoding.ASCII.GetBytes("data".ToCharArray()));

			writer.Write(samples.Length);

			//byte[] b = new byte[samples.Length];
			//waveData.Read(b, 0, samples.Length);
			//writer.Write(b);
			for (int n = 0; n < samples.Length; n++) {
				if (format.BitsPerSample == 8) {
					writer.Write((byte)samples[n]);
				} else {
					writer.Write(samples[n]);
				}
			}

			writer.Seek(0, SeekOrigin.Begin);
			return stream;
		}

		public int SaveToFile(String fileName)
		{
			Stream stream = CreateStream();
			FileStream file = new FileStream(fileName, FileMode.Create);

			int fileLength = (int)stream.Length;

			byte[] buffer = new byte[fileLength];
			stream.Read(buffer, 0, fileLength);
			file.Write(buffer, 0, fileLength);

			file.Close();
			stream.Close();
			return fileLength;
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -