Skip to main content
المشاريع هي المورد الأعلى مستوى في Youka. يمتلك كل مشروع ملفه المصدر، والمسارات المفصولة (stems)، وكلمات الأغاني المتزامنة، وعمليات التصدير، وإعدادات المشروع.

إنشاء مشروع

في معظم الحالات، استخدم client.projects.create() — فهو يتولى رفع الملفات نيابةً عنك.
const operation = await client.projects.create({
  source: { type: "path", path: "./song.mp3" },
  lyricsSource: { type: "transcribe" },
});
// => ProjectOperation

أنواع المصدر

يقرأ ملفًا من القرص.
source: {
  type: "path",
  path: "./song.mp3",
  contentType: "audio/mpeg", // optional, inferred if omitted
}

حقول أخرى

title
string
عنوان المشروع. القيمة الافتراضية هي اسم ملف المصدر.
splitModel
SplitModel
نموذج فصل المسارات (stems). الافتراضي هو mdx23c. راجع مرجع نموذج الفصل.
presetId
string
تطبيق إعداد مسبق قابل لإعادة الاستخدام وقت الإنشاء.
lyricsSource
LyricsSource
إعداد مزامنة الكلمات. انظر أدناه.

مصادر الكلمات

// Transcribe lyrics from the audio
lyricsSource: {
  type: "transcribe",
  syncModel: "audioshake-transcription", // optional
  language: "en",                        // optional
}

// Align exact lyrics to the audio
lyricsSource: {
  type: "align",
  lyrics: "First line\nSecond line\n...",
  syncModel: "audioshake-alignment",
}

client.projects.create(input, options?)

يدعم client.projects.create() أيضًا مصدرًا منخفض المستوى من نوع inputFile عندما يكون لديك بالفعل inputFileId لملف تم رفعه مسبقًا.
const upload = await client.uploads.create({
  filename: "song.mp3",
  contentType: "audio/mpeg",
  contentLength: buffer.byteLength,
});

await client.uploads.upload(upload.uploadUrl, buffer, {
  contentType: "audio/mpeg",
});

const operation = await client.projects.create({
  source: {
    type: "inputFile",
    inputFileId: upload.inputFileId,
    filename: "song.mp3",
  },
  title: "My Song",
});

client.projects.quote(input, options?)

احسب رصيد الاعتمادات المطلوب لإنشاء مشروع دون إنشائه.
const quote = await client.projects.quote({
  source: { type: "path", path: "./song.mp3" },
  lyricsSource: { type: "transcribe", language: "en" },
  splitModel: "mdx23c",
});

console.log(quote.creditsRequired, quote.sufficientBalance);
يقبل client.projects.quote(...) نفس أشكال source التي يقبلها client.projects.create(...)، بما في ذلك maxVideoQuality لمصادر URL. إذا كنت تعرف مدة الوسائط مسبقًا ولا تريد رفع الملف فقط لغرض التسعير، مرّر الشكل منخفض المستوى الخاص بـ REST:
const quote = await client.projects.quote({
  durationSeconds: 210,
  lyricsSource: null,
  splitModel: "mdx23c",
});

client.uploads.create(body, options?)

خصّص خانة رفع واحصل على عنوان URL موقّع.
const upload = await client.uploads.create({
  filename: "song.mp3",
  contentType: "audio/mpeg",
  contentLength: 4_521_344,
});
// => { inputFileId, uploadUrl }

client.uploads.upload(uploadUrl, body, options?)

نفّذ PUT لبايتات الملف إلى عنوان URL الموقّع.
await client.uploads.upload(upload.uploadUrl, fileBuffer, {
  contentType: "audio/mpeg",
  signal: abortController.signal,
});
body
FetchBody
required
أي جسم متوافق مع fetch: Blob, File, ArrayBuffer, Uint8Array, ReadableStream, أو string.
يرمي YoukaRequestError بالرمز UPLOAD_FAILED إذا أعادت عملية الرفع حالة ليست 2xx.

client.projects.get(projectId, options?)

اجلب حالة المشروع كاملة، بما في ذلك المسارات (stems) والكلمات وعمليات التصدير.
const project = await client.projects.get("prj_abc123");
console.log(project.title, project.stems, project.lyrics);

client.projects.update(projectId, body, options?)

طبّق Patch على بيانات تعريف المشروع.
const project = await client.projects.update("prj_abc123", {
  title: "Updated title",
  artists: ["Artist name"],
});
مرّر واحدًا على الأقل من title أو artists.

client.projects.list(options?)

اعرض كل مشروع مملوك للحساب الذي تمّت مصادقته.
const projects = await client.projects.list();
projects.forEach((p) => console.log(p.id, p.title));
يعيد مصفوفة من عناصر قائمة المشاريع (ببنية أخف من getProject).

client.projects.delete(projectId, options?)

احذف مشروعًا وكل ما يرتبط به من مسارات (stems) وكلمات وعمليات تصدير.
await client.projects.delete("prj_abc123", {
  idempotencyKey: "delete-prj_abc123",
});
الحذف نهائي. اربطه بمفتاح idempotency لكي تكون إعادة المحاولة آمنة.

ما التالي