Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
SoundData.cs
浏览该文件的文档.
1namespace Engine.Media {
2 public class SoundData {
3 public int ChannelsCount { get; set; }
4
5 public int SamplingFrequency { get; set; }
6
7 public short[] Data { get; set; }
8
9 public SoundData(int channelsCount, int samplingFrequency, int bytesCount) {
10 if (channelsCount < 1
11 || channelsCount > 2) {
12 throw new ArgumentOutOfRangeException(nameof(channelsCount));
13 }
14 if (samplingFrequency < 8000
15 || samplingFrequency > 192000) {
16 throw new ArgumentOutOfRangeException(nameof(samplingFrequency));
17 }
18 if (bytesCount < 0
19 || bytesCount % (2 * channelsCount) != 0) {
20 throw new ArgumentOutOfRangeException(nameof(bytesCount));
21 }
22 ChannelsCount = channelsCount;
23 SamplingFrequency = samplingFrequency;
24 Data = new short[bytesCount / 2];
25 }
26
27 public static SoundFileFormat DetermineFileFormat(string extension) {
28 if (extension.Equals(".flac", StringComparison.OrdinalIgnoreCase)) {
29 return SoundFileFormat.Flac;
30 }
31 if (extension.Equals(".wav", StringComparison.OrdinalIgnoreCase)) {
32 return SoundFileFormat.Wav;
33 }
34 return extension.Equals(".ogg", StringComparison.OrdinalIgnoreCase) ? SoundFileFormat.Ogg :
35 extension.Equals(".mp3", StringComparison.OrdinalIgnoreCase) ? SoundFileFormat.Mp3 :
36 throw new InvalidOperationException("Unsupported sound file format.");
37 }
38
40 if (Flac.IsFlacStream(stream)) {
41 return SoundFileFormat.Flac;
42 }
43 if (Wav.IsWavStream(stream)) {
44 return SoundFileFormat.Wav;
45 }
46 return Ogg.IsOggStream(stream) ? SoundFileFormat.Ogg :
47 Mp3.IsFlacStream(stream) ? SoundFileFormat.Mp3 : throw new InvalidOperationException("Unsupported sound file format.");
48 }
49
50 public static StreamingSource Stream(Stream stream, SoundFileFormat format) {
51 switch (format) {
52 case SoundFileFormat.Flac: return Flac.Stream(stream);
53 case SoundFileFormat.Wav: return Wav.Stream(stream);
54 case SoundFileFormat.Ogg: return Ogg.Stream(stream);
55 case SoundFileFormat.Mp3: return Mp3.Stream(stream);
56 default: throw new InvalidOperationException("Unsupported sound file format.");
57 }
58 }
59
60 public static StreamingSource Stream(string fileName, SoundFileFormat format) {
61 using (Stream stream = Storage.OpenFile(fileName, OpenFileMode.Read)) {
62 return Stream(stream, format);
63 }
64 }
65
66 public static StreamingSource Stream(Stream stream) {
67 SoundFileFormat format = DetermineFileFormat(stream);
68 stream.Position = 0L;
69 return Stream(stream, format);
70 }
71
72 public static StreamingSource Stream(string fileName) {
73 using (Stream stream = Storage.OpenFile(fileName, OpenFileMode.Read)) {
74 return Stream(stream);
75 }
76 }
77
78 public static SoundData Load(Stream stream, SoundFileFormat format) {
79 switch (format) {
80 case SoundFileFormat.Wav: return Wav.Load(stream);
81 case SoundFileFormat.Ogg: return Ogg.Load(stream);
82 case SoundFileFormat.Flac: return Flac.Load(stream);
83 case SoundFileFormat.Mp3: return Mp3.Load(stream);
84 default: throw new InvalidOperationException("Unsupported sound file format.");
85 }
86 }
87
88 public static SoundData Load(string fileName, SoundFileFormat format) {
89 using (Stream stream = Storage.OpenFile(fileName, OpenFileMode.Read)) {
90 return Load(stream, format);
91 }
92 }
93
94 public static SoundData Load(Stream stream) {
95 PeekStream peekStream = new(stream, 64);
97 return Load(peekStream, format);
98 }
99
100 public static SoundData Load(string fileName) {
101 using (Stream stream = Storage.OpenFile(fileName, OpenFileMode.Read)) {
102 return Load(stream);
103 }
104 }
105
106 public static void Save(SoundData soundData, Stream stream, SoundFileFormat format) {
107 if (format == SoundFileFormat.Wav) {
108 Wav.Save(soundData, stream);
109 return;
110 }
111 throw new InvalidOperationException("Unsupported sound file format to save.");
112 }
113
114 public static void Save(SoundData soundData, string fileName, SoundFileFormat format) {
115 using (Stream stream = Storage.OpenFile(fileName, OpenFileMode.Create)) {
116 Save(soundData, stream, format);
117 }
118 }
119
120 public static void StereoToMono(SoundData soundData) {
121 if (soundData.ChannelsCount != 2) {
122 throw new InvalidOperationException("SoundData is not stereo.");
123 }
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);
127 }
128 soundData.ChannelsCount = 1;
129 soundData.Data = array;
130 }
131 }
132}
static StreamingSource Stream(Stream stream)
static bool IsFlacStream(Stream stream)
static SoundData Load(Stream stream)
static StreamingSource Stream(Stream stream)
定义 Mp3.cs:92
static SoundData Load(Stream stream)
定义 Mp3.cs:97
static bool IsFlacStream(Stream stream)
定义 Mp3.cs:83
static SoundData Load(Stream stream)
定义 Ogg.cs:98
static bool IsOggStream(Stream stream)
定义 Ogg.cs:83
static StreamingSource Stream(Stream stream, bool leaveOpen=false)
定义 Ogg.cs:93
MemoryStream GetInitialBytesStream()
static SoundData Load(string fileName, SoundFileFormat format)
static SoundData Load(Stream stream, SoundFileFormat format)
static SoundFileFormat DetermineFileFormat(string extension)
static StreamingSource Stream(string fileName)
static void StereoToMono(SoundData soundData)
static StreamingSource Stream(Stream stream)
static void Save(SoundData soundData, Stream stream, SoundFileFormat format)
static StreamingSource Stream(string fileName, SoundFileFormat format)
static SoundData Load(Stream stream)
static StreamingSource Stream(Stream stream, SoundFileFormat format)
static SoundData Load(string fileName)
SoundData(int channelsCount, int samplingFrequency, int bytesCount)
static SoundFileFormat DetermineFileFormat(Stream stream)
static void Save(SoundData soundData, string fileName, SoundFileFormat format)
static bool IsWavStream(Stream stream)
定义 Wav.cs:125
static void Save(SoundData soundData, Stream stream)
定义 Wav.cs:164
static StreamingSource Stream(Stream stream)
定义 Wav.cs:150
static SoundData Load(Stream stream)
定义 Wav.cs:152
static Stream OpenFile(string path, OpenFileMode openFileMode)