/// <summary> /// Select Audio File Handler /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void selectAudioFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); WavFileInfo wavFileInfo = null; openFileDialog.Filter = "MP3 files (*.mp3)|*.mp3| WAV files (*.wav)|*.wav| All files (*.*)|*.*"; if (openFileDialog.ShowDialog() == true) { mediaPlayer.Open(new Uri(openFileDialog.FileName)); mediaPlayer.MediaOpened += mediaPlayer_MediaOpened; FileName = openFileDialog.FileName; string fileExtension = System.IO.Path.GetExtension(FileName); if (fileExtension == ".wav") { wavFileInfo = ReadWAVFile(FileName); } } }
/// <summary> /// Reads the wav file and gets fileInfo and data information /// </summary> /// <param name="fileName"></param> private WavFileInfo ReadWAVFile(string fileName) { WavFileInfo fileInfo = new WavFileInfo(); // Getting the data from the file path in binary format. FileStream wavFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader reader = new BinaryReader(wavFileStream); byte[] fileBytes = File.ReadAllBytes(fileName); // Reading the wav file fileInfo and extracting important information. // The Wav File Header size is 44 bytes. int chunkID = reader.ReadInt32(); int chunkSize = reader.ReadInt32(); int Format = reader.ReadInt32(); int formatID = reader.ReadInt32(); int formatSize = reader.ReadInt32(); int audioEncodingFormat = reader.ReadInt16(); int numChannels = reader.ReadInt16(); // Number of channels: 1-Mono, 2-Stereo int sampleRate = reader.ReadInt32(); // Sampling Rate - No of Samples/sec int byteRate = reader.ReadInt32(); int blockAlign = reader.ReadInt16(); int bitsPerSample = reader.ReadInt16(); // Bits per Sample if (formatSize == 18) { // Read extra values int formatExtraSize = reader.ReadInt16(); reader.ReadBytes(formatExtraSize); } int dataID = reader.ReadInt32(); int dataSize = reader.ReadInt32(); // Audio data size byte[] wavData = reader.ReadBytes(dataSize); // Contains actual data // Convert byte data to double reader.Read(); // Populate Wav fileInfo object properties and return it fileInfo.SampleRate = sampleRate; fileInfo.BitsPerSample = bitsPerSample; fileInfo.NumChannels = numChannels; fileInfo.WavData = wavData; return(fileInfo); }