アットウィキロゴ

playdate.sound.synth

playdate.sound.synth は、Playdate の音源オブジェクトです。
  • 基本波形
  • wavetable
  • Sample
  • PCM サンプルを音階付きで再生する簡易サンプラー的な音源
さらに _SoundSource 系の音源なので、単体でノートを鳴らすだけでなく、InstrumentsTrack / Sequence と組み合わせて使うことも可能です。


生成・読み込み

new(sample, sustainStart, sustainEnd)
Sample を鳴らす synth を作成します。
カテゴリ 名前 省略 説明
引数 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)
playNote() とほぼ同じですが、MIDI ノート番号または音名で指定します。
カテゴリ 名前 省略 説明
引数 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()
playNote() / playMIDINote() により現在鳴っているノートをリリースします。
stop() と違い、エンベロープの release 部分を再生します。
-- [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
noteOff() 後に release が残っている場合も「再生中」と見なされます。

波形・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次元テーブルとして扱います
wavetable 内の位置は setParameter() または setParameterMod() で制御します。
パラメータは以下のとおりです。
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)
ADSR エンベロープをまとめて設定します。

カテゴリ 名前 省略 説明
引数 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 オブジェクトとして取得します。
エンベロープを個別オブジェクトとして扱いたい場合に使います。
カテゴリ 名前 説明
戻り値 - Envelop エンベロープ
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 Signal o シグナル。
nil を渡すとモジュレーターを解除
local lfo = playdate.sound.lfo.new()
synth:setAmplitudeMod(lfo)
 
トレモロのような音量揺れを作る用途です。

synth:setFrequencyMod(signal)
周波数を変調する 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)
指定パラメータを 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)
 

資料

noteOff()stop() の違い
synth:noteOff()
release を再生して自然に止まります。
synth:stop()
release を無視して即停止します。

音楽的には noteOff()、強制停止には stop() です。
playNote()playMIDINote() の違い
:synth:playNote(440)
Hz 指定です。
:synth:playMIDINote(69)
MIDIノート番号指定です。

どちらも音名文字列は使えます。
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