/// <summary> /// Initializes a new instance of AudioContent. /// </summary> /// <param name="audioFileName">Name of the audio source file to be processed.</param> /// <param name="audioFileType">Type of the processed audio: WAV, MP3 or WMA.</param> /// <remarks>Constructs the object from the specified source file, in the format specified.</remarks> public AudioContent(string audioFileName, AudioFileType audioFileType) { _fileName = audioFileName; try { // Get the full path to the file. audioFileName = Path.GetFullPath(audioFileName); // Use probe to get the details of the file. DefaultAudioProfile.ProbeFormat(audioFileName, out _fileType, out _format, out _duration, out _loopStart, out _loopLength); // Looks like XNA only cares about type mismatch when // the type is WAV... else it is ok. if ((audioFileType == AudioFileType.Wav || _fileType == AudioFileType.Wav) && audioFileType != _fileType) { throw new ArgumentException("Incorrect file type!", "audioFileType"); } // Only provide the data for WAV files. if (audioFileType == AudioFileType.Wav) { byte[] rawData; // Must be opened in read mode otherwise it fails to open // read-only files (found in some source control systems) using (var fs = new FileStream(_fileName, FileMode.Open, FileAccess.Read)) { rawData = new byte[fs.Length]; fs.Read(rawData, 0, rawData.Length); } AudioFormat riffAudioFormat; var stripped = DefaultAudioProfile.StripRiffWaveHeader(rawData, out riffAudioFormat); if (riffAudioFormat != null) { if (_format.BlockAlign != riffAudioFormat.BlockAlign) { throw new InvalidOperationException("Calcualted block align does not match RIFF " + _format.BlockAlign + " : " + riffAudioFormat.BlockAlign); } if (_format.ChannelCount != riffAudioFormat.ChannelCount || _format.Format != riffAudioFormat.Format || _format.SampleRate != riffAudioFormat.SampleRate || _format.AverageBytesPerSecond != riffAudioFormat.AverageBytesPerSecond) { throw new InvalidOperationException("Probed audio format does not match RIFF"); } } _data = Array.AsReadOnly(stripped); } } catch (Exception ex) { var message = string.Format("Failed to open file {0}. Ensure the file is a valid audio file and is not DRM protected.", Path.GetFileNameWithoutExtension(audioFileName)); throw new InvalidContentException(message, ex); } }
public void ConvertFormat(ConversionFormat formatType, ConversionQuality quality, string saveToFile) { // Call the legacy conversion code. DefaultAudioProfile.ConvertToFormat(this, formatType, quality, saveToFile); }