playdate.sound.synth
playdate.sound.synth は、Playdate の音源オブジェクトです。
生成・読み込み
new(sample, sustainStart, sustainEnd)
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
sample |
Sample |
x |
サンプル |
| sustainStart |
integer |
o |
Sustainループの開始 (サンプルフレーム) |
| sustainEnd |
integer |
o |
Sustainループの終端 (サンプルフレーム) sustainStart > 0 のときに省略すると終端になります |
- Sustainループの指定について
- sustainStart / sustainEnd は、サンプル内のサステインループ範囲です。
- 単位は「サンプルフレーム」です。
- 注意点
- サンプルデータは 非圧縮 PCM である必要があります。ADPCM は不可です。
サンプルを音階付きで鳴らす場合、pitch = 261.63、つまり C4 で再生すると元の速度になります。
local sample = playdate.sound.sample.new("sounds/piano")
local synth = playdate.sound.synth.new(sample)
-- サンプルをもとの音階で再生する.
synth:playNote("C4")
new(waveform)
波形または wavetable 用の synth を作成します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
waveform |
integer |
o |
波形定数またはWaveTable |
- 指定可能な波形定数
playdate.sound.kWaveSquare -- 0
playdate.sound.kWaveTriangle -- 1
playdate.sound.kWaveSine -- 2
playdate.sound.kWaveNoise -- 3
playdate.sound.kWaveSawtooth -- 4
playdate.sound.kWavePOPhase -- 5
playdate.sound.kWavePODigital -- 6
playdate.sound.kWavePOVosim -- 7
-- Sine波形を生成.
local synth = playdate.sound.synth.new(playdate.sound.kWaveSine)
-- A4で再生.
synth:playNote(440)
synth:copy()
synth のコピーを返します。
| カテゴリ |
名前 |
型 |
説明 |
| 戻り値 |
- |
playdate.sound.synth |
synthのコピー |
同じ設定の synth を複数用意したい場合に使います。
例えば instrument に複数ボイスを登録したい場合などに便利です。
再生系
synth:playNote(pitch, volume, length, when)
現在設定されている
波形、wavetable、または sample を指定のピッチで再生します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
pitch |
number / string |
x |
ピッチ (Hz) / 音階文字列 |
| volume |
number |
o |
音量 (省略時 "1.0") |
| length |
number |
o |
再生時間 (秒。省略時は noteOff()を呼ぶまで再生) |
| when |
number |
o |
再生開始時刻 (省略時は現在時刻=すぐに再生) playdate.sound.getCurrentTime() を基準にした秒数を指定する |
| 戻り値 |
- |
boolean |
x |
再生できたらtrue |
:再生の例は以下のとおりです。
-- Hz指定で再生.
synth:playNote(261.63) -- C4 (通常再生速度).
synth:playNote(440) -- A4
-- 文字列指定.
synth:playNote("C4")
synth:playNote("Db3")
- pitch = 0
- pitch が 0 の場合、無音のノートを追加するのではなく、noteOff() 相当の動作になります。
- また、synth は現在 1つのノートイベント分のバッファ しか持たない、という注意があります。複数のノートを並べたい場合は Sequence を使うのが適切です。
synth:playMIDINote(note, volume, length, when)
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
note |
number / string |
x |
ノート番号 (C4 は "60") |
| volume |
number |
o |
|
| length |
number |
o |
再生時間 (秒。省略時は noteOff()を呼ぶまで再生) |
| when |
number |
o |
再生開始時刻 (省略時は現在時刻=すぐに再生) playdate.sound.getCurrentTime() を基準にした秒数を指定する |
| 戻り値 |
- |
boolean |
x |
再生できたらtrue |
再生の例は以下の通り。
-- ノート番号指定.
synth:playMIDINote(60) -- C4
synth:playMIDINote(61) -- C#4
-- 小数指定も可能.
synth:playMIDINote(60.5)
-- 音名指定も可能.
synth:playMIDINote("C4")
synth:playMIDINote("Db3")
synth:noteOff()
-- [A:0.01] [D:0.1] [S:0.8] [R:0.5]
synth:setADSR(0.01, 0.1, 0.8, 0.5)
-- C4で再生.
synth:playNote("C4")
-- 0.5秒のreleaseを再生.
synth:noteOff()
この場合、即停止ではなく、0.5 秒の release を経て減衰します。
synth:stop()
synth を即停止します。
noteOff() と違い、エンベロープの release は再生されません。
synth:isPlaying()
synth がまだ再生中かどうかを返します。
| カテゴリ |
名前 |
型 |
説明 |
| 戻り値 |
- |
boolean |
再生中の場合はtrue |
波形・wavetable 設定
synth:setWaveform(waveform)
synth が鳴らす
波形、または sample を設定します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
waveform |
integer / sample |
x |
波形 / Sample? |
- 指定な可能な波形定数
- playdate.sound.kWaveSine
- playdate.sound.kWaveSquare
- playdate.sound.kWaveSawtooth
- playdate.sound.kWaveTriangle
- playdate.sound.kWaveNoise
- playdate.sound.kWavePOPhase
- playdate.sound.kWavePODigital
- playdate.sound.kWavePOVosim
- PO 系波形について
- kWavePOPhase、kWavePODigital、kWavePOVosim は Pocket Operator 風の特殊波形系と考えるとよいです。
- 通常のサイン波・矩形波・ノコギリ波・三角波より、パラメータ操作による音色変化が重要になります。
-- synthを生成.
local synth = playdate.sound.synth.new()
-- 矩形波を設定.
synth:setWaveform(playdate.sound.kWaveSquare)
-- A3で再生.
synth:playNote(220)
synth:setWavetable(sample, samplesize, xsize, ysize)
synth に wavetable を設定します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
sample |
Sample |
x |
sample データは 16-bit mono uncompressed のみ |
| samplesize |
integer |
x |
wavetable の1セル=1波形あたりのサンプル数。 値は2の累乗のみです |
| xsize |
integer |
x |
横方向のセル数 |
| ysize |
integer |
o |
2D wavetable の縦方向セル数です。 省略した場合は1次元テーブルとして扱います |
- 1: x position
- 0 ~ table width
- 2: x position normalized
- 0 ~ 1: 内部で table width にスケールされる
- 3: y position (2D wavetableの場合)
- 0 ~ table height
- 4: y position normalized (2D wavetableの場合)
- 0 ~ 1: 内部で table height にスケールされる
-- Wavetalbeの読み込み.
local wavetableSample = playdate.sound.sample.new("sounds/wavetable")
-- synthを生成.
local synth = playdate.sound.synth.new()
-- サンプル数:256 セル数:16 に設定.
synth:setWavetable(wavetableSample, 256, 16)
-- 横方向の正規化位置は 0.5
synth:setParameter(2, 0.5)
synth:playNote("C4")
synth:setADSR(attack, decay, sustain, release, curvature)
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
attack |
number |
x |
アタック時間 (秒) |
| decay |
number |
x |
ディケイ時間 (秒) |
| sustain |
number |
x |
サステインレベル (0.0 ~ 1.0) |
| release |
number |
x |
リリース時間 (秒) |
| curvature |
number |
o |
エンベロープ形状のカーブ。 0:linear(線形) / 1:exponential(指数) に近い意味で、0から1に近づくほど指数的なカーブになります |
synth:setAttack(time)
attack 時間を秒単位で設定します。
synth:setDecay(time)
decay 時間を秒単位で設定します。
synth:setSustain(level)
sustain レベルを設定します。
サスティンレベルの範囲は通常、0.0 ~ 1.0 です。
synth:setRelease(time)
release 時間を秒単位で設定します。
synth:setEnvelopeCurvature(amount)
エンベロープのカーブ形状を設定します。
0.0から1.0で指定し、0が線形、1が指数関数へ滑らかに変化します。
synth:getEnvelope()
synth の
エンベロープを playdate.sound.envelope オブジェクトとして取得します。
エンベロープを個別オブジェクトとして扱いたい場合に使います。
synth:clearEnvelope()
synth の
エンベロープ設定をクリアします。
ADSR を無効化したい場合に使います。
synth:setLegato(flag)
レガート動作を設定します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
flag |
boolean |
x |
trueでレガートを有効 |
flagをtrue にすると、前のノートが鳴っている間に新しいノートを鳴らした場合、
エンベロープを attack から再開せず、sustain フェーズを維持します。
音量
synth:setVolume(left, right)
synth の音量を設定します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
left |
number |
x |
音量。0.0〜1.0で指定します。 rightが指定されている場合は左側の音量 |
| right |
number |
o |
右側の音量 |
モジュレーション
synth:setAmplitudeMod(signal)
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
signal |
Signal |
o |
シグナル。 nil を渡すとモジュレーターを解除 |
local lfo = playdate.sound.lfo.new()
synth:setAmplitudeMod(lfo)
トレモロのような音量揺れを作る用途です。
synth:setFrequencyMod(signal)
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
signal |
Signal |
o |
シグナル。 nil を渡すとモジュレーターを解除 |
local lfo = playdate.sound.lfo.new()
synth:setFrequencyMod(lfo)
ビブラートやFM的な変化に使います。
synth:setParameter(parameter, value)
synth の内部パラメータを設定します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
parameter |
integer |
x |
1始まりの値 |
| value |
number |
x |
通常は "0.0〜1.0" |
使用中の波形や wavetable によって意味が変わります。
特に wavetable では以下の意味を持ちます。
- 1: x position
- 2: x position normalized
- 3: y position
- 4: y position normalized
synth:setParameterMod(parameter, signal)
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
parameter |
integer |
x |
1始まりの値 |
| signal |
Signal |
x |
シグナル。 nil を渡すとモジュレーターを解除 |
synth:getVolume()
現在の音量を取得します。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 戻り値 |
- |
number |
x |
モノラルの場合は音量。ステレオの場合は左側の音量 |
| right |
number |
o |
モノラルの場合はnil。ステレオの場合は右側の音量 |
コールバック
synth:setFinishCallback(function)
synth の再生が停止したときに呼ばれる関数を設定します。
ノート終了後に状態を更新したい場合などに使います。
| カテゴリ |
名前 |
型 |
省略 |
説明 |
| 引数 |
function |
function |
x |
再生完了時のコールバック関数 |
synth:setFinishCallback(function()
print("finished")
end)
資料
- synth:noteOff()
- release を再生して自然に止まります。
- synth:stop()
- release を無視して即停止します。
どちらも音名文字列は使えます。
synth:playNote("C4")
synth:playMIDINote("C4")
サイン波を鳴らす
local synth = playdate.sound.synth.new(playdate.sound.kWaveSine)
synth:setADSR(0.01, 0.1, 0.8, 0.3)
synth:playNote(440, 1.0, 1.0)
MIDI ノートで鳴らす
local synth = playdate.sound.synth.new(playdate.sound.kWaveSquare)
synth:playMIDINote(60, 0.8, 0.5) -- C4
押している間だけ鳴らす
local synth = playdate.sound.synth.new(playdate.sound.kWaveTriangle)
synth:setADSR(0.01, 0.1, 0.8, 0.2)
function playdate.update()
if playdate.buttonJustPressed(playdate.kButtonA) then
synth:playNote("C4")
end
if playdate.buttonJustReleased(playdate.kButtonA) then
synth:noteOff()
end
end
単純な効果音なら
sampleplayer の方が扱いやすいですが、音程を付けたい、ADSR を使いたい、
LFO で変調したい、wavetable 的に音色を動かしたい場合は playdate.sound.synth が適しています。
関連ページ
最終更新:2026年04月30日 08:08