Skip to content

Instantly share code, notes, and snippets.

@dannycabrera
Last active June 1, 2018 22:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dannycabrera/73191abc267eb03bc08a16bc3bc1d259 to your computer and use it in GitHub Desktop.
Save dannycabrera/73191abc267eb03bc08a16bc3bc1d259 to your computer and use it in GitHub Desktop.
Xamarin.Android Wave Header Method
using System;
using System.IO;
public void WriteWavHeader(string filePath, int sampleRate, short bitsPerSample, short channels)
{
using (var fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite))
{
using (BinaryWriter writer = new BinaryWriter(fs, System.Text.Encoding.UTF8))
{
writer.Seek(0, SeekOrigin.Begin);
// ChunkID
writer.Write('R');
writer.Write('I');
writer.Write('F');
writer.Write('F');
// ChunkSize
writer.Write(BitConverter.GetBytes(fs.Length + 36), 0, 4);
// Format
writer.Write('W');
writer.Write('A');
writer.Write('V');
writer.Write('E');
//SubChunk
writer.Write('f');
writer.Write('m');
writer.Write('t');
writer.Write(' ');
// SubChunk1Size - 16 for PCM
writer.Write(BitConverter.GetBytes(16), 0, 4);
// AudioFormat - PCM=1
writer.Write(BitConverter.GetBytes((short)1), 0, 2);
// Channels: Mono=1, Stereo=2
writer.Write(BitConverter.GetBytes(channels), 0, 2);
// SampleRate
writer.Write(sampleRate);
// ByteRate
var byteRate = sampleRate * 1 * bitsPerSample / 8;
writer.Write(BitConverter.GetBytes(byteRate), 0, 4);
// BlockAlign
var blockAlign = channels * bitsPerSample / 8;
writer.Write(BitConverter.GetBytes((short)blockAlign), 0, 2);
// BitsPerSample
writer.Write(BitConverter.GetBytes(bitsPerSample), 0, 2);
// SubChunk2ID
writer.Write('d');
writer.Write('a');
writer.Write('t');
writer.Write('a');
// Subchunk2Size
writer.Write(BitConverter.GetBytes(fs.Length), 0, 4);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment