mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 22:42:38 +01:00
Better handling of not supported wave files in main window
This commit is contained in:
parent
1ecd36fb2a
commit
fc296789ef
@ -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>
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user