Better handling of not supported wave files in main window

This commit is contained in:
niksedk 2015-09-09 06:38:49 +02:00
parent 1ecd36fb2a
commit fc296789ef
2 changed files with 29 additions and 6 deletions

View File

@ -10,11 +10,12 @@ using System.Xml;
namespace Nikse.SubtitleEdit.Core
{
/// <summary>
/// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
/// http://soundfile.sapp.org/doc/WaveFormat
/// </summary>
public class WaveHeader
{
private const int ConstantHeaderSize = 20;
public const int AudioFormatPcm = 1;
public string ChunkId { get; private set; }
public uint ChunkSize { get; private set; }
@ -182,7 +183,7 @@ namespace Nikse.SubtitleEdit.Core
}
}
public class WavePeakGenerator
public class WavePeakGenerator : IDisposable
{
private Stream _stream;
private byte[] _data;
@ -222,7 +223,7 @@ namespace Nikse.SubtitleEdit.Core
/// <param name="fileName">Wave file name</param>
public WavePeakGenerator(string fileName)
{
Initialize(new FileStream(fileName, FileMode.Open, FileAccess.Read));
Initialize(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
}
/// <summary>
@ -234,6 +235,17 @@ namespace Nikse.SubtitleEdit.Core
Initialize(stream);
}
/// <summary>
/// Returns true if the current wave file can be processed. Compressed wave files or 32-bit files are not supported
/// </summary>
public bool IsSupported
{
get
{
return Header.AudioFormat == WaveHeader.AudioFormatPcm && Header.Format == "WAVE" && Header.BytesPerSample < 4;
}
}
/// <summary>
/// Generate peaks (samples with some interval) for an uncompressed wave file
/// </summary>

View File

@ -14820,6 +14820,17 @@ namespace Nikse.SubtitleEdit.Forms
return name;
}
private bool IsFileValidForVisualizer(string fileName)
{
if (!_videoFileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
return false;
using (var wpg = new WavePeakGenerator(_videoFileName))
{
return wpg.IsSupported;
}
}
private void AudioWaveform_Click(object sender, EventArgs e)
{
if (audioVisualizer.WavePeaks == null)
@ -14836,7 +14847,7 @@ namespace Nikse.SubtitleEdit.Forms
var peakWaveFileName = GetPeakWaveFileName(_videoFileName);
var spectrogramFolder = GetSpectrogramFolder(_videoFileName);
if (_videoFileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
if (IsFileValidForVisualizer(_videoFileName))
{
addWaveform.InitializeViaWaveFile(_videoFileName, spectrogramFolder);
}
@ -15186,9 +15197,9 @@ namespace Nikse.SubtitleEdit.Forms
string fileName = files[0];
string ext = Path.GetExtension(fileName).ToLowerInvariant();
if (ext != ".wav")
if (ext != ".wav" || !IsFileValidForVisualizer(fileName))
{
if (audioVisualizer.WavePeaks == null && (Utilities.GetMovieFileExtensions().Contains(ext) || ext == ".mp3" || ext == ".mka" || ext == ".m4a" || ext == ".wma"))
if (audioVisualizer.WavePeaks == null && (Utilities.GetMovieFileExtensions().Contains(ext) || ext == ".wav" || ext == ".mp3" || ext == ".mka" || ext == ".m4a" || ext == ".wma"))
{
_videoFileName = fileName;
AudioWaveform_Click(null, null);