احسب وقت قائمة الحفل للأغاني والحديث
قد يبدو برنامج الحفل مريحًا، لكن تقديم الأغاني والتفاعل مع الجمهور وفترات ضبط الآلات والتقديرات السخية تستهلك الهامش سريعًا.
شغّل الأداة مجانًا
تطبق هذه الحاسبة مدة إجمالية على قائمة أغاني مرتبة، وتحجز وقت الحديث أولًا، ثم توضح بدقة أين يتوقف البرنامج عن الملاءمة. تشمل النتيجة الأغاني المجدولة والدقائق المستخدمة والهامش المتبقي والوقت الإضافي اللازم لأول أغنية مستبعدة، وبذلك يمكنكم مراجعة تقدير عملي للبروفة أو إدخاله في سير عمل آلي.
ابدؤوا بميزانية زمنية واقعية
أدخلوا كامل الدقائق المتاحة ورتبوا الأغاني وفق تسلسل الأداء المخطط. ينبغي أن تعكس مدة كل أغنية نسختها الحية، لا التسجيل الاستوديوي تلقائيًا. احتسبوا النهايات المطولة والمقدمات الموسيقية وتغيرات الإيقاع والتوزيعات التي تطول عادة. أضيفوا حصة إجمالية لتقديم الأغاني والتفاعل وضبط الآلات والاستراحة وأي وقت غير داخل في تقديرات الأغاني. تحجز الحاسبة هذه الحصة قبل إضافة الأغاني، فيظل وقت الحديث ظاهرًا وتكون النتيجة حذرة. يجب أن تكون المدة الإجمالية ومدد الأغاني موجبة، ويمكن أن يكون الحديث صفرًا. تستخدم جميع القيم الدقائق؛ فمثلًا تُدخل أربع دقائق وثلاثون ثانية بالقيمة 4.5. إن إدخالًا واقعيًا أنفع من حساب دقيق مبني على تقديرات متفائلة أكثر من اللازم.
افهموا آلية اختيار الأغاني
تُفحص الأغاني واحدة تلو الأخرى ابتداءً من أول القائمة. لا تُضاف أغنية إلا إذا بقي مجموع الحديث المحجوز والأغاني المقبولة ومدتها ضمن الوقت الإجمالي. يتوقف الحساب فور العثور على أغنية لا تتسع لها المدة، ولا يتجاوزها بحثًا عن أغنية أقصر لاحقة، لأن ذلك سيغير التسلسل الفني دون تصريح. لذلك تمثل القائمة الناتجة أطول جزء متصل من بداية البرنامج يمكن تنفيذه. تعرض الإجابة أيضًا زمن الأغاني والحديث والدقائق المستخدمة والهامش. إذا بقيت أغنية تالية، تُذكر مع الدقائق الإضافية المطلوبة. وإذا اتسعت المدة لجميع الأغاني، يُحذف هذا الحقل الاختياري. وعندما يتجاوز الحديث وحده مدة الحفل، لا تلائم أي أغنية ويظهر الهامش السالب مقدار العجز الحقيقي بدل إخفائه بقيمة صفر.
استخدموا النتيجة في البروفات والإنتاج
تعاملوا مع النتيجة كنقطة مراجعة، ثم حسّنوا التقديرات بقياسات البروفات. قد يختفي هامش صغير بسبب تصفيق طويل أو تبديل آلة أو موعد انتقال صارم يفرضه المكان. من المفيد مقارنة تقدير عادي وآخر حذر يطيل الأغاني والحديث وخطة طوارئ مختصرة. ولأن الترتيب محفوظ، يستطيع الفنانون وإدارة المسرح وفريق الإنتاج مقارنة النسخ بسهولة. يساعد عجز الأغنية التالية في تقرير تقصير الحديث أو التوزيع أو حذف أغنية كاملة. عند الأتمتة، احفظوا النتيجة مع التقديرات الأصلية. تعطي المدخلات نفسها النتيجة ذاتها في المتصفح أو عبر API. تبلغ كلفة الطلب $0.002، وتقدم الأداة حسابًا زمنيًا واضحًا من دون تصوير التحسين الحسابي على أنه توصية فنية.
حالات الاستخدام
إعداد قائمة تناسب موعد المكان
قارنوا البرنامج المرتب بمدة ثابتة مع حجز وقت واضح للحديث والانتقالات.
تجهيز خطة بديلة للمهرجان
قارنوا التقدير العادي بالحذر لتحديد الأغنية التي ينبغي أن ينتهي عندها العرض الضيق.
مراجعة توقيت البروفة
استبدلوا مدد التسجيل بقياسات الأداء الحي وتحققوا من بقاء هامش عملي.
الأسئلة الشائعة
ما كلفة طلب API؟
تبلغ كلفة كل طلب API $0.002. تُحسب النتيجة بصورة حتمية من دون شبكة أو نموذج.
هل تعيد الحاسبة ترتيب الأغاني؟
لا. تحافظ على الترتيب المدخل، وتعيد أطول بداية ملائمة، وتتوقف عند أول أغنية تتجاوز الحد.
كيف تُدخل الدقائق والثواني؟
حوّلوا المدة إلى دقائق عشرية؛ فثلاثون ثانية تساوي 0.5 دقيقة وخمس عشرة ثانية تساوي 0.25 دقيقة.
ماذا تشمل حصة الحديث؟
تشمل تقديم الأغاني والتفاعل وضبط الآلات والاستراحات وأي وقت مخطط لم يدخل في تقديرات الموسيقى.
لماذا قد يكون الهامش سالبًا؟
يحدث ذلك عندما يتجاوز الحديث المحجوز وحده المدة الإجمالية، فيظهر العجز الحقيقي حتى مع عدم ملاءمة أي أغنية.
ماذا يحدث إذا اتسعت المدة لكل الأغاني؟
تتضمن القائمة المجدولة جميع الأغاني، ويبقى الهامش المتاح، ويُحذف الحقل الاختياري الخاص بالأغنية التالية.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/video/concert-setlist-time-budget \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_duration_minutes":45,"songs":[{"title":"Opening Lights","duration_minutes":4.5},{"title":"River Signal","duration_minutes":6.25},{"title":"Midnight Avenue","duration_minutes":5.75},{"title":"Last Train Home","duration_minutes":7}]}'const res = await fetch("https://api.kit.forhosting.com/video/concert-setlist-time-budget", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_duration_minutes": 45,
"songs": [
{
"title": "Opening Lights",
"duration_minutes": 4.5
},
{
"title": "River Signal",
"duration_minutes": 6.25
},
{
"title": "Midnight Avenue",
"duration_minutes": 5.75
},
{
"title": "Last Train Home",
"duration_minutes": 7
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/concert-setlist-time-budget",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_duration_minutes": 45,
"songs": [
{
"title": "Opening Lights",
"duration_minutes": 4.5
},
{
"title": "River Signal",
"duration_minutes": 6.25
},
{
"title": "Midnight Avenue",
"duration_minutes": 5.75
},
{
"title": "Last Train Home",
"duration_minutes": 7
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/concert-setlist-time-budget", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_duration_minutes":45,"songs":[{"title":"Opening Lights","duration_minutes":4.5},{"title":"River Signal","duration_minutes":6.25},{"title":"Midnight Avenue","duration_minutes":5.75},{"title":"Last Train Home","duration_minutes":7}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_duration_minutes":45,"songs":[{"title":"Opening Lights","duration_minutes":4.5},{"title":"River Signal","duration_minutes":6.25},{"title":"Midnight Avenue","duration_minutes":5.75},{"title":"Last Train Home","duration_minutes":7}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/concert-setlist-time-budget", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"total_duration_minutes": 45,
"songs": [
{
"title": "Opening Lights",
"duration_minutes": 4.5
},
{
"title": "River Signal",
"duration_minutes": 6.25
},
{
"title": "Midnight Avenue",
"duration_minutes": 5.75
},
{
"title": "Last Train Home",
"duration_minutes": 7
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.concert_setlist_time_budget",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_items | 500 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |