小さなAPI、本物の音源チップ。

SDKは端末内で音楽を作成・再生し、HTTP APIは公開を担当します。音を出すためのアカウントやサーバーは不要です。

npm i chipvoice

プロジェクトを再生

import { ProjectPlayer } from 'chipvoice';

const player = new ProjectPlayer();
await player.load(project);
playButton.onclick = () => player.play();

player.pause();
player.seek(12);          // Seconds, using the audible clock
player.restart();
await player.update({ chip: 'snes', tempoScale: 1.1 });
player.dispose();         // Closes only contexts it owns

読み込みは取り消し可能なworkerで音声を準備します。失敗・古くなった更新は現在の音楽を維持します。準備後に楽曲内の位置を保って変更を適用します。

読み込み・検証・レンダリング

import { importMidi, projectFromPerformance, validateProject,
  renderProject, toWav } from 'chipvoice';

const project = projectFromPerformance(importMidi(bytes), 'snes');
// Explicitly permit reported hardware voice omissions:
project.settings.allowLoss = true;
console.log(validateProject(project));
const { audio, plan } = renderProject(project); // Node or worker
console.log(plan?.losses, plan?.mix);
const wav = toWav(audio);

Performanceは音符、時刻、表情、楽器を保持します。旧スコアは作者のミックスを保持し、ネイティブ記録は移植するまで元コマンドを維持します。

公開とリミックス

POST /api/v1/projects
Authorization: Bearer YOUR_API_KEY
Idempotency-Key: a-unique-request-id
Content-Type: application/json

{ "project": { ... }, "visibility": "public" }

GET /api/v1/projects?q=orbit&chip=snes
GET /api/v1/projects/PROJECT_ID

// Publish a remix: add "parentId": "PROJECT_ID"
// Immutable preview / complete render jobs:
POST /api/v1/projects/PROJECT_ID/render
{ "kind": "preview" }
GET /api/v1/jobs/JOB_ID

ブラウザーセッションまたはAPIキーで公開します。公開・限定公開・非公開を選択できます。同じ公開要求の再試行時のみ同じリクエストキーを使います。新しい版には新しいIDを割り当てます。

プレビューは最大30秒です。サーバーの全曲書出しは40 MB、処理時間240秒が上限で、超過時は明示的に失敗します。必要に応じて端末内で書き出してください。

OpenAPI仕様

音楽の操作と制約

コンソール、テンポ、移調、パートごとの楽器・音量・重要度を選択できます。ハードウェアの制約による音符の省略や音色の近似は隠さず報告します。

SDKは1曲あたり最大10分、公開プロジェクトは最大4 MBに対応します。公開音声はレンダラーに固定され、新エンジンでの音声は新たに公開します。

ゲーム効果音や独自シーケンスには、引き続きChip、APU、各チップコアを使えます。

SDKの詳細資料
曲を作る