diff --git a/docs/markdowns/toc.yml b/docs/markdowns/toc.yml index 5191b2f..b3195f3 100644 --- a/docs/markdowns/toc.yml +++ b/docs/markdowns/toc.yml @@ -14,6 +14,8 @@ href: start/gen/channel-base-api.md - name: トラックベースAPI href: start/gen/track-base-api.md + - name: バッファリング可能な音声生成 + href: start/gen/track-base-api-partial.md - name: WAV出力 href: start/wav.md - name: Ver 3.0.0への移行 @@ -22,4 +24,5 @@ items: - name: SMSCフォーマットとは? href: smsc/what-is-the-smsc.md - - name: SMSCシリアライズ・デシリアライズ \ No newline at end of file + - name: SMSCシリアライズ・デシリアライズ + href: smsc/serializer.md \ No newline at end of file diff --git a/src/SoundMaker/FormatBuilder.cs b/src/SoundMaker/FormatBuilder.cs index 5d38374..fc78e65 100644 --- a/src/SoundMaker/FormatBuilder.cs +++ b/src/SoundMaker/FormatBuilder.cs @@ -31,7 +31,8 @@ internal BitDepthBuilder(FormatBuilder builder) }; /// - /// sets a bit depth(BitRateType) to format. 量子化ビット数を指定する。 + /// Sets a bit depth(BitRateType) to format.
+ /// 量子化ビット数を指定する。 ///
/// value /// builder @@ -63,7 +64,8 @@ internal SamplingFrequencyBuilder(FormatBuilder builder) }; /// - /// sets a sampling frequency to format. サンプリング周波数を指定する。 + /// Sets a sampling frequency to format.
+ /// サンプリング周波数を指定する。 ///
/// sampling frequency /// builder @@ -95,9 +97,10 @@ internal ChannelTypeBuilder(FormatBuilder builder) }; /// - /// sets a count fo channels to format. + /// Sets a count fo channels to format.
+ /// チャンネル数を設定する(1: モノラル、2: ステレオ) ///
- /// count of channels + /// count of channels
チャンネル数 /// /// The count value must be either 1 or 2. public FormatBuilder WithChannelCount(int count) @@ -112,7 +115,8 @@ public FormatBuilder WithChannelCount(int count) } /// - /// create an instance of builder. ビルダのインスタンスを作成する。 + /// Create an instance of builder.
+ /// ビルダのインスタンスを作成する。 ///
/// builder public static SamplingFrequencyBuilder Create() @@ -122,7 +126,8 @@ public static SamplingFrequencyBuilder Create() } /// - /// build to FormatChunk. FormatChunkにビルドする。 + /// Build to FormatChunk.
+ /// FormatChunkにビルドする。 ///
/// FormatChunk public FormatChunk ToFormatChunk() @@ -131,7 +136,8 @@ public FormatChunk ToFormatChunk() } /// - /// build to SoundFormat. SoundFormatにビルドする。 + /// Build to SoundFormat.
+ /// SoundFormatにビルドする。 ///
/// SoundFormat public SoundFormat ToSoundFormat() diff --git a/src/SoundMaker/ScoreData/SMSC/SMSCFormat.cs b/src/SoundMaker/ScoreData/SMSC/SMSCFormat.cs index 7c3ad9a..de848c7 100644 --- a/src/SoundMaker/ScoreData/SMSC/SMSCFormat.cs +++ b/src/SoundMaker/ScoreData/SMSC/SMSCFormat.cs @@ -10,8 +10,8 @@ public static class SMSCFormat /// Reads SMSC data.
/// SMSCデータを読み込む。 /// - /// SMSC data. SMSCデータ - /// The read results. 読み取り結果 + /// SMSC data.
SMSCデータ + /// The read results.
読み取り結果
public static SMSCReadResult Read(string data) { var lexer = new Lexer(data); @@ -23,8 +23,8 @@ public static SMSCReadResult Read(string data) /// Outputs SMSC data.
/// SMSCデータを出力する。 /// - /// Sound components to write. 書き込むサウンドコンポーネント - /// SMSC data. SMSCデータ + /// Sound components to write.
書き込むサウンドコンポーネント + /// SMSC data.
SMSCデータ
public static string Serialize(IEnumerable components) { return SMSCSerializer.Serialize(components); diff --git a/src/SoundMaker/Sounds/ChannelType.cs b/src/SoundMaker/Sounds/ChannelType.cs index b79c2fb..ac89e90 100644 --- a/src/SoundMaker/Sounds/ChannelType.cs +++ b/src/SoundMaker/Sounds/ChannelType.cs @@ -5,11 +5,11 @@ public enum ChannelType { /// - /// monaural(1ch) モノラル1ch + /// monaural(1ch)
モノラル1ch ///
Monaural, /// - /// stereo(2ch) ステレオ2ch + /// stereo(2ch)
ステレオ2ch ///
Stereo } \ No newline at end of file diff --git a/src/SoundMaker/Sounds/IWave.cs b/src/SoundMaker/Sounds/IWave.cs index 79e54b1..ade31d5 100644 --- a/src/SoundMaker/Sounds/IWave.cs +++ b/src/SoundMaker/Sounds/IWave.cs @@ -1,20 +1,21 @@ namespace SoundMaker.Sounds; + /// -/// interface for wave. 波を表すインターフェイス +/// Interface for wave. 波を表すインターフェイス /// public interface IWave { /// - /// get length of bytes of wave data. 波形データのバイト列の長さを取得するメソッド。 + /// Get the length of bytes of wave data.
波形データのバイト列の長さを取得するメソッド。 ///
- /// quantization bit rate. 量子化ビット数 - /// length of bytes of wave data. + /// Quantization bit rate.
量子化ビット数 + /// Length of bytes of wave data. int GetLengthOfBytes(BitRateType bitRate); /// - /// get the array of bytes of wave data. 波形データのバイト列を取得するメソッド。 + /// Get the array of bytes of wave data.
波形データのバイト列を取得するメソッド。 ///
- /// quantization bit rate. 量子化ビット数 - /// bytes of wave data. 波形データのバイト列 : byte[] + /// Quantization bit rate.
量子化ビット数 + /// Array of bytes of wave data.
波形データのバイト列 : byte[]
byte[] GetBytes(BitRateType bitRate); } diff --git a/src/SoundMaker/Sounds/MixerBase.cs b/src/SoundMaker/Sounds/MixerBase.cs index 7a2f8b5..1006d3b 100644 --- a/src/SoundMaker/Sounds/MixerBase.cs +++ b/src/SoundMaker/Sounds/MixerBase.cs @@ -1,34 +1,27 @@ using SoundMaker.Sounds.SoundChannels; namespace SoundMaker.Sounds; + /// -/// provides a base class for a mixer to inherit from. ミキサーの抽象基底クラス +/// Provides a base class for a mixer to inherit from.
ミキサーの抽象基底クラス ///
-public abstract class MixerBase +/// List of sound channels (read-only).
音声チャンネルのリスト(読み取り専用) +public abstract class MixerBase(IReadOnlyList channels) { /// - /// constructor コンストラクタ - /// - /// 音声チャンネルのリスト(読み取り専用) - public MixerBase(IReadOnlyList channels) - { - Channels = channels; - } - - /// - /// チャンネルのリスト + /// List of channels.
チャンネルのリスト ///
- protected IReadOnlyList Channels { get; } + protected IReadOnlyList Channels { get; } = channels; /// - /// 音のフォーマット + /// Sound format.
音のフォーマット ///
protected SoundFormat Format { get; } /// - /// 各チャンネルの波形データで一番長い配列の長さを返すメソッド。 + /// Method to return the length of the longest array in each channel's waveform data.
各チャンネルの波形データで一番長い配列の長さを返すメソッド。 ///
- /// 最長の配列の長さ : int + /// Length of the longest array.
最長の配列の長さ : int
protected int GetMaxWaveLength() { var max = 0; diff --git a/src/SoundMaker/Sounds/MonauralMixer.cs b/src/SoundMaker/Sounds/MonauralMixer.cs index 528c9a2..a5f1081 100644 --- a/src/SoundMaker/Sounds/MonauralMixer.cs +++ b/src/SoundMaker/Sounds/MonauralMixer.cs @@ -1,25 +1,19 @@ using SoundMaker.Sounds.SoundChannels; namespace SoundMaker.Sounds; + /// -/// mix waves to monaural wave. モノラル音声をミックスするクラス。 +/// Mix waves to monaural wave.
モノラル音声をミックスするクラス。 ///
-public class MonauralMixer : MixerBase +/// Channels.
チャンネルのリスト(読み取り専用) +public class MonauralMixer(IReadOnlyList channels) : MixerBase(channels) { - /// - /// constructor. コンストラクタ - /// - /// channels. チャンネルのリスト(読み取り専用) - public MonauralMixer(IReadOnlyList channels) : base(channels) - { - } - private object LockObject { get; } = new object(); /// - /// mix ミックスする。 + /// Mix.
ミックスする。 ///
- /// the mixed wave of monaural. モノラルの波形データ : MonauralWave + /// The mixed wave of monaural.
モノラルの波形データ : MonauralWave
public MonauralWave Mix() { var result = Enumerable.Repeat((short)0, GetMaxWaveLength()).ToArray(); diff --git a/src/SoundMaker/Sounds/MonauralWave.cs b/src/SoundMaker/Sounds/MonauralWave.cs index 06b1b51..73f5b75 100644 --- a/src/SoundMaker/Sounds/MonauralWave.cs +++ b/src/SoundMaker/Sounds/MonauralWave.cs @@ -1,13 +1,14 @@ namespace SoundMaker.Sounds; + /// -/// monaural wave. モノラル波形データを表すクラス。 +/// Monaural wave.
モノラル波形データを表すクラス。 ///
public class MonauralWave : IWave { /// - /// constructor. コンストラクタ + /// Constructor.
コンストラクタ ///
- /// the collection of wave data. 波形データを表す配列 + /// The collection of wave data.
波形データを表す配列 public MonauralWave(IReadOnlyCollection wave) { var argumentIntegers = wave.ToArray(); @@ -24,9 +25,9 @@ public MonauralWave(IReadOnlyCollection wave) public int Volume { get; private set; } = 100; /// - /// change volume this. 音量を変更するメソッド + /// Change volume.
音量を変更するメソッド ///
- /// 音量(0 ~ 100) + /// Volume (0 ~ 100).
音量(0 ~ 100) public void ChangeVolume(int volume) { volume = volume < 0 ? 0 : volume; @@ -39,9 +40,9 @@ public void ChangeVolume(int volume) } /// - /// append deferent MonauralWave. 別の波形データを末尾に繋げるメソッド。 + /// Append different MonauralWave.
別の波形データを末尾に繋げるメソッド。 ///
- /// monaural wave.モノラルの波形データ + /// Monaural wave.
モノラルの波形データ public void Append(MonauralWave wave) { Wave = Wave.Concat(wave.GetWave()).ToArray(); @@ -74,9 +75,9 @@ public byte[] GetBytes(BitRateType bitRate) } /// - /// get the wave. 音の波形データを取得するメソッド。 + /// Get the wave.
音の波形データを取得するメソッド。 ///
- /// the wave. 波形データ : short[] + /// The wave.
波形データ : short[]
public short[] GetWave() { var result = new short[Wave.Length]; diff --git a/src/SoundMaker/Sounds/SamplingFrequencyType.cs b/src/SoundMaker/Sounds/SamplingFrequencyType.cs index 2e816f6..8791315 100644 --- a/src/SoundMaker/Sounds/SamplingFrequencyType.cs +++ b/src/SoundMaker/Sounds/SamplingFrequencyType.cs @@ -1,6 +1,7 @@ namespace SoundMaker.Sounds; /// -/// the type which is expressed sampling frequency of the sound. サンプリング周波数の種類を表す列挙型 +/// The type which is expressed sampling frequency of the sound.
+/// サンプリング周波数の種類を表す列挙型 ///
public enum SamplingFrequencyType { diff --git a/src/SoundMaker/Sounds/Score/BasicSoundComponentBase.cs b/src/SoundMaker/Sounds/Score/BasicSoundComponentBase.cs index 413db69..8bb7380 100644 --- a/src/SoundMaker/Sounds/Score/BasicSoundComponentBase.cs +++ b/src/SoundMaker/Sounds/Score/BasicSoundComponentBase.cs @@ -1,16 +1,17 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.Score; + /// -/// provides a base class for a basic sound component to inherit from. 音符・休符など音の基本部品を表す抽象基底クラス +/// Provides a base class for a basic sound component to inherit from.
音符・休符など音の基本部品を表す抽象基底クラス ///
public abstract class BasicSoundComponentBase : ISoundComponent { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) - /// is note/rest dotted. 付点かを表す論理型 + /// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) + /// Is note/rest dotted.
付点かを表す論理型 public BasicSoundComponentBase(LengthType length, bool isDotted) { Length = length; @@ -18,12 +19,12 @@ public BasicSoundComponentBase(LengthType length, bool isDotted) } /// - /// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) + /// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) ///
public LengthType Length { get; } /// - /// note/rest is dotted. 付点かを表す論理型 + /// Note/rest is dotted.
付点かを表す論理型 ///
public bool IsDotted { get; } diff --git a/src/SoundMaker/Sounds/Score/ISoundComponent.cs b/src/SoundMaker/Sounds/Score/ISoundComponent.cs index da7962a..4f3ec92 100644 --- a/src/SoundMaker/Sounds/Score/ISoundComponent.cs +++ b/src/SoundMaker/Sounds/Score/ISoundComponent.cs @@ -3,48 +3,46 @@ namespace SoundMaker.Sounds.Score; /// -/// interface for sound components. 音の部品を表すインターフェイス +/// Interface for sound components.
音の部品を表すインターフェイス ///
public interface ISoundComponent { /// - /// return length of the sound array. 音の配列の長さを取得するメソッド。 + /// Return length of the sound array.
音の配列の長さを取得するメソッド。 ///
- /// format of the sound.音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// length of array. 配列の長さ : int + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Length of array.
配列の長さ : int
/// Tempo must be non-negative and greater than 0. int GetWaveArrayLength(SoundFormat format, int tempo); /// - /// generate the wave of wave type. 波形の種類に基づいて波形データの配列を生成するメソッド。 + /// Generate the wave of wave type.
波形の種類に基づいて波形データの配列を生成するメソッド。 ///
- /// format of the sound.音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// length of the array. 配列の長さ - /// type of wave.波形の種類 - /// data of wave. 波形データ : short[] + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Length of the array.
配列の長さ + /// Type of wave.
波形の種類 + /// Data of wave.
波形データ : short[]
/// Tempo must be non-negative and greater than 0. /// Length must be non-negative. short[] GenerateWave(SoundFormat format, int tempo, int length, WaveTypeBase waveType); /// - /// generate the wave of wave type. 波形の種類に基づいて波形データの配列を生成するメソッド。 + /// Generate the wave of wave type.
波形の種類に基づいて波形データの配列を生成するメソッド。 ///
- /// format of the sound.音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// type of wave.波形の種類 - /// data of wave. 波形データ : short[] + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Type of wave.
波形の種類 + /// Data of wave.
波形データ : short[]
/// Tempo must be non-negative and greater than 0. short[] GenerateWave(SoundFormat format, int tempo, WaveTypeBase waveType); /// - /// Creates a clone of the sound component.
- /// サウンドコンポーネントのクローンを作成するメソッド。 + /// Creates a clone of the sound component.
サウンドコンポーネントのクローンを作成するメソッド。 ///
/// - /// A new instance of the sound component with the same properties.
- /// 同じプロパティを持つサウンドコンポーネントの新しいインスタンス + /// A new instance of the sound component with the same properties.
同じプロパティを持つサウンドコンポーネントの新しいインスタンス ///
ISoundComponent Clone(); } diff --git a/src/SoundMaker/Sounds/Score/LengthType.cs b/src/SoundMaker/Sounds/Score/LengthType.cs index d34f34f..381e0a2 100644 --- a/src/SoundMaker/Sounds/Score/LengthType.cs +++ b/src/SoundMaker/Sounds/Score/LengthType.cs @@ -1,35 +1,42 @@ namespace SoundMaker.Sounds.Score; + /// -/// type of length.(ex. "quarter" note) 長さのタイプを列挙(音楽的な、「四分」音符、「全」休符のような長さを表す。) +/// Type of length. (ex. "quarter" note).
長さのタイプを列挙(音楽的な、「四分」音符、「全」休符のような長さを表す。) ///
public enum LengthType { /// - /// whole. 全音符・休符 + /// Whole.
全音符・休符 ///
Whole = 1, + /// - /// half. 二分音符・休符 + /// Half.
二分音符・休符 ///
Half = 2, + /// - /// quarter. 四分音符・休符 + /// Quarter.
四分音符・休符 ///
Quarter = 4, + /// - /// 8. 八分音符・休符 + /// 8th.
八分音符・休符 ///
Eighth = 8, + /// - /// 16. 十六分音符・休符 + /// 16th.
十六分音符・休符 ///
Sixteenth = 16, + /// - /// 32. 三十二分音符・休符 + /// 32nd.
三十二分音符・休符 ///
ThirtySecond = 32, + /// - /// 64. 六十四分音符・休符 + /// 64th.
六十四分音符・休符 ///
SixtyFourth = 64, } diff --git a/src/SoundMaker/Sounds/Score/Note.cs b/src/SoundMaker/Sounds/Score/Note.cs index 175f064..41f819c 100644 --- a/src/SoundMaker/Sounds/Score/Note.cs +++ b/src/SoundMaker/Sounds/Score/Note.cs @@ -1,18 +1,19 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.Score; + /// -/// the note. 音符を表すクラス +/// The note.
音符を表すクラス ///
public class Note : BasicSoundComponentBase { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// scale of the note.音の高さ - /// sound height number. (C"4" is middle C.)音の高さの番号(Cの「4」が真ん中のド) - /// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) - /// is note/rest dotted. 付点かを表す論理型 + /// Scale of the note.
音の高さ + /// Sound height number. (C"4" is middle C.)
音の高さの番号(Cの「4」が真ん中のド) + /// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) + /// Is note/rest dotted.
付点かを表す論理型 /// Scale and scale number must be only the range of sound that the piano can produce. public Note(Scale scale, int scaleNumber, LengthType length, bool isDotted = false) : base(length, isDotted) @@ -24,10 +25,10 @@ public Note(Scale scale, int scaleNumber, LengthType length, bool isDotted = fal } /// - /// easiness constructor(use case: construct Tie).Scale is "A4". 簡易コンストラクタ(使用場面: タイの初期化)。音の高さは"A4" + /// Easiness constructor (use case: construct Tie). Scale is "A4".
簡易コンストラクタ(使用場面: タイの初期化)。音の高さは"A4" ///
- /// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) - /// is note/rest dotted. 付点かを表す論理型 + /// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) + /// Is note/rest dotted.
付点かを表す論理型 public Note(LengthType length, bool isDotted = false) : base(length, isDotted) { var scale = Scale.A; @@ -38,23 +39,24 @@ public Note(LengthType length, bool isDotted = false) : base(length, isDotted) } /// - /// scale of the note. 音の高さ + /// Scale of the note.
音の高さ ///
public Scale Scale { get; } /// - /// sound height number. (C"4" is middle C.)音の高さの番号(Cの「4」が真ん中のド) + /// Sound height number. (C"4" is middle C.)
音の高さの番号(Cの「4」が真ん中のド) ///
public int ScaleNumber { get; } /// - /// hertz of the sound. 音の周波数 + /// Hertz of the sound.
音の周波数 ///
public double Hertz { get; } = 0d; private int _volume = 100; + /// - /// volume of the sound.(0 ~ 100) 音の大きさ(0 ~ 100の間) + /// Volume of the sound. (0 ~ 100)
音の大きさ(0 ~ 100の間) ///
public int Volume { diff --git a/src/SoundMaker/Sounds/Score/Rest.cs b/src/SoundMaker/Sounds/Score/Rest.cs index f989083..ff449f9 100644 --- a/src/SoundMaker/Sounds/Score/Rest.cs +++ b/src/SoundMaker/Sounds/Score/Rest.cs @@ -1,11 +1,12 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.Score; + /// -/// the rest. 休符を表すクラス +/// The rest.
休符を表すクラス ///
-/// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) -/// is note/rest dotted. 付点かを表す論理型 +/// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) +/// Is note/rest dotted.
付点かを表す論理型 public class Rest(LengthType length, bool isDotted = false) : BasicSoundComponentBase(length, isDotted) { public override Rest Clone() @@ -24,11 +25,11 @@ public override short[] GenerateWave(SoundFormat format, int tempo, WaveTypeBase } /// - /// 長さの分休む(0埋めの配列を返す) + /// Rest for the duration (returns an array filled with zeroes).
長さの分休む(0埋めの配列を返す) ///
- /// format of the sound.音のフォーマット - /// 一分間の休符の数 - /// 0埋めされた配列 : short[] + /// Format of the sound.
音のフォーマット + /// Number of rests per minute.
一分間の休符の数 + /// Array filled with zeroes.
0埋めされた配列 : short[]
private short[] GetWave(SoundFormat format, int tempo) { var length = GetWaveArrayLength(format, tempo); @@ -36,12 +37,12 @@ private short[] GetWave(SoundFormat format, int tempo) } /// - /// 長さ分休む(0埋めの配列を返す) + /// Rest for the duration (returns an array filled with zeroes).
長さ分休む(0埋めの配列を返す) ///
- /// format of the sound.音のフォーマット - /// 一分間の休符の数 - /// length of the array. 配列の長さ - /// 0埋めされた配列 : short[] + /// Format of the sound.
音のフォーマット + /// Number of rests per minute.
一分間の休符の数 + /// Length of the array.
配列の長さ + /// Array filled with zeroes.
0埋めされた配列 : short[]
private short[] GetWave(SoundFormat format, int tempo, int length) { return Enumerable.Repeat(0, length).ToArray(); diff --git a/src/SoundMaker/Sounds/Score/Scale.cs b/src/SoundMaker/Sounds/Score/Scale.cs index 4980995..cf4d277 100644 --- a/src/SoundMaker/Sounds/Score/Scale.cs +++ b/src/SoundMaker/Sounds/Score/Scale.cs @@ -1,6 +1,6 @@ namespace SoundMaker.Sounds.Score; /// -/// type of pitch of sound. 音の高さを表す列挙型 +/// Type of pitch of sound.
音の高さを表す列挙型 ///
public enum Scale { diff --git a/src/SoundMaker/Sounds/Score/Tie.cs b/src/SoundMaker/Sounds/Score/Tie.cs index e4cb7ed..7705492 100644 --- a/src/SoundMaker/Sounds/Score/Tie.cs +++ b/src/SoundMaker/Sounds/Score/Tie.cs @@ -1,17 +1,18 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.Score; + /// -/// tie is joined two notes of same scale. タイ(同じ高さの音符同士を繋げて、あたかも一つの音符かのように扱う)を表すクラス +/// Tie is joined two notes of same scale.
タイ(同じ高さの音符同士を繋げて、あたかも一つの音符かのように扱う)を表すクラス ///
public class Tie : ISoundComponent { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// the note of base. 基本となる音符。二つ目の音符の音の高さはこの音符と同じになる。 - /// length of the second note.(ex. "quarter" note) 二つ目の音符の長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) - /// the second note/rest is dotted. 二つ目の音符が付点かを表す論理型 + /// The note of base.
基本となる音符。二つ目の音符の音の高さはこの音符と同じになる。 + /// Length of the second note. (ex. "quarter" note).
二つ目の音符の長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) + /// The second note/rest is dotted.
二つ目の音符が付点かを表す論理型 public Tie(Note baseNote, LengthType additionalLength, bool additionalIsDotted = false) { BaseNote = baseNote; @@ -22,10 +23,10 @@ public Tie(Note baseNote, LengthType additionalLength, bool additionalIsDotted = } /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// the note of base. 基本となる音符。二つ目の音符の音の高さはこの音符と同じになる。 - /// notes of tie. 追加する音符 + /// The note of base.
基本となる音符。二つ目の音符の音の高さはこの音符と同じになる。 + /// Notes of tie.
追加する音符 public Tie(Note baseNote, IReadOnlyCollection additionalNotes) { BaseNote = baseNote; @@ -33,17 +34,17 @@ public Tie(Note baseNote, IReadOnlyCollection additionalNotes) } /// - /// count of notes. + /// Count of notes. /// public int Count => AdditionalNotes.Count + 1; /// - /// the base note. 基本の音符 + /// The base note.
基本の音符 ///
public Note BaseNote { get; } /// - /// the additional notes. 追加の音符のリスト + /// The additional notes.
追加の音符のリスト ///
public IReadOnlyCollection AdditionalNotes { get; } @@ -69,12 +70,9 @@ public int GetWaveArrayLength(SoundFormat format, int tempo) } /// - /// Creates a clone of the tie.
- /// タイのクローンを作成するメソッド。 + /// Creates a clone of the tie.
タイのクローンを作成するメソッド。 ///
- /// A new instance of the tie with the same properties.
- /// 同じプロパティを持つタイの新しいインスタンス - ///
+ /// A new instance of the tie with the same properties.
同じプロパティを持つタイの新しいインスタンス
public Tie Clone() { var newTie = new Tie(BaseNote.Clone(), AdditionalNotes.Select(note => note.Clone()).ToArray()); diff --git a/src/SoundMaker/Sounds/Score/Tuplet.cs b/src/SoundMaker/Sounds/Score/Tuplet.cs index 2b96883..2c62fd5 100644 --- a/src/SoundMaker/Sounds/Score/Tuplet.cs +++ b/src/SoundMaker/Sounds/Score/Tuplet.cs @@ -1,17 +1,18 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.Score; + /// -/// tuplet. 連符を表すクラス +/// Tuplet.
連符を表すクラス ///
public class Tuplet : ISoundComponent { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// components to be tuplet. 連符にする基本の音のリスト - /// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) - /// tuplet is dotted. 付点かを表す論理型 + /// Components to be tuplet.
連符にする基本の音のリスト + /// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) + /// Tuplet is dotted.
付点かを表す論理型 public Tuplet(IReadOnlyList tupletComponents, LengthType length, bool isDotted = false) { TupletComponents = new List(tupletComponents); @@ -20,32 +21,32 @@ public Tuplet(IReadOnlyList tupletComponents, LengthType length } /// - /// components to be tuplet. 連符にする基本の音のリスト + /// Components to be tuplet.
連符にする基本の音のリスト ///
internal IReadOnlyList TupletComponents { get; } /// - /// get the component at index. index番目の連符の音を取得する。 + /// Get the component at index.
index番目の連符の音を取得する。 ///
- /// index. 何番目かを表す整数 - /// sound component.サウンドコンポーネント - /// index is less than 0 or index is equal to or greater than Count. + /// Index.
何番目かを表す整数 + /// Sound component.
サウンドコンポーネント
+ /// Index is less than 0 or index is equal to or greater than Count. public ISoundComponent this[int index] => index < 0 || index >= TupletComponents.Count - ? throw new IndexOutOfRangeException("index is less than 0 or index is equal to or greater than Count.") + ? throw new IndexOutOfRangeException("Index is less than 0 or index is equal to or greater than Count.") : TupletComponents[index]; /// - /// length (ex. "quarter" note) 長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。 + /// Length (ex. "quarter" note).
長さ(音楽的な、「四分」音符、「全」休符のような長さを表す。) ///
public LengthType Length { get; } /// - /// note/rest is dotted. 付点かを表す論理型 + /// Note/rest is dotted.
付点かを表す論理型 ///
public bool IsDotted { get; } /// - /// count of component in this. コンポーネントの個数 + /// Count of components in this.
コンポーネントの個数 ///
public int Count => TupletComponents.Count; @@ -57,7 +58,7 @@ public int GetWaveArrayLength(SoundFormat format, int tempo) public short[] GenerateWave(SoundFormat format, int tempo, int length, WaveTypeBase waveType) { var result = new List(length); - // 一個あたりの配列の長さを算出 + // Calculate the length of each component var count = GetLengthPerOneComponent(); int i; var componentLengthBase = length / count; @@ -99,12 +100,9 @@ private int GetLengthPerOneComponent() } /// - /// Creates a clone of the tuplet.
- /// 連符のクローンを作成するメソッド。 + /// Creates a clone of the tuplet.
連符のクローンを作成するメソッド。 ///
- /// A new instance of the tuplet with the same properties.
- /// 同じプロパティを持つ連符の新しいインスタンス - ///
+ /// A new instance of the tuplet with the same properties.
同じプロパティを持つ連符の新しいインスタンス
public Tuplet Clone() { var cloned = new Tuplet(TupletComponents.Select(component => component.Clone()).ToArray(), Length, IsDotted); diff --git a/src/SoundMaker/Sounds/SoundChannels/ISoundChannel.cs b/src/SoundMaker/Sounds/SoundChannels/ISoundChannel.cs index 5d1a85d..c65944c 100644 --- a/src/SoundMaker/Sounds/SoundChannels/ISoundChannel.cs +++ b/src/SoundMaker/Sounds/SoundChannels/ISoundChannel.cs @@ -4,62 +4,62 @@ namespace SoundMaker.Sounds.SoundChannels; public interface ISoundChannel : IEnumerable { /// - /// get sound component at index. index番目のサウンドコンポーネントを取得する + /// Get sound component at index.
index番目のサウンドコンポーネントを取得する ///
- /// 何番目かを表す整数 - /// sound component.サウンドコンポーネント + /// Index.
何番目かを表す整数 + /// Sound component.
サウンドコンポーネント
ISoundComponent this[int index] { get; } /// - /// the total number of sound components the internal data structure can hold without resizing. 内部リストがサイズを変えないで保持できるサウンドコンポーネントの個数 + /// The total number of sound components the internal data structure can hold without resizing.
内部リストがサイズを変えないで保持できるサウンドコンポーネントの個数 ///
public int Capacity { get; } /// - /// count of sound components. サウンドコンポーネントの個数 + /// Count of sound components.
サウンドコンポーネントの個数 ///
public int ComponentCount { get; } /// - /// length of wave data. 音の波形データを表す配列の長さ + /// Length of wave data.
音の波形データを表す配列の長さ ///
public int WaveArrayLength { get; } /// - /// quarter note/rest per minute. 一分間の四分音符・休符の数 + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 ///
public int Tempo { get; } /// - /// format of the sound. 音のフォーマット + /// Format of the sound.
音のフォーマット ///
SoundFormat Format { get; } /// - /// direction of hearing. ステレオサウンドの場合、左右どちらから音が出るか + /// Direction of hearing.
ステレオサウンドの場合、左右どちらから音が出るか ///
PanType PanType { get; } /// - /// generate wave data. 音の波形データを生成するメソッド。 + /// Generate wave data.
音の波形データを生成するメソッド。 ///
- /// the array of wave data.音の波形データの配列 : short[] + /// The array of wave data.
音の波形データの配列 : short[]
short[] GenerateWave(); /// - /// add sound component to this. サウンドコンポーネントを追加するメソッド。 + /// Add sound component to this.
サウンドコンポーネントを追加するメソッド。 ///
- /// the sound component to be added to this. 追加するサウンドコンポーネント + /// The sound component to be added to this.
追加するサウンドコンポーネント void Add(ISoundComponent component); /// - /// remove the sound component at index. index番目のサウンドコンポーネントを削除するメソッド。 + /// Remove the sound component at index.
index番目のサウンドコンポーネントを削除するメソッド。 ///
- /// the index of the sound component to remove. 削除するサウンドコンポーネントのインデックス + /// The index of the sound component to remove.
削除するサウンドコンポーネントのインデックス void RemoveAt(int index); /// - /// clear sound components in this. チャンネル内のサウンドコンポーネントを空にするメソッド。 + /// Clear sound components in this.
チャンネル内のサウンドコンポーネントを空にするメソッド。 ///
void Clear(); } diff --git a/src/SoundMaker/Sounds/SoundChannels/LowBitNoiseSoundChannel.cs b/src/SoundMaker/Sounds/SoundChannels/LowBitNoiseSoundChannel.cs index 5952578..059ac40 100644 --- a/src/SoundMaker/Sounds/SoundChannels/LowBitNoiseSoundChannel.cs +++ b/src/SoundMaker/Sounds/SoundChannels/LowBitNoiseSoundChannel.cs @@ -1,29 +1,31 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.SoundChannels; + /// -/// this generates low bit noise wave. ロービットノイズを生成するサウンドチャンネル +/// This generates low bit noise wave.
ロービットノイズを生成するサウンドチャンネル ///
public class LowBitNoiseSoundChannel : SoundChannelBase { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format of the sound. 音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// sound direction. 左右どちらから音が出るか - /// the total number of sound components the internal data structure can hold without resizing. 内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Sound direction.
左右どちらから音が出るか + /// The total number of sound components the internal data structure can hold without resizing.
内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 /// Tempo must be non-negative and greater than 0. /// Capacity must be non-negative. public LowBitNoiseSoundChannel(int tempo, SoundFormat format, PanType panType, int capacity) : base(tempo, format, panType, capacity) { } + /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format of the sound. 音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// sound direction. 左右どちらから音が出るか + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Sound direction.
左右どちらから音が出るか /// Tempo must be non-negative and greater than 0. public LowBitNoiseSoundChannel(int tempo, SoundFormat format, PanType panType) : base(tempo, format, panType) { diff --git a/src/SoundMaker/Sounds/SoundChannels/PanType.cs b/src/SoundMaker/Sounds/SoundChannels/PanType.cs index 1d8dae2..de2d2b7 100644 --- a/src/SoundMaker/Sounds/SoundChannels/PanType.cs +++ b/src/SoundMaker/Sounds/SoundChannels/PanType.cs @@ -1,19 +1,19 @@ namespace SoundMaker.Sounds.SoundChannels; /// -/// direction of hearing. 左右どちらから音が出るかを表す列挙型 +/// Direction of hearing.
左右どちらから音が出るかを表す列挙型 ///
public enum PanType { /// - /// both. 左右両方 + /// Both.
左右両方 ///
Both, /// - /// right. 右 + /// Right.
右 ///
Right, /// - /// left. 左 + /// Left.
左 ///
Left } diff --git a/src/SoundMaker/Sounds/SoundChannels/PseudoTriangleSoundChannel.cs b/src/SoundMaker/Sounds/SoundChannels/PseudoTriangleSoundChannel.cs index d42589b..b4c8dff 100644 --- a/src/SoundMaker/Sounds/SoundChannels/PseudoTriangleSoundChannel.cs +++ b/src/SoundMaker/Sounds/SoundChannels/PseudoTriangleSoundChannel.cs @@ -4,23 +4,23 @@ namespace SoundMaker.Sounds.SoundChannels; public class PseudoTriangleSoundChannel : SoundChannelBase { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format of the sound. 音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// sound direction. 左右どちらから音が出るか + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Sound direction.
左右どちらから音が出るか /// Tempo must be non-negative and greater than 0. public PseudoTriangleSoundChannel(int tempo, SoundFormat format, PanType panType) : base(tempo, format, panType) { } /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format of the sound. 音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// sound direction. 左右どちらから音が出るか - /// the total number of sound components the internal data structure can hold without resizing. 内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Sound direction.
左右どちらから音が出るか + /// The total number of sound components the internal data structure can hold without resizing.
内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 /// Tempo must be non-negative and greater than 0. /// Capacity must be non-negative. public PseudoTriangleSoundChannel(int tempo, SoundFormat format, PanType panType, int capacity) : base(tempo, format, panType, capacity) diff --git a/src/SoundMaker/Sounds/SoundChannels/SoundChannelBase.cs b/src/SoundMaker/Sounds/SoundChannels/SoundChannelBase.cs index 78ad536..dad3f00 100644 --- a/src/SoundMaker/Sounds/SoundChannels/SoundChannelBase.cs +++ b/src/SoundMaker/Sounds/SoundChannels/SoundChannelBase.cs @@ -1,21 +1,20 @@ - -using SoundMaker.Sounds.Score; +using SoundMaker.Sounds.Score; using System.Collections; namespace SoundMaker.Sounds.SoundChannels; + /// -/// sound channel base. サウンドチャンネルの抽象基底クラス。 +/// Sound channel base.
サウンドチャンネルの抽象基底クラス。 ///
public abstract class SoundChannelBase : ISoundChannel { - /// - /// constructor. コンストラクタ。 + /// Constructor.
コンストラクタ。 ///
- /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// format of the sound.音のフォーマット - /// direction of hearing. 左右どちらから音が出るか - /// the total number of sound components the internal data structure can hold without resizing. 内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Format of the sound.
音のフォーマット + /// Direction of hearing.
左右どちらから音が出るか + /// The total number of sound components the internal data structure can hold without resizing.
内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 /// Tempo must be non-negative and greater than 0. /// Capacity must be non-negative. public SoundChannelBase(int tempo, SoundFormat format, PanType panType, int capacity) @@ -35,11 +34,11 @@ public SoundChannelBase(int tempo, SoundFormat format, PanType panType, int capa } /// - /// constructor. コンストラクタ。 + /// Constructor.
コンストラクタ。 ///
- /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// format of the sound.音のフォーマット - /// pan of the sound. 左右どちらから音が出るか + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Format of the sound.
音のフォーマット + /// Pan of the sound.
左右どちらから音が出るか /// Tempo must be non-negative and greater than 0. public SoundChannelBase(int tempo, SoundFormat format, PanType panType) { @@ -53,7 +52,7 @@ public SoundChannelBase(int tempo, SoundFormat format, PanType panType) } /// - /// サウンドコンポーネントのリスト + /// List of sound components.
サウンドコンポーネントのリスト ///
protected List SoundComponents { get; private set; } = []; @@ -70,13 +69,13 @@ public SoundChannelBase(int tempo, SoundFormat format, PanType panType) public int WaveArrayLength { get; private set; } /// - /// get sound component at index. index番目のサウンドコンポーネントを取得する + /// Get sound component at index.
index番目のサウンドコンポーネントを取得する ///
- /// index. 何番目かを表す整数 - /// sound component.サウンドコンポーネント - /// index is less than 0 or index is equal to or greater than ComponentCount. + /// Index.
何番目かを表す整数 + /// Sound component.
サウンドコンポーネント
+ /// Index is less than 0 or index is equal to or greater than ComponentCount. public ISoundComponent this[int index] => index < 0 || index >= SoundComponents.Count - ? throw new IndexOutOfRangeException("index is less than 0 or index is equal to or greater than ComponentCount.") + ? throw new IndexOutOfRangeException("Index is less than 0 or index is equal to or greater than ComponentCount.") : SoundComponents[index]; public void Add(ISoundComponent component) @@ -92,15 +91,15 @@ public void Clear() } /// - /// remove the sound component at index. index番目のサウンドコンポーネントを削除するメソッド。 + /// Remove the sound component at index.
index番目のサウンドコンポーネントを削除するメソッド。 ///
- /// the index of the sound component to remove. 削除するサウンドコンポーネントのインデックス - /// index is less than 0 or index is equal to or greater than ComponentCount. + /// The index of the sound component to remove.
削除するサウンドコンポーネントのインデックス + /// Index is less than 0 or index is equal to or greater than ComponentCount. public void RemoveAt(int index) { if (SoundComponents.Count <= index || index < 0) { - throw new ArgumentOutOfRangeException(nameof(index), "index is less than 0 or index is equal to or greater than ComponentCount."); + throw new ArgumentOutOfRangeException(nameof(index), "Index is less than 0 or index is equal to or greater than ComponentCount."); } var component = SoundComponents[index]; WaveArrayLength -= component.GetWaveArrayLength(Format, Tempo); @@ -108,9 +107,9 @@ public void RemoveAt(int index) } /// - /// Import sound components. サウンドコンポーネントをインポートする。 + /// Import sound components.
サウンドコンポーネントをインポートする。 ///
- /// Sound components. サウンドコンポーネント + /// Sound components.
サウンドコンポーネント public void Import(IEnumerable components) { SoundComponents = new List(components); diff --git a/src/SoundMaker/Sounds/SoundChannels/SquareSoundChannel.cs b/src/SoundMaker/Sounds/SoundChannels/SquareSoundChannel.cs index ee185a3..d7033e8 100644 --- a/src/SoundMaker/Sounds/SoundChannels/SquareSoundChannel.cs +++ b/src/SoundMaker/Sounds/SoundChannels/SquareSoundChannel.cs @@ -1,18 +1,19 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.SoundChannels; + /// -/// this generates square wave. 矩形波を生成するサウンドチャンネル +/// This generates square wave.
矩形波を生成するサウンドチャンネル ///
public class SquareSoundChannel : SoundChannelBase { /// - /// コンストラクタ + /// Constructor.
コンストラクタ ///
- /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// format of the sound.音のフォーマット - /// duty cycle. デューティ比 - /// pan of the sound. 左右どちらから音が出るか + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Format of the sound.
音のフォーマット + /// Duty cycle.
デューティ比 + /// Pan of the sound.
左右どちらから音が出るか /// Tempo must be non-negative and greater than 0. public SquareSoundChannel(int tempo, SoundFormat format, SquareWaveRatio ratio, PanType panType) : base(tempo, format, panType) { @@ -20,13 +21,13 @@ public SquareSoundChannel(int tempo, SoundFormat format, SquareWaveRatio ratio, } /// - /// コンストラクタ + /// Constructor.
コンストラクタ ///
- /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// format of the sound.音のフォーマット - /// duty cycle. デューティ比 - /// pan of the sound. 左右どちらから音が出るか - /// the total number of sound components the internal data structure can hold without resizing. 内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Format of the sound.
音のフォーマット + /// Duty cycle.
デューティ比 + /// Pan of the sound.
左右どちらから音が出るか + /// The total number of sound components the internal data structure can hold without resizing.
内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 /// Tempo must be non-negative and greater than 0. /// Capacity must be non-negative. public SquareSoundChannel(int tempo, SoundFormat format, SquareWaveRatio ratio, PanType panType, int capacity) @@ -36,7 +37,7 @@ public SquareSoundChannel(int tempo, SoundFormat format, SquareWaveRatio ratio, } /// - /// デューティ比 + /// Duty cycle.
デューティ比 ///
private SquareWaveRatio Ratio { get; } diff --git a/src/SoundMaker/Sounds/SoundChannels/SquareWaveRatio.cs b/src/SoundMaker/Sounds/SoundChannels/SquareWaveRatio.cs index 2b25114..cdc83d5 100644 --- a/src/SoundMaker/Sounds/SoundChannels/SquareWaveRatio.cs +++ b/src/SoundMaker/Sounds/SoundChannels/SquareWaveRatio.cs @@ -1,6 +1,6 @@ namespace SoundMaker.Sounds.SoundChannels; /// -/// type of duty cycle. デューティ比の列挙型 +/// Type of duty cycle.
デューティ比の列挙型 ///
public enum SquareWaveRatio { diff --git a/src/SoundMaker/Sounds/SoundChannels/TriangleSoundChannel.cs b/src/SoundMaker/Sounds/SoundChannels/TriangleSoundChannel.cs index 44a07c0..18df760 100644 --- a/src/SoundMaker/Sounds/SoundChannels/TriangleSoundChannel.cs +++ b/src/SoundMaker/Sounds/SoundChannels/TriangleSoundChannel.cs @@ -1,28 +1,29 @@ using SoundMaker.Sounds.WaveTypes; namespace SoundMaker.Sounds.SoundChannels; + /// -/// this generates triangle wave. 三角波を生成するチャンネル。 +/// This generates triangle wave.
三角波を生成するチャンネル。 ///
public class TriangleSoundChannel : SoundChannelBase { /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format of the sound. 音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// sound direction. 左右どちらから音が出るか - /// the total number of sound components the internal data structure can hold without resizing. 内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Sound direction.
左右どちらから音が出るか + /// The total number of sound components the internal data structure can hold without resizing.
内部データ構造がリサイズされずに保持できるサウンドコンポーネントの総数。 /// Tempo must be non-negative and greater than 0. /// Capacity must be non-negative. public TriangleSoundChannel(int tempo, SoundFormat format, PanType panType, int capacity) : base(tempo, format, panType, capacity) { } /// - /// constructor コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format of the sound. 音のフォーマット - /// quarter note/rest per minute. 一分間の四分音符・休符の数 - /// sound direction. 左右どちらから音が出るか + /// Format of the sound.
音のフォーマット + /// Quarter note/rest per minute.
一分間の四分音符・休符の数 + /// Sound direction.
左右どちらから音が出るか /// Tempo must be non-negative and greater than 0. public TriangleSoundChannel(int tempo, SoundFormat format, PanType panType) : base(tempo, format, panType) { } diff --git a/src/SoundMaker/Sounds/SoundDirectionType.cs b/src/SoundMaker/Sounds/SoundDirectionType.cs index 1d770d5..2409f28 100644 --- a/src/SoundMaker/Sounds/SoundDirectionType.cs +++ b/src/SoundMaker/Sounds/SoundDirectionType.cs @@ -1,19 +1,20 @@ namespace SoundMaker.Sounds; /// -/// the type which is expressed direction of the sound. ステレオ音声で音が聞こえる方向の種類を表す列挙型 +/// The type which is expressed direction of the sound.
+/// ステレオ音声で音が聞こえる方向の種類を表す列挙型 ///
public enum SoundDirectionType { /// - /// both. 左右両方 + /// Both.
左右両方 ///
Both, /// - /// right. 右 + /// Right.
右 ///
Right, /// - /// left. 左 + /// Left.
左 ///
Left, } diff --git a/src/SoundMaker/Sounds/SoundFormat.cs b/src/SoundMaker/Sounds/SoundFormat.cs index a5a8600..fd335fa 100644 --- a/src/SoundMaker/Sounds/SoundFormat.cs +++ b/src/SoundMaker/Sounds/SoundFormat.cs @@ -1,15 +1,16 @@ namespace SoundMaker.Sounds; + /// -/// format of the sound. 音のフォーマットを表す構造体 +/// Format of the sound.
音のフォーマットを表す構造体 ///
public readonly struct SoundFormat { /// - /// constructor. コンストラクタ + /// Constructor.
コンストラクタ ///
- /// sampling frequency. サンプリング周波数 - /// bit rate.量子化ビット数 - /// type of channels count. チャンネル数 + /// Sampling frequency.
サンプリング周波数 + /// Bit rate.
量子化ビット数 + /// Type of channels count.
チャンネル数 public SoundFormat(SamplingFrequencyType samplingFrequency, BitRateType bitRate, ChannelType channel) { Channel = channel; @@ -18,17 +19,17 @@ public SoundFormat(SamplingFrequencyType samplingFrequency, BitRateType bitRate, } /// - /// type of channels count. チャンネル数 + /// Type of channels count.
チャンネル数 ///
public ChannelType Channel { get; } /// - /// sampling frequency. サンプリング周波数 + /// Sampling frequency.
サンプリング周波数 ///
public SamplingFrequencyType SamplingFrequency { get; } /// - /// bit rate. 量子化ビット数 + /// Bit rate.
量子化ビット数 ///
public BitRateType BitRate { get; } } diff --git a/src/SoundMaker/Sounds/StereoMixer.cs b/src/SoundMaker/Sounds/StereoMixer.cs index 5603b53..ce32e3e 100644 --- a/src/SoundMaker/Sounds/StereoMixer.cs +++ b/src/SoundMaker/Sounds/StereoMixer.cs @@ -1,27 +1,21 @@ using SoundMaker.Sounds.SoundChannels; namespace SoundMaker.Sounds; + /// -/// mix waves to stereo wave. ステレオ音声をミックスするクラス。 +/// Mix waves to stereo wave.
ステレオ音声をミックスするクラス。 ///
-public class StereoMixer : MixerBase +/// Channels.
チャンネルのリスト +public class StereoMixer(IReadOnlyList channels) : MixerBase(channels) { - /// - /// constructor. コンストラクタ - /// - /// channels. チャンネルのリスト - public StereoMixer(IReadOnlyList channels) : base(channels) - { - } - private object LockLeftObject { get; } = new object(); private object LockRightObject { get; } = new object(); /// - /// mix. ミックスするメソッド。 + /// Mix.
ミックスするメソッド。 ///
- /// ステレオ波形データ + /// Stereo wave data.
ステレオ波形データ
public StereoWave Mix() { var max = GetMaxWaveLength(); @@ -34,6 +28,7 @@ public StereoWave Mix() }); return new StereoWave(rightResult, leftResult); } + private void Merge(short[] left, short[] right, ISoundChannel channel, ChannelCount channelCount) { var waveNumericData = channel.GenerateWave(); @@ -57,7 +52,7 @@ private void Merge(short[] left, short[] right, ISoundChannel channel, ChannelCo } } } - // 両方のチャンネルから音が出る場合 + // If sound is coming from both channels else { lock (LockLeftObject) @@ -73,17 +68,18 @@ private void Merge(short[] left, short[] right, ISoundChannel channel, ChannelCo } } } + /// - /// 左右それぞれのチャンネルの個数を数えるメソッド。 + /// Method to count the number of channels for left and right.
左右それぞれのチャンネルの個数を数えるメソッド。 ///
- /// 左右それぞれのチャンネルの個数 + /// Number of channels for left and right.
左右それぞれのチャンネルの個数
private ChannelCount GetChannelCount() { var right = 0; var left = 0; foreach (var channel in Channels) { - // 両方の場合は両方インクリメントする。 + // Increment both if both channels are used. if (channel.PanType is PanType.Left || channel.PanType is PanType.Both) { left++; @@ -96,16 +92,10 @@ private ChannelCount GetChannelCount() return new ChannelCount(left, right); } - private readonly struct ChannelCount + private readonly struct ChannelCount(int left, int right) { - public ChannelCount(int left, int right) - { - Left = left; - Right = right; - } - - public int Right { get; } + public int Right { get; } = right; - public int Left { get; } + public int Left { get; } = left; } } diff --git a/src/SoundMaker/Sounds/StereoWave.cs b/src/SoundMaker/Sounds/StereoWave.cs index a47a944..aec8806 100644 --- a/src/SoundMaker/Sounds/StereoWave.cs +++ b/src/SoundMaker/Sounds/StereoWave.cs @@ -1,14 +1,14 @@ namespace SoundMaker.Sounds; /// -/// stereo wave. ステレオ波形データのクラス +/// Stereo wave.
ステレオ波形データのクラス ///
public class StereoWave : IWave { /// - /// constructor + /// Constructor.
コンストラクタ ///
- /// the wave of right. 右の波形データ - /// the wave of left. 左の波形データ + /// The wave of right.
右の波形データ + /// The wave of left.
左の波形データ public StereoWave(IReadOnlyCollection rightWave, IReadOnlyCollection leftWave) { var rightArgument = rightWave.ToArray(); @@ -38,10 +38,10 @@ public StereoWave(IReadOnlyCollection rightWave, IReadOnlyCollection - /// change the volume this. 音量を変更するメソッド。 + /// Change the volume.
音量を変更するメソッド。 /// - /// volume(0 ~ 100) 音量(0 ~ 100) - /// Channel to change the sound. 左右・両方の中から音量を変更するものを選ぶ + /// Volume (0 ~ 100).
音量(0 ~ 100) + /// Channel to change the sound.
左右・両方の中から音量を変更するものを選ぶ public void ChangeVolume(int volume, SoundDirectionType channelType) { volume = volume < 0 ? 0 : volume; @@ -70,7 +70,7 @@ public void ChangeVolume(int volume, SoundDirectionType channelType) LeftWave[i] = (short)(LeftOriginalVolumeWave[i] * (volume / 100d)); } - // 残りを処理する。 + // Process the remaining data. var wave = RightWave.Length == maxAndMinLength.Max ? RightWave : LeftWave; var originalWave = RightWave.Length == maxAndMinLength.Max ? RightOriginalVolumeWave : LeftOriginalVolumeWave; @@ -85,10 +85,10 @@ public void ChangeVolume(int volume, SoundDirectionType channelType) } /// - /// get byte array of the wave. 波形データのバイト列を取得するメソッド。 + /// Get byte array of the wave.
波形データのバイト列を取得するメソッド。 ///
- /// bitrate of the sound. 量子化ビット数 - /// byte array of wave data. 波形データのバイト列 : byte[] + /// Bitrate of the sound.
量子化ビット数 + /// Byte array of wave data.
波形データのバイト列 : byte[]
public byte[] GetBytes(BitRateType bitRate) { return bitRate == BitRateType.SixteenBit ? Get16BitBytes().ToArray() : Get8BitBytes().ToArray(); @@ -177,9 +177,9 @@ private List Get16BitBytes() } /// - /// get the wave on the right. 右側のチャンネルの音の波形データを取得するメソッド。 + /// Get the wave on the right.
右側のチャンネルの音の波形データを取得するメソッド。 ///
- /// the wave on the right. 右側のチャンネルの音の波形データ : short[] + /// The wave on the right.
右側のチャンネルの音の波形データ : short[]
public short[] GetRightWave() { var resultshorts = new short[RightWave.Length]; @@ -188,9 +188,9 @@ public short[] GetRightWave() } /// - /// get the wave on the left. 左側のチャンネルの音の波形データを取得するメソッド。 + /// Get the wave on the left.
左側のチャンネルの音の波形データを取得するメソッド。 ///
- /// the wave on the left. 左側のチャンネルの音の波形データ : short[] + /// The wave on the left.
左側のチャンネルの音の波形データ : short[]
public short[] GetLeftWave() { var resultshorts = new short[LeftWave.Length]; @@ -199,9 +199,9 @@ public short[] GetLeftWave() } /// - /// append wave to this. 別のステレオ波形を末尾に繋げるメソッド。 + /// Append wave to this.
別のステレオ波形を末尾に繋げるメソッド。 ///
- /// wave + /// Wave.
波形 public void Append(StereoWave wave) { RightWave = RightWave.Concat(wave.GetRightWave()).ToArray(); diff --git a/src/SoundMaker/Sounds/WaveTypes/LowBitNoiseWave.cs b/src/SoundMaker/Sounds/WaveTypes/LowBitNoiseWave.cs index ebe8e75..925ad15 100644 --- a/src/SoundMaker/Sounds/WaveTypes/LowBitNoiseWave.cs +++ b/src/SoundMaker/Sounds/WaveTypes/LowBitNoiseWave.cs @@ -1,6 +1,7 @@ namespace SoundMaker.Sounds.WaveTypes; + /// -/// the low bit noise. ロービットノイズ +/// The low bit noise.
ロービットノイズ ///
public class LowBitNoiseWave : WaveTypeBase { diff --git a/src/SoundMaker/Sounds/WaveTypes/PseudoTriangleWave.cs b/src/SoundMaker/Sounds/WaveTypes/PseudoTriangleWave.cs index 59477c8..0b248c6 100644 --- a/src/SoundMaker/Sounds/WaveTypes/PseudoTriangleWave.cs +++ b/src/SoundMaker/Sounds/WaveTypes/PseudoTriangleWave.cs @@ -1,24 +1,27 @@ namespace SoundMaker.Sounds.WaveTypes; + /// -/// the pseudo triangle wave. 疑似三角波 +/// The pseudo triangle wave.
疑似三角波 ///
public class PseudoTriangleWave : WaveTypeBase { - private static readonly short[] _leftHeights = new short[] - { + private static readonly short[] _leftHeights = + [ 0, -4096, -8192, -12288, -16384, -20480, -24576, -28672, -28672, -24576, -20480, -16384, -12288, -8192, -4096, 0, - }; - private static readonly short[] _rightHeights = new short[] - { + ]; + private static readonly short[] _rightHeights = + [ 4095, 8191, 12287, 16383, 20479, 24575, 28671, short.MaxValue, short.MaxValue, 28671, 24575, 20479, 16383, 12287, 8191, 4095 - }; + ]; public override short[] GenerateWave(SoundFormat format, int length, int volume, double hertz) { CheckGenerateWaveArgs(length, volume, hertz); + // Number of repetitions to create △ waveform // △の波形を作るための繰り返し回数 var triangleWidth = (int)((int)format.SamplingFrequency / hertz); + // Generate a normal triangle wave if pseudo triangle wave cannot be generated. // 疑似三角波に出来ない場合は普通の三角波を生成する。 if (triangleWidth <= 64) { @@ -44,13 +47,12 @@ internal override WaveTypeBase Clone() } /// - /// Generates one cycle of a sound waveform at the specified frequency.
- /// 指定した周波数の音声波形1周期分を生成する。 + /// Generates one cycle of a sound waveform at the specified frequency.
指定した周波数の音声波形1周期分を生成する。 ///
/// Format of the sound.
音のフォーマット - /// Volume
音量(0 ~ 100) + /// Volume.
音量(0 ~ 100) /// Hertz of the sound.
音の周波数 - /// The array of wave data. + /// The array of wave data.
波形データの配列 : short[]
/// Hertz must be non-negative and greater than 0. /// Volume must be below 100 and above 0. public short[] GenerateUnitWave(SoundFormat format, int volume, double hertz) @@ -65,10 +67,13 @@ private static short[] GenerateUnitWaveInternal(SoundFormat format, int volume, var result = new short[repeatNumber]; var steps = 32; + // Volume magnification (1.00 ~ 0.00) // 音量の倍率(1.00 ~ 0.00) var volumeMagnification = volume / 100d; + // Width of stairs // 階段の幅 var stairsWidth = repeatNumber / steps; + // Remainder of width // 幅の余り var r = repeatNumber % steps; diff --git a/src/SoundMaker/Sounds/WaveTypes/SquareWave.cs b/src/SoundMaker/Sounds/WaveTypes/SquareWave.cs index 6c2dc0d..2e64942 100644 --- a/src/SoundMaker/Sounds/WaveTypes/SquareWave.cs +++ b/src/SoundMaker/Sounds/WaveTypes/SquareWave.cs @@ -1,15 +1,16 @@ using SoundMaker.Sounds.SoundChannels; namespace SoundMaker.Sounds.WaveTypes; + /// -/// the square wave. 矩形波 +/// The square wave.
矩形波 ///
public class SquareWave : WaveTypeBase { /// - /// constructor. コンストラクタ + /// Constructor.
コンストラクタ ///
- /// duty cycle. デューティ比 + /// Duty cycle.
デューティ比 public SquareWave(SquareWaveRatio squareWaveRatio) { SquareWaveRatio = squareWaveRatio; @@ -18,7 +19,7 @@ public SquareWave(SquareWaveRatio squareWaveRatio) private SquareWaveRatio SquareWaveRatio { get; } /// - /// デューティ比を基に繰り返し回数を求める為の値 + /// Values to determine the number of repetitions based on duty cycle.
デューティ比を基に繰り返し回数を求める為の値 ///
private static List<(double, double)> Ratio { get; } = [ @@ -48,13 +49,12 @@ internal override WaveTypeBase Clone() } /// - /// Generates one cycle of a sound waveform at the specified frequency.
- /// 指定した周波数の音声波形1周期分を生成する。 + /// Generates one cycle of a sound waveform at the specified frequency.
指定した周波数の音声波形1周期分を生成する。 ///
/// Format of the sound.
音のフォーマット - /// Volume
音量(0 ~ 100) + /// Volume.
音量(0 ~ 100) /// Hertz of the sound.
音の周波数 - /// The array of wave data. + /// The array of wave data.
波形データの配列 : short[]
/// Hertz must be non-negative and greater than 0. /// Volume must be below 100 and above 0. public short[] GenerateUnitWave(SoundFormat format, int volume, double hertz) @@ -68,8 +68,10 @@ private static short[] GenerateUnitWaveInternal(SoundFormat format, int volume, var ratioIndex = (int)squareWaveRatio; var allRepeatTimes = (int)((int)format.SamplingFrequency / hertz); var firstRepeatTimes = (int)(allRepeatTimes * Ratio[ratioIndex].Item1); + // A list is faster than an array for some reason // なぜか配列よりリストの方が早い var result = new List(allRepeatTimes); + // Volume magnification (1.00 ~ 0.00) // 音量の倍率(1.00 ~ 0.00) var volumeMagnification = volume / 100d; diff --git a/src/SoundMaker/Sounds/WaveTypes/TriangleWave.cs b/src/SoundMaker/Sounds/WaveTypes/TriangleWave.cs index 423e011..e061605 100644 --- a/src/SoundMaker/Sounds/WaveTypes/TriangleWave.cs +++ b/src/SoundMaker/Sounds/WaveTypes/TriangleWave.cs @@ -1,6 +1,6 @@ namespace SoundMaker.Sounds.WaveTypes; /// -/// the triangle wave. 三角波 +/// The triangle wave.
三角波 ///
public class TriangleWave : WaveTypeBase { diff --git a/src/SoundMaker/Sounds/WaveTypes/WaveTypeBase.cs b/src/SoundMaker/Sounds/WaveTypes/WaveTypeBase.cs index 0ce732f..70a721f 100644 --- a/src/SoundMaker/Sounds/WaveTypes/WaveTypeBase.cs +++ b/src/SoundMaker/Sounds/WaveTypes/WaveTypeBase.cs @@ -5,7 +5,7 @@ public abstract class WaveTypeBase { /// - /// generate array of wave data. 波形データの配列を生成する。 + /// Generate array of wave data.
波形データの配列を生成する。 ///
/// format of the sound. 音のフォーマット /// length of the array. 配列の長さ diff --git a/src/SoundMaker/WaveFile/BitRateType.cs b/src/SoundMaker/WaveFile/BitRateType.cs index dac1a2b..6935641 100644 --- a/src/SoundMaker/WaveFile/BitRateType.cs +++ b/src/SoundMaker/WaveFile/BitRateType.cs @@ -1,15 +1,15 @@ namespace SoundMaker.WaveFile; /// -/// the type which is expressed quantization bit rate of the sound. 量子化ビット数の種類を表す列挙型 +/// The type which is expressed quantization bit rate of the sound.
量子化ビット数の種類を表す列挙型 ///
public enum BitRateType : ushort { /// - /// 16bit. 16ビット + /// 16bit.
16ビット ///
SixteenBit = 0x0010, /// - /// 8bit. 8ビット + /// 8bit.
8ビット ///
EightBit = 0x0008 } diff --git a/src/SoundMaker/WaveFile/ChannelType.cs b/src/SoundMaker/WaveFile/ChannelType.cs index 6e8204f..a4bda03 100644 --- a/src/SoundMaker/WaveFile/ChannelType.cs +++ b/src/SoundMaker/WaveFile/ChannelType.cs @@ -1,15 +1,15 @@ namespace SoundMaker.WaveFile; /// -/// the type which is expressed channels count of the sound. チャンネル数の種類を表す列挙型 +/// The type which is expressed channels count of the sound.
チャンネル数の種類を表す列挙型 ///
public enum ChannelType : ushort { /// - /// monaural(1ch) モノラル1ch + /// monaural(1ch)
モノラル1ch ///
Monaural = 0x0001, /// - /// stereo(2ch) ステレオ2ch + /// stereo(2ch)
ステレオ2ch ///
Stereo = 0x0002 } \ No newline at end of file diff --git a/src/SoundMaker/WaveFile/FormatChunk.cs b/src/SoundMaker/WaveFile/FormatChunk.cs index 58c7b2c..508e209 100644 --- a/src/SoundMaker/WaveFile/FormatChunk.cs +++ b/src/SoundMaker/WaveFile/FormatChunk.cs @@ -1,15 +1,16 @@ namespace SoundMaker.WaveFile; + /// -/// Chunk of format for the .wav file. フォーマットチャンクを表す構造体 +/// Chunk of format for the .wav file.
フォーマットチャンクを表す構造体 ///
public readonly struct FormatChunk : IChunk { /// - /// constructor. コンストラクタ + /// Constructor.
コンストラクタ ///
- /// sampling frequency. サンプリング周波数 - /// bit rate. 量子化ビット数 - /// type of channels count. チャンネル数 + /// Sampling frequency.
サンプリング周波数 + /// Bit rate.
量子化ビット数 + /// Type of channels count.
チャンネル数 public FormatChunk(SamplingFrequencyType samplingFrequency, BitRateType bitRate, ChannelType channel) { Channel = (ushort)channel; @@ -19,6 +20,7 @@ public FormatChunk(SamplingFrequencyType samplingFrequency, BitRateType bitRate, ByteSizePerSecond = BlockSize * SamplingFrequency; } + // Chunk size is 16 bytes // チャンクサイズは16byte private uint ChankSize { get; } = 0x00000010; @@ -27,7 +29,7 @@ public FormatChunk(SamplingFrequencyType samplingFrequency, BitRateType bitRate, private ushort Channel { get; } /// - /// sampling frequency. サンプリング周波数 + /// Sampling frequency.
サンプリング周波数 ///
public uint SamplingFrequency { get; } @@ -36,14 +38,14 @@ public FormatChunk(SamplingFrequencyType samplingFrequency, BitRateType bitRate, private ushort BlockSize { get; } /// - /// bit rate. 量子化ビット数 + /// Bit rate.
量子化ビット数 ///
public ushort BitRate { get; } /// - /// get array of this chunk. フォーマットチャンクのバイト列を取得するメソッド。 + /// Get array of this chunk.
フォーマットチャンクのバイト列を取得するメソッド。 ///
- /// bytes of this chunk. フォーマットチャンクのバイト列 : byte[] + /// Bytes of this chunk.
フォーマットチャンクのバイト列 : byte[]
public byte[] GetBytes() { var result = BitConverter.GetBytes(0x20746D66); diff --git a/src/SoundMaker/WaveFile/IChunk.cs b/src/SoundMaker/WaveFile/IChunk.cs index 21d465f..e361b5c 100644 --- a/src/SoundMaker/WaveFile/IChunk.cs +++ b/src/SoundMaker/WaveFile/IChunk.cs @@ -1,13 +1,13 @@ namespace SoundMaker.WaveFile; /// -/// interface for riff format chunks チャンクを表すインターフェイス +/// Interface for riff format chunks.
チャンクを表すインターフェイス ///
public interface IChunk { /// - /// get bytes from the chunk. チャンクのバイト列を取得するメソッド。 + /// Get bytes from the chunk.
チャンクのバイト列を取得するメソッド。 ///
- /// byte array of the chunk.チャンクのバイト列 : byte[] + /// Byte array of the chunk.
チャンクのバイト列 : byte[]
byte[] GetBytes(); } diff --git a/src/SoundMaker/WaveFile/RIFFChunk.cs b/src/SoundMaker/WaveFile/RIFFChunk.cs index c5fe5fe..d2d717a 100644 --- a/src/SoundMaker/WaveFile/RIFFChunk.cs +++ b/src/SoundMaker/WaveFile/RIFFChunk.cs @@ -1,19 +1,11 @@ namespace SoundMaker.WaveFile; /// -/// chunk of riff. RIFFチャンクを表す構造体 +/// Chunk of riff.
RIFFチャンクを表す構造体 ///
-public readonly struct RIFFChunk : IChunk +/// The number of 8 byte subtracted from the overall file size.
ファイル全体サイズからRIFFとWAVEのバイト数(8B)を引いた数。 +public readonly struct RIFFChunk(uint Size) : IChunk { - /// - /// constructor. コンストラクタ - /// - /// the number of 8 byte subtracted from the overall file size. ファイル全体サイズからRIFFとWAVEのバイト数(8B)を引いた数。 - public RIFFChunk(uint Size) - { - this.Size = Size; - } - - private uint Size { get; } + private uint Size { get; } = Size; // 0x45564157 は WAVEの意味 private uint Format { get; } = 0x45564157; public byte[] GetBytes() diff --git a/src/SoundMaker/WaveFile/SamplingFrequencyType.cs b/src/SoundMaker/WaveFile/SamplingFrequencyType.cs index a16ae6f..2cab0b2 100644 --- a/src/SoundMaker/WaveFile/SamplingFrequencyType.cs +++ b/src/SoundMaker/WaveFile/SamplingFrequencyType.cs @@ -1,6 +1,6 @@ namespace SoundMaker.WaveFile; /// -/// the type which is expressed sampling frequency of the sound. サンプリング周波数の種類を表す列挙型 +/// The type which is expressed sampling frequency of the sound.
サンプリング周波数の種類を表す列挙型 ///
public enum SamplingFrequencyType : uint { diff --git a/src/SoundMaker/WaveFile/SoundWaveChunk.cs b/src/SoundMaker/WaveFile/SoundWaveChunk.cs index d7bfb2f..1770f96 100644 --- a/src/SoundMaker/WaveFile/SoundWaveChunk.cs +++ b/src/SoundMaker/WaveFile/SoundWaveChunk.cs @@ -1,11 +1,11 @@ namespace SoundMaker.WaveFile; /// -/// chunk of the sound wave. 波形データのチャンクを表すクラス +/// Chunk of the sound wave.
波形データのチャンクを表すクラス ///
public class SoundWaveChunk : IChunk { /// - /// constructor. コンストラクタ + /// Constructor.
コンストラクタ ///
/// 音の波形データの配列 public SoundWaveChunk(byte[] soundWave) @@ -15,7 +15,7 @@ public SoundWaveChunk(byte[] soundWave) } /// - /// size of the wave data. 波形データのサイズ + /// Size of the wave data.
波形データのサイズ ///
public uint Size { get; } diff --git a/src/SoundMaker/WaveFile/WaveWriter.cs b/src/SoundMaker/WaveFile/WaveWriter.cs index a67c66f..a28dc01 100644 --- a/src/SoundMaker/WaveFile/WaveWriter.cs +++ b/src/SoundMaker/WaveFile/WaveWriter.cs @@ -1,17 +1,20 @@ namespace SoundMaker.WaveFile; + /// -/// write to the .wav file. waveファイルに書き込む +/// Write to the .wav file.
waveファイルに書き込む ///
public class WaveWriter { /// - /// constructor. コンストラクタ + /// Constructor.
コンストラクタ ///
- /// format chunk. フォーマットチャンク - /// sound wave chunk. 音声波形のチャンク + /// Format chunk.
フォーマットチャンク + /// Sound wave chunk.
音声波形のチャンク public WaveWriter(FormatChunk format, SoundWaveChunk soundWave) { + // Total file size = audio wave data + 44B // ファイル全体サイズ = 音声波形データ + 44B + // The actual size written to the RIFF chunk is (total file size - the size of the "WAVE" string, which is 8B). // 実際にRIFFチャンクに書き込むのは、(ファイル全体サイズ - "WAVE"の文字列の大きさである8B)になる Chunks.Add(new RIFFChunk(soundWave.Size + 36)); Chunks.Add(format); @@ -21,9 +24,9 @@ public WaveWriter(FormatChunk format, SoundWaveChunk soundWave) private List Chunks { get; } = new(3); /// - /// write to .wav file. .wavファイルに書き込む + /// Write to .wav file.
.wavファイルに書き込む ///
- /// path of .wav file. + /// Path of .wav file.
.wavファイルのパス public void Write(string path) { using var stream = new FileStream(path, FileMode.Create, FileAccess.Write); @@ -31,9 +34,9 @@ public void Write(string path) } /// - /// write to stream. ストリームに書き込む + /// Write to stream.
ストリームに書き込む ///
- /// stream + /// Stream.
ストリーム public void Write(Stream stream) { var writer = new BinaryWriter(stream);