public FlacFile(Stream stream, FlacPreScanMethodMode? scanFlag, Action<FlacPreScanFinishedEventArgs> onscanFinished) { if (stream == null) throw new ArgumentNullException(); if (!stream.CanRead) throw new ArgumentException("Stream is not readable.", "stream"); _stream = stream; //skip ID3v2 Tags.ID3.ID3v2.SkipTag(stream); int read = 0; //read fLaC sync byte[] beginSync = new byte[4]; read = stream.Read(beginSync, 0, beginSync.Length); if (read < beginSync.Length) throw new EndOfStreamException("Can not read \"fLaC\" sync."); if (beginSync[0] == 0x66 && beginSync[1] == 0x4C && beginSync[2] == 0x61 && beginSync[3] == 0x43) { //read metadata var metadata = FlacMetadata.AllDataFromStream(stream); Metadata = metadata; if (metadata == null || metadata.Count <= 0) { throw new FlacException("No Metadata found.", FlacLayer.Metadata); } FlacMetadataStreamInfo streamInfo = metadata.Where(x => x.MetaDataType == FlacMetaDataType.StreamInfo).First() as FlacMetadataStreamInfo; if (streamInfo == null) new FlacException("No StreamInfo-Metadata found.", FlacLayer.Metadata); _streamInfo = streamInfo; _waveFormat = new WaveFormat(streamInfo.SampleRate, (short)streamInfo.BitsPerSample, (short)streamInfo.Channels, AudioEncoding.Pcm); Debug.WriteLine("Flac StreamInfo found -> WaveFormat: " + _waveFormat.ToString()); Debug.WriteLine("Flac-File-Metadata read."); } else { throw new FlacException("Invalid Flac-File. \"fLaC\" Sync not found.", FlacLayer.Top); } //prescan stream if (scanFlag != null) { FlacPreScan scan = new FlacPreScan(stream); scan.ScanFinished += (s, e) => { if (onscanFinished != null) onscanFinished(e); }; scan.ScanStream(_streamInfo, (FlacPreScanMethodMode)scanFlag); _scan = scan; } }
public void ScanStream(FlacMetadataStreamInfo streamInfo, FlacPreScanMethodMode mode) { long saveOffset = _stream.Position; StartScan(streamInfo, mode); _stream.Position = saveOffset; long totalLength = 0, totalsamples = 0; foreach (var frame in Frames) { totalLength += frame.Header.BlockSize * frame.Header.BitsPerSample * frame.Header.Channels; totalsamples += frame.Header.BlockSize; } TotalLength = totalLength; TotalSamples = totalsamples; }
public void ScanStream(FlacMetadataStreamInfo streamInfo, FlacPreScanMethodMode method) { long saveOffset = _stream.Position; StartScan(streamInfo, method); _stream.Position = saveOffset; long totalLength = 0, totalsamples = 0; foreach (var frame in Frames) { totalLength += frame.Header.BlockSize * frame.Header.BitsPerSample * frame.Header.Channels; totalsamples += frame.Header.BlockSize; } TotalLength = totalLength; TotalSamples = totalsamples; }
private void StartScan(FlacMetadataStreamInfo streamInfo, FlacPreScanMethodMode method) { if (_isRunning) throw new Exception("Scan is already running."); _isRunning = true; if (method == FlacPreScanMethodMode.Async) { ThreadPool.QueueUserWorkItem(o => { Frames = RunScan(streamInfo); _isRunning = false; }); } else { Frames = RunScan(streamInfo); _isRunning = false; } }
protected void StartScan(FlacMetadataStreamInfo streamInfo, FlacPreScanMethodMode method) { if (_isRunning) { throw new Exception("Scan is already running."); } _isRunning = true; if (method == FlacPreScanMethodMode.Async) { new Thread((o) => { Frames = RunScan(streamInfo); _isRunning = false; }).Start(); } else { Frames = ScanThisShit(streamInfo); _isRunning = false; } }
private void StartScan(FlacMetadataStreamInfo streamInfo, FlacPreScanMethodMode method) { if (_isRunning) { throw new Exception("Scan is already running."); } _isRunning = true; if (method == FlacPreScanMethodMode.Async) { ThreadPool.QueueUserWorkItem(o => { Frames = RunScan(streamInfo); _isRunning = false; }); } else { Frames = RunScan(streamInfo); _isRunning = false; } }
/// <summary> /// Initializes a new instance of the <see cref="FlacReader" /> class. /// </summary> /// <param name="stream">Stream which contains flac data which should be decoded.</param> /// <param name="scanFlag">Scan mode which defines how to scan the flac data for frames.</param> public FlacReader(Stream stream, FlacPreScanMethodMode scanFlag) : this(stream, scanFlag, null) { }
/// <summary> /// Initializes a new instance of the <see cref="FlacReader" /> class. /// </summary> /// <param name="stream">Stream which contains flac data which should be decoded.</param> /// <param name="scanFlag">Scan mode which defines how to scan the flac data for frames.</param> /// <param name="onscanFinished"> /// Callback which gets called when the pre scan processes finished. Should be used if the /// <paramref name="scanFlag" /> argument is set the <see cref="FlacPreScanMethodMode.Async" />. /// </param> public FlacReader(Stream stream, FlacPreScanMethodMode scanFlag, Action <FlacPreScanFinishedEventArgs> onscanFinished) { if (stream == null) { throw new ArgumentNullException(); } if (!stream.CanRead) { throw new ArgumentException("Stream is not readable.", "stream"); } _stream = stream; //skip ID3v2 NAudio.Flac.ID3v2.SkipTag(stream); //read fLaC sync var beginSync = new byte[4]; int read = stream.Read(beginSync, 0, beginSync.Length); if (read < beginSync.Length) { throw new EndOfStreamException("Can not read \"fLaC\" sync."); } if (beginSync[0] == 0x66 && beginSync[1] == 0x4C && //Check for 'fLaC' signature beginSync[2] == 0x61 && beginSync[3] == 0x43) { //read metadata List <FlacMetadata> metadata = FlacMetadata.ReadAllMetadataFromStream(stream); Metadata = metadata; if (metadata == null || metadata.Count <= 0) { throw new FlacException("No Metadata found.", FlacLayer.Metadata); } var streamInfo = metadata.First(x => x.MetaDataType == FlacMetaDataType.StreamInfo) as FlacMetadataStreamInfo; if (streamInfo == null) { throw new FlacException("No StreamInfo-Metadata found.", FlacLayer.Metadata); } _streamInfo = streamInfo; _waveFormat = new WaveFormat(streamInfo.SampleRate, (short)streamInfo.BitsPerSample, (short)streamInfo.Channels); Debug.WriteLine("Flac StreamInfo found -> WaveFormat: " + _waveFormat); Debug.WriteLine("Flac-File-Metadata read."); } else { throw new FlacException("Invalid Flac-File. \"fLaC\" Sync not found.", FlacLayer.Top); } //prescan stream if (scanFlag != FlacPreScanMethodMode.None) { var scan = new FlacPreScan(stream); scan.ScanFinished += (s, e) => { if (onscanFinished != null) { onscanFinished(e); } }; scan.ScanStream(_streamInfo, scanFlag); _scan = scan; } }
protected void StartScan(FlacMetadataStreamInfo streamInfo, FlacPreScanMethodMode method) { if (_isRunning) throw new Exception("Scan is already running."); _isRunning = true; if (method == FlacPreScanMethodMode.Async) { new Thread((o) => { Frames = RunScan(streamInfo); _isRunning = false; }).Start(); } else { Frames = ScanThisShit(streamInfo); _isRunning = false; } }
public FlacFile(Stream stream, FlacPreScanMethodMode? scanFlag) : this(stream, scanFlag, null) { }
/// <summary> /// Initializes a new instance of the <see cref="FlacReader" /> class. /// </summary> /// <param name="stream">Stream which contains flac data which should be decoded.</param> /// <param name="scanFlag">Scan mode which defines how to scan the flac data for frames.</param> /// <param name="onscanFinished"> /// Callback which gets called when the pre scan processes finished. Should be used if the /// <paramref name="scanFlag" /> argument is set the <see cref="FlacPreScanMethodMode.Async" />. /// </param> public FlacReader(Stream stream, FlacPreScanMethodMode scanFlag, Action<FlacPreScanFinishedEventArgs> onscanFinished) { if (stream == null) throw new ArgumentNullException(); if (!stream.CanRead) throw new ArgumentException("Stream is not readable.", "stream"); _stream = stream; //skip ID3v2 NAudio.Flac.ID3v2.SkipTag(stream); //read fLaC sync var beginSync = new byte[4]; int read = stream.Read(beginSync, 0, beginSync.Length); if (read < beginSync.Length) throw new EndOfStreamException("Can not read \"fLaC\" sync."); if (beginSync[0] == 0x66 && beginSync[1] == 0x4C && //Check for 'fLaC' signature beginSync[2] == 0x61 && beginSync[3] == 0x43) { //read metadata List<FlacMetadata> metadata = FlacMetadata.ReadAllMetadataFromStream(stream); Metadata = metadata; if (metadata == null || metadata.Count <= 0) throw new FlacException("No Metadata found.", FlacLayer.Metadata); var streamInfo = metadata.First(x => x.MetaDataType == FlacMetaDataType.StreamInfo) as FlacMetadataStreamInfo; if (streamInfo == null) throw new FlacException("No StreamInfo-Metadata found.", FlacLayer.Metadata); _streamInfo = streamInfo; _waveFormat = new WaveFormat(streamInfo.SampleRate, (short) streamInfo.BitsPerSample, (short) streamInfo.Channels); Debug.WriteLine("Flac StreamInfo found -> WaveFormat: " + _waveFormat); Debug.WriteLine("Flac-File-Metadata read."); } else throw new FlacException("Invalid Flac-File. \"fLaC\" Sync not found.", FlacLayer.Top); //prescan stream if (scanFlag != FlacPreScanMethodMode.None) { var scan = new FlacPreScan(stream); scan.ScanFinished += (s, e) => { if (onscanFinished != null) onscanFinished(e); }; scan.ScanStream(_streamInfo, scanFlag); _scan = scan; } }