7 public short[]
Data {
get;
set; }
9 public SoundData(
int channelsCount,
int samplingFrequency,
int bytesCount) {
11 || channelsCount > 2) {
12 throw new ArgumentOutOfRangeException(nameof(channelsCount));
14 if (samplingFrequency < 8000
15 || samplingFrequency > 192000) {
16 throw new ArgumentOutOfRangeException(nameof(samplingFrequency));
19 || bytesCount % (2 * channelsCount) != 0) {
20 throw new ArgumentOutOfRangeException(nameof(bytesCount));
24 Data =
new short[bytesCount / 2];
28 if (extension.Equals(
".flac", StringComparison.OrdinalIgnoreCase)) {
31 if (extension.Equals(
".wav", StringComparison.OrdinalIgnoreCase)) {
36 throw new InvalidOperationException(
"Unsupported sound file format.");
56 default:
throw new InvalidOperationException(
"Unsupported sound file format.");
62 return Stream(stream, format);
69 return Stream(stream, format);
84 default:
throw new InvalidOperationException(
"Unsupported sound file format.");
90 return Load(stream, format);
97 return Load(peekStream, format);
111 throw new InvalidOperationException(
"Unsupported sound file format to save.");
116 Save(soundData, stream, format);
122 throw new InvalidOperationException(
"SoundData is not stereo.");
124 short[] array =
new short[soundData.Data.Length / 2];
125 for (
int i = 0; i < array.Length; i++) {
126 array[i] = (short)((soundData.
Data[2 * i] + soundData.
Data[2 * i + 1]) / 2);
128 soundData.ChannelsCount = 1;
129 soundData.Data = array;
static Stream OpenFile(string path, OpenFileMode openFileMode)