pretty_midi ドキュメント日本語解説
概要
この記事では、Pythonのpretty_midiライブラリの機能について解説します。
pretty_midiはMIDIデータの生成、編集、解析が可能なライブラリですが、公式のドキュメントが英語のみで提供されているため、日本語話者にも理解しやすいように解説します。
記事の内容は公式のドキュメントに基づきます。
pretty_midiについて
pretty_midiは、MIDIデータを扱うためのユーティリティ関数やクラスを含んでおり、情報を変更したり抽出したりするのに適した形式で提供します。
import pretty_midi
# MIDIファイルをPrettyMIDIオブジェクトに読み込む
midi_data = pretty_midi.PrettyMIDI('example.mid')
# 全体のテンポの推定値を出力
print(midi_data.estimate_tempo())
# 曲全体にわたる各半音の相対的な量を計算する(キーの代わり)
total_velocity = sum(sum(midi_data.get_chroma()))
print([sum(semitone)/total_velocity for semitone in midi_data.get_chroma()])
# 全ての音符を5半音上げる
for instrument in midi_data.instruments:
# ドラムの音はシフトしたくない
if not instrument.is_drum:
for note in instrument.notes:
note.pitch += 5
# 正弦波を使用してMIDIデータを合成する
audio_data = midi_data.synthesize()
import pretty_midi
# PrettyMIDIオブジェクトを作成
cello_c_chord = pretty_midi.PrettyMIDI()
# チェロインストゥルメントのためのInstrumentインスタンスを作成
cello_program = pretty_midi.instrument_name_to_program('Cello')
cello = pretty_midi.Instrument(program=cello_program)
# ノート名を反復処理し、後でノート番号に変換される
for note_name in ['C5', 'E5', 'G5']:
# このノート名のMIDIノート番号を取得
note_number = pretty_midi.note_name_to_number(note_name)
# Noteインスタンスを作成、開始時刻は0秒、終了時刻は0.5秒
note = pretty_midi.Note(velocity=100, pitch=note_number, start=0, end=.5)
# チェロインストゥルメントに追加
cello.notes.append(note)
# PrettyMIDIオブジェクトにチェロインストゥルメントを追加
cello_c_chord.instruments.append(cello)
# MIDIデータを書き出す
cello_c_chord.write('cello-C-chord.mid')
pretty_midi.PrettyMIDI
class pretty_midi.PrettyMIDI(midi_file=None, resolution=220, initial_tempo=120.0)
pretty_midi.PrettyMIDI
は、簡単に操作可能な形式でMIDIデータを格納するためのコンテナです。
-
-
midi_file
(str または file): MIDIファイルへのパス、またはファイルポインタ。デフォルトはNoneで、resolutionとinitial_tempoに与えられた値で空のクラスを作成します。 -
resolution
(int): ファイルが提供されていない場合のMIDIデータの解像度。 -
initial_tempo
(float): ファイルが提供されていない場合のMIDIデータの初期テンポ。
-
-
-
instruments
(list):pretty_midi.Instrument
オブジェクトのリスト。 -
key_signature_changes
(list):pretty_midi.KeySignature
オブジェクトのリスト。 -
time_signature_changes
(list):pretty_midi.TimeSignature
オブジェクトのリスト。 -
lyrics
(list):pretty_midi.Lyric
オブジェクトのリスト。 -
text_events
(list):pretty_midi.Text
オブジェクトのリスト。
-
-
__init__(midi_file=None, resolution=220, initial_tempo=120.0)
ファイルからMIDIデータを読み込んで初期化するか、データなしでゼロから初期化します。
-
get_tempo_changes()
四分音符毎分のテンポ変更とその時間の配列を返します。
-
tempo_change_times
(np.ndarray): テンポが変更される時間(秒単位)。 -
tempi
(np.ndarray):tempo_change_times
の各時点でのテンポ(四分音符毎分)。
-
-
get_end_time()
MIDIオブジェクトの終了時間(すべての楽器/メタイベントの最後のイベントの時間)を返します。
-
end_time
(float): このMIDIファイルが終了する時間(秒単位)。
-
-
estimate_tempi()
テンポと各テンポの確率の経験的推定を返します。Dixon 2001の「Automatic Extraction of Tempo and Beat from Expressive Performance」に基づいています。
-
tempos
(np.ndarray): 推定されたテンポの配列(分毎の拍数)。 -
probabilities
(np.ndarray): 各テンポ推定の確率の配列。
-
-
estimate_tempo()
便宜上、
pretty_midi.PrettyMIDI.estimate_tempi()
から最良のテンポ推定を返します。-
tempo
(float): 推定されたテンポ(bpm)。
-
-
get_beats(start_time=0.0)
MIDIテンポ変更に従って拍の位置のリストを返します。複合拍子(分子が3より大きい3の倍数のもの)の場合、この関数は分母音符の3つごとに1つを返します(例えば、6/8拍子や6/16拍子では、それぞれ8分音符や16分音符の3つごとに1つを返します)。その他の拍子では、分母音符ごとに1つを返します(例えば、3/4拍子や4/4拍子では、四分音符ごとに1つを返します)。
-
start_time
(float): 最初の拍の位置(秒単位)。
-
beats
(np.ndarray): 拍の位置(秒単位)。
-
-
estimate_beat_start(candidates=10, tolerance=0.025)
最初の拍の位置を推定します。最初の数オンセット(音の立ち上がり、音の発生時刻)のうち、オンセットスパイク列(オンセットが発生した時刻にスパイク(とげ)状の信号を並べたもの)と最も相関が高いものに基づいて推定します。
-
candidates
(int): 試す候補オンセットの数。 -
tolerance
(float): 拍として正しいとみなすために使用されるオンセットの周囲の許容秒数。
-
beat_start
(float): 拍の開始位置として選ばれたオフセット。
-
-
get_downbeats(start_time=0.0)
MIDIテンポ変更と拍子変更イベントに従って強拍の位置のリストを返します。
-
start_time
(float): 最初の強拍の位置(秒単位)。
-
downbeats
(np.ndarray): 強拍の位置(秒単位)。
-
-
get_onsets()
すべての楽器のすべての音符のオンセットの時間のソートされたリストを返します。重複するエントリがあるかもしれません。
-
onsets
(np.ndarray): オンセットの位置(秒単位)。
-
-
get_piano_roll(fs=100, times=None, pedal_threshold=64)
MIDIデータのピアノロール行列を計算します。
-
fs
(int): 列のサンプリング周波数。つまり、各列は1./fs秒ごとに間隔を空けて配置されます。 -
times
(np.ndarray): ピアノロールの各列の開始時間。デフォルトはNoneで、np.arange(0, get_end_time(), 1./fs)
です。 -
pedal_threshold
(int): コントロールチェンジ64(サステインペダル)メッセージの値がこの値未満の場合、ペダルオフとして反映されます。ペダルはピアノロールの音符の延長として反映されます。Noneの場合、CC64メッセージは無視されます。デフォルトは64です。
-
piano_roll
(np.ndarray, shape=(128, times.shape)): 楽器を横断して平坦化されたMIDIデータのピアノロール。
-
-
get_pitch_class_histogram(use_duration=False, use_velocity=False, normalize=True)
ピッチクラスのヒストグラムを計算します。
-
use_duration
(bool): ノートの持続時間によって頻度を重み付けします。 -
use_velocity
(bool): ノートのベロシティによって頻度を重み付けします。 -
normalize
(bool): ヒストグラムを正規化して、ビン値の合計が1になるようにします。
-
histogram
(np.ndarray, shape=(12,)): すべてのトラックのピッチクラスのヒストグラム。持続時間またはベロシティによる重み付けがオプションです。
-
-
get_pitch_class_transition_matrix(normalize=False, time_thresh=0.05)
すべての楽器のピッチクラス遷移行列の合計を計算します。ノートの終わりが他の任意のノートの開始から
time_thresh
秒以内の場合に遷移が追加されます。-
normalize
(bool): 行列の合計が1になるように遷移行列を正規化します。 -
time_thresh
(float): 遷移を追加するためのノートの開始と他の任意のノートの終了時間との間の最大時間閾値(秒)。
-
pitch_class_transition_matrix
(np.ndarray, shape=(12,12)): ピッチクラス遷移行列。
-
-
get_chroma(fs=100, times=None, pedal_threshold=64)
クロマベクトルのシーケンスとしてMIDIデータを取得します。
-
fs
(int): 列のサンプリング周波数。つまり、各列は1./fs秒ごとに間隔を空けて配置されます。 -
times
(np.ndarray): ピアノロールの各列の開始時間。デフォルトはNoneで、np.arange(0, get_end_time(), 1./fs)
です。 -
pedal_threshold
(int): コントロールチェンジ64(サステインペダル)メッセージの値がこの値未満の場合、ペダルオフとして反映されます。ペダルはピアノロールの音符の延長として反映されます。Noneの場合、CC64メッセージは無視されます。デフォルトは64です。
-
piano_roll
(np.ndarray, shape=(12, times.shape)): 楽器を横断して平坦化されたMIDIデータのクロマグラム。
-
-
synthesize(fs=44100, wave=<ufunc 'sin'>)
いくつかの波形を使用してパターンを合成します。ドラムトラックは無視されます。
-
fs
(int): 合成されたオーディオ信号のサンプリングレート。 -
wave
(function): 周期的な波形を返す関数。例えば、np.sin
、scipy.signal.square
など。
-
synthesized
(np.ndarray):fs
で合成されたMIDIデータの波形。
-
-
fluidsynth(fs=44100, sf2_path=None)
fluidsynthを使用して合成します。
-
fs
(int): 合成するサンプリングレート。 -
sf2_path
(str): .sf2ファイルへのパス。デフォルトはNoneで、pretty_midiに含まれるTimGM6mb.sf2ファイルを使用します。
-
synthesized
(np.ndarray):fs
で合成されたMIDIデータの波形。
-
-
tick_to_time(tick)
self.__tick_to_time
を使用して絶対ティックから秒単位の時間に変換します。-
tick
(int): 変換する絶対ティック。
-
time
(float): ティックの時間(秒単位)。
-
-
time_to_tick(time)
self._tick_scales
を使用して秒単位の時間から絶対ティックに変換します。-
time
(float): 時間(秒単位)。
-
tick
(int): 提供された時間に対応する絶対ティック。
-
-
adjust_times(original_times, new_times)
MIDIオブジェクトのイベントのタイミングを調整します。
original_times
とnew_times
のパラメータはマッピングを定義し、もしイベントが元々original_times[n]
の時間に発生していた場合、new_times[n]
の時間に発生するように移動されます。イベントがoriginal_times
の時間に正確に発生しない場合、そのタイミングは線形に補間されます。-
original_times
(np.ndarray): マッピング元の時間。 -
new_times
(np.ndarray): マッピング先の新しい時間。
-
-
remove_invalid_notes()
終了時間が開始時間より前または同じであるノートを削除します。
-
write(filename)
MIDIデータを.midファイルに書き出します。
-
filename
(str または file): .midファイルを書き出すパスまたはファイル。
-
pretty_midi.Instrument
class pretty_midi.Instrument(program, is_drum=False, name='')
pretty_midi.Instrument
は、単一のインストゥルメント(楽器)のイベント情報を保持するためのオブジェクトです。
-
-
program
(int): MIDIプログラム番号(インストゥルメントのインデックス)、範囲は[0, 127]です。 -
is_drum
(bool): このインストゥルメントがドラム(チャンネル9)かどうか。 -
name
(str): インストゥルメントの名前。
-
-
-
program
(int): このインストゥルメントのプログラム番号。 -
is_drum
(bool): このインストゥルメントがドラム(チャンネル9)かどうか。 -
name
(str): インストゥルメントの名前。 -
notes
(list):pretty_midi.Note
オブジェクトのリスト。 -
pitch_bends
(list):pretty_midi.PitchBend
オブジェクトのリスト。 -
control_changes
(list):pretty_midi.ControlChange
オブジェクトのリスト。
-
-
__init__(program, is_drum=False, name='')
インストゥルメントを作成します。
-
get_onsets()
このインストゥルメントによって演奏されたすべての音符のオンセットを取得します。重複が含まれる場合があります。
-
onsets
(np.ndarray): すべての音符のオンセットのリスト。
-
-
get_piano_roll(fs=100, times=None, pedal_threshold=64)
このインストゥルメントのピアノロール行列を計算します。
-
fs
(int): 列のサンプリング周波数。つまり、各列は1./fs秒ごとに間隔を空けて配置されます。 -
times
(np.ndarray): ピアノロールの各列の開始時間。デフォルトはNoneで、np.arange(0, get_end_time(), 1./fs)
です。 -
pedal_threshold
(int): コントロールチェンジ64(サステインペダル)メッセージの値がこの値未満の場合、ペダルオフとして反映されます。ペダルはピアノロールの音符の延長として反映されます。Noneの場合、CC64メッセージは無視されます。デフォルトは64です。
-
piano_roll
(np.ndarray, shape=(128, times.shape)): このインストゥルメントのピアノロール。
-
-
get_chroma(fs=100, times=None, pedal_threshold=64)
このインストゥルメントからクロマベクトルのシーケンスを取得します。
-
fs
(int): 列のサンプリング周波数。つまり、各列は1./fs秒ごとに間隔を空けて配置されます。 -
times
(np.ndarray): ピアノロールの各列の開始時間。デフォルトはNoneで、np.arange(0, get_end_time(), 1./fs)
です。 -
pedal_threshold
(int): コントロールチェンジ64(サステインペダル)メッセージの値がこの値未満の場合、ペダルオフとして反映されます。ペダルはピアノロールの音符の延長として反映されます。Noneの場合、CC64メッセージは無視されます。デフォルトは64です。
-
piano_roll
(np.ndarray, shape=(12, times.shape)): このインストゥルメントのクロマグラム。
-
-
get_end_time()
このインストゥルメントのイベントの終了時間を返します。
-
end_time
(float): 最後のイベントの時間(秒単位)。
-
-
get_pitch_class_histogram(use_duration=False, use_velocity=False, normalize=False)
このインストゥルメントのピッチクラスの頻度を計算します。持続時間またはベロシティによる重み付けがオプションです。
-
use_duration
(bool): ノートの持続時間によって頻度を重み付けします。 -
use_velocity
(bool): ノートのベロシティによって頻度を重み付けします。 -
normalize
(bool): ヒストグラムを正規化して、ビン値の合計が1になるようにします。
-
histogram
(np.ndarray, shape=(12,)): 現在のインストゥルメントのピッチクラスのヒストグラム。持続時間またはベロシティによる重み付けがオプションです。
-
-
get_pitch_class_transition_matrix(normalize=False, time_thresh=0.05)
このインストゥルメントのピッチクラス遷移行列を計算します。ノートの終わりが他の任意のノートの開始から
time_thresh
秒以内の場合に遷移が追加されます。-
normalize
(bool): 行列の合計が1になるように遷移行列を正規化します。 -
time_thresh
(float): 遷移を追加するためのノートの開始と他の任意のノートの終了時間との間の最大時間閾値(秒)。
-
transition_matrix
(np.ndarray, shape=(12,12)): ピッチクラス遷移行列。
-
-
remove_invalid_notes()
終了時間が開始時間より前または同じであるノートを削除します。
-
synthesize(fs=44100, wave=<ufunc 'sin'>)
いくつかの波形を使用してインストゥルメントの音符を合成します。ドラムの場合、ゼロを返します。
-
fs
(int): 合成されたオーディオ信号のサンプリングレート。 -
wave
(function): 周期的な波形を返す関数。例えば、np.sin
、scipy.signal.square
など。
-
synthesized
(np.ndarray):fs
で合成されたインストゥルメントの音符の波形。
-
-
fluidsynth(fs=44100, sf2_path=None)
fluidsynthを使用して合成します。
-
fs
(int): 合成するサンプリングレート。 -
sf2_path
(str): .sf2ファイルへのパス。デフォルトはNoneで、pretty_midiに含まれるTimGM6mb.sf2ファイルを使用します。
-
synthesized
(np.ndarray):fs
で合成されたMIDIデータの波形。
-
pretty_midi.Note
class pretty_midi.Note(velocity, pitch, start, end)
pretty_midi.Note
は、ノート(音符)イベントを表します。
-
-
velocity
(int): ノートのベロシティ。 -
pitch
(int): ノートのピッチ。MIDIノート番号として。 -
start
(float): ノートオンの時間。絶対時間で秒単位。 -
end
(float): ノートオフの時間。絶対時間で秒単位。
-
-
__init__(velocity, pitch, start, end)
ノートを作成します。
-
get_duration()
ノートの持続時間を秒単位で取得します。
pretty_midi.PitchBend
class pretty_midi.PitchBend(pitch, time)
pretty_midi.PitchBend
は、ピッチベンドイベントを表します。
-
-
pitch
(int): MIDIピッチベンド量。範囲は[-8192, 8191]。 -
time
(float): ピッチベンドが発生する時間。
-
-
__init__(pitch, time)
ピッチベンドを作成します。
pretty_midi.ControlChange
class pretty_midi.ControlChange(number, value, time)
pretty_midi.ControlChange
は、コントロールチェンジイベントを表します。
-
-
number
(int): コントロールチェンジ番号。範囲は[0, 127]。 -
value
(int): コントロールチェンジの値。範囲は[0, 127]。 -
time
(float): コントロールチェンジが発生する時間。
-
-
__init__(number, value, time)
コントロールチェンジを作成します。
pretty_midi.TimeSignature
class pretty_midi.TimeSignature(numerator, denominator, time)
pretty_midi.TimeSignature
は、拍子記号イベントを格納するコンテナで、拍子記号の分子、分母、イベントの発生時間(秒単位)を含みます。
-
3.14秒で6/8拍子のTimeSignatureオブジェクトをインスタンス化する:
ts = TimeSignature(6, 8, 3.14) print(ts) # 出力: 6/8 at 3.14 seconds
-
-
numerator
(int): 拍子記号の分子。 -
denominator
(int): 拍子記号の分母。 -
time
(float): イベントの発生時間(秒単位)。
-
-
__init__(numerator, denominator, time)
拍子記号を作成します。
pretty_midi.KeySignature
class pretty_midi.KeySignature(key_number, time)
pretty_midi.KeySignature
は、調号とイベントの発生時間(秒単位)を含みます。メジャーとマイナーの調のみをサポートします。
-
3.14秒でC#マイナーのKeySignatureオブジェクトをインスタンス化する:
ks = KeySignature(13, 3.14) print(ks) # 出力: C# minor at 3.14 seconds
-
-
key_number
(int): 調号番号。がメジャー、がマイナー。例えば、0はCメジャー、12はCマイナーです。 -
time
(float): イベントの発生時間(秒単位)。
-
-
__init__(key_number, time)
調号を作成します。
pretty_midi.Lyric
class pretty_midi.Lyric(text, time)
pretty_midi.Lyric
は、タイムスタンプ付きの歌詞テキストを表します。
-
-
text
(str): 歌詞のテキスト。 -
time
(float): 歌詞の発生時間(秒単位)。
-
-
__init__(text, time)
歌詞を作成します。
pretty_midi.Text
class pretty_midi.Text(text, time)
pretty_midi.Text
は、タイムスタンプ付きのテキストイベントを表します。
-
-
text
(str): テキスト。 -
time
(float): イベントが発生する時間(秒単位)。
-
-
__init__(text, time)
テキストイベントを作成します。
ユーティリティ関数
-
pretty_midi.key_number_to_key_name(key_number)
キー番号をキー文字列に変換します。
-
key_number
(int): メジャーとマイナーのキーを表すためにピッチクラスを使用します。マイナーキーの場合は12のオフセットを加えます。例えば、Cメジャーは0、Cマイナーは12です。
-
key_name
(str): '(root) (mode)'の形式でキー名を返します。例: 'Gb minor'。F#、G#、C#マイナーを除いて、フラットを優先します。
-
-
pretty_midi.key_name_to_key_number(key_string)
キー名の文字列をキー番号に変換します。
-
key_string
(str): '(root) (mode)'の形式です。ここで、-
(root)
は ABCDEFG または abcdefg のいずれかです。小文字のrootはモード文字列が指定されていない場合にマイナーキーを示します。オプションでシャープを示す#またはフラットを示すbが指定できます。 -
(mode)
はオプションで、メジャーの場合は ‘M’, ‘Maj’, ‘Major’, ‘maj’, ‘major’、マイナーの場合は ‘m’, ‘Min’, ‘Minor’, ‘min’, ‘minor’ のいずれかです。モードが指定されていない場合、rootが大文字ならメジャー、小文字ならマイナーと見なされます。
-
-
key_number
(int): キーとそのモードを表す整数。0から11はCからBのメジャーキー、12から23はCからBのマイナーキーを表します。
-
-
pretty_midi.mode_accidentals_to_key_number(mode, num_accidentals)
変化記号の数とモードをキー番号に変換します。
-
mode
(int): 0はメジャー、1はマイナーです。 -
num_accidentals
(int): シャープの場合は正の数、フラットの場合は負の数を使用します。
-
key_number
(int): キーとそのモードを表す整数。
-
-
pretty_midi.key_number_to_mode_accidentals(key_number)
キー番号を変化記号の数とモードに変換します。
-
key_number
(int): pretty_midiで使用されるキー番号。
-
mode
(int): 0はメジャー、1はマイナーです。 -
num_accidentals
(int): 変化記号の数。正はシャープ、負はフラットです。
-
-
pretty_midi.qpm_to_bpm(quarter_note_tempo, numerator, denominator)
四分音符毎分から分毎の拍数に変換します。
-
quarter_note_tempo
(float): 四分音符のテンポ。 -
numerator
(int): 拍子の分子。 -
denominator
(int): 拍子の分母。
-
bpm
(float): 分毎の拍数。
-
-
pretty_midi.note_number_to_hz(note_number)
MIDIノート番号をその周波数(Hz)に変換します。
-
note_number
(float): MIDIノート番号。小数も可能です。
-
note_frequency
(float): ノートの周波数(Hz)。
-
-
pretty_midi.hz_to_note_number(frequency)
周波数(Hz)をMIDIノート番号に変換します。
-
frequency
(float): ノートの周波数(Hz)。
-
note_number
(float): MIDIノート番号。小数も可能です。
-
-
pretty_midi.note_name_to_number(note_name)
ノート名(例: 'C#4')をMIDIノート番号に変換します。
-
note_name
(str): 上記の形式で説明されたノート名。
-
note_number
(int): 提供されたノート名に対応するMIDIノート番号。
-
-
pretty_midi.note_number_to_name(note_number)
MIDIノート番号をその名前に変換します(例: 'C#4')。
-
note_number
(int): MIDIノート番号。整数でない場合は四捨五入されます。
-
note_name
(str): 提供されたMIDIノート番号の名前。
-
-
pretty_midi.note_number_to_drum_name(note_number)
打楽器のMIDIノート番号を対応するドラム名に変換します。
-
note_number
(int): MIDIノート番号。整数でない場合は四捨五入されます。
-
drum_name
(str): このノートの打楽器のドラム名。
-
-
pretty_midi.drum_name_to_note_number(drum_name)
ドラム名を対応する打楽器のMIDIノート番号に変換します。
-
drum_name
(str): 一般的なMIDI標準に存在するドラムの名前。ドラムが見つからない場合はValueErrorが発生します。
-
note_number
(int): このドラムに対応するMIDIノート番号。
-
-
pretty_midi.program_to_instrument_name(program_number)
MIDIプログラム番号を対応する一般的なMIDI楽器名に変換します。
-
program_number
(int): MIDIプログラム番号。0から127の範囲です。
-
instrument_name
(str): このプログラム番号に対応する楽器の名前。
-
-
pretty_midi.instrument_name_to_program(instrument_name)
楽器名を対応する一般的なMIDIプログラム番号に変換します。
-
instrument_name
(str): 一般的なMIDI標準に存在する楽器の名前。楽器が見つからない場合はValueErrorが発生します。
-
program_number
(int): この楽器に対応するMIDIプログラム番号。
-
-
pretty_midi.program_to_instrument_class(program_number)
MIDIプログラム番号を対応する一般的なMIDI楽器クラスに変換します。
-
program_number
(int): MIDIプログラム番号。0から127の範囲です。
-
instrument_class
(str): このプログラム番号に対応する楽器クラスの名前。
-
-
pretty_midi.pitch_bend_to_semitones(pitch_bend, semitone_range=2.0)
MIDIピッチベンド値をセミトーン数に変換します。
-
pitch_bend
(int): MIDIピッチベンド量。[-8192, 8191]の範囲です。 -
semitone_range
(float): +/-このセミトーン範囲に変換します。デフォルトは2.0で、一般的なMIDI標準の+/-2セミトーン範囲です。
-
semitones
(float): このピッチベンド量に対応するセミトーン数。
-
-
pretty_midi.semitones_to_pitch_bend(semitones, semitone_range=2.0)
セミトーン値を対応するMIDIピッチベンド整数に変換します。
-
semitones
(float): ピッチベンドのセミトーン数。 -
semitone_range
(float): +/-このセミトーン範囲に変換します。デフォルトは2.0で、一般的なMIDI標準の+/-2セミトーン範囲です。
-
pitch_bend
(int): MIDIピッチベンド量。[-8192, 8191]の範囲です。
-
Discussion