
প্রকল্পটি কোন সমস্যার সমাধান করে
এই প্রকল্পটি বাক্স খুলেই ব্যবহার করা যায় এমন কোনো সফটওয়্যার প্যাকেজ নয়; এটি বাস্তব অডিশন ও পুনরাবৃত্ত পরীক্ষার মাধ্যমে তৈরি AI কণ্ঠস্বর প্রযোজনার একটি পদ্ধতি। এটি কয়েকটি সাধারণ সমস্যাকে লক্ষ্য করে: নিঃশ্বাসের শব্দ নীরবতার মধ্যে বিচ্ছিন্নভাবে পড়ে থাকা, নিঃশ্বাস ও সংলাপের মধ্যে অতিরিক্ত দীর্ঘ বিরতি, বিরতির পর কণ্ঠস্বর হঠাৎ আনুষ্ঠানিক হয়ে যাওয়া, মডেলের একই বাক্য বারবার বলা বা বাদ দেওয়া, এবং সংলাপ কেটে ফেলার পর পরিবেশের শব্দ স্বাভাবিকভাবে মিলতে না পারা।
সম্পূর্ণ প্রক্রিয়াটি চারটি বিষয়কে কেন্দ্র করে: ElevenLabs v4 দিয়ে কণ্ঠস্বর তৈরি করা, ffmpeg দিয়ে অডিও প্রক্রিয়াকরণ, Whisper দিয়ে ট্রান্সক্রাইব করে বিষয়বস্তু যাচাই করা, এবং NumPy দিয়ে শব্দের মাত্রা, পিচ ও স্যাম্পল অবস্থান বিশ্লেষণ করা।
মূল সিদ্ধান্তটি “আরও নিঃশ্বাস যোগ করা” নয়, বরং “নিঃশ্বাসকে সঠিক জায়গায় রাখা”: মুখ খোলার আগে সংক্ষিপ্ত নিঃশ্বাসটি প্রথম শব্দের কাছাকাছি থাকবে, বাক্যের শেষে স্বাভাবিকভাবে নিঃশ্বাস বের হবে, আর বাক্যের মাঝের শ্বাস নেওয়া অর্ধবাক্যের মধ্যে রাখা হবে।
প্রধান সক্ষমতা ও পদ্ধতি
- সংলাপের কাছে নিঃশ্বাস: কথা শুরুর আগে হালকা ও সংক্ষিপ্ত নিঃশ্বাস শনাক্ত করে শুধু নীরবতার অবস্থান বদলানো, যাতে নিঃশ্বাসটি সংলাপ থেকে প্রায় 0.08 সেকেন্ড দূরে থাকে।
- হঠাৎ শব্দমাত্রা সংশোধন: প্রতিটি শব্দযুক্ত ব্লকের মাত্রা মেপে, মধ্যকের চেয়ে 4 dB-এর বেশি উঁচু ব্লককে পরিমিতভাবে কমিয়ে আনা।
- ক্ষতিহীনভাবে বাক্য কাটা: শুষ্ক কণ্ঠের নীরব অংশ থেকে কেটে আবার লুপ করা পরিবেশের শব্দ বসানো, যাতে আগে গ্রহণযোগ্য বলে বিবেচিত অভিনয়টি যতটা সম্ভব অক্ষুণ্ণ থাকে।
- পুনরাবৃত্তি ও বাদ পড়া শনাক্তকরণ: সংশ্লেষণের পর Whisper দিয়ে ট্রান্সক্রাইব করে “যা শোনা গেছে” এবং “যা বলা উচিত ছিল” তুলনা করা, অস্বাভাবিকতা দেখা দিলে পুনরায় তৈরি করা।
- অ্যাকশন ও শব্দের সমন্বয়: শব্দের চিহ্নটি সংলাপের একটি রাউন্ডের শুরুতে একসঙ্গে না রেখে, অ্যাকশন সত্যিই যে বাক্যে শুরু হয় সেই বাক্যে লেখা।
- দৈনন্দিন কণ্ঠস্বর তৈরি: শুধু কণ্ঠ নরম করা নয়; চরিত্রের গতি, পিচ, আত্মবিশ্বাসের মাত্রা ও বলার অভ্যাস স্পষ্টভাবে নির্ধারণ করা।
পরিবেশ প্রস্তুতি
প্রয়োজনীয় সরঞ্জাম
- ElevenLabs v4: টেক্সট-টু-স্পিচের জন্য। প্রকল্পে বাস্তব পরীক্ষায় v4 ব্যবহার করা হয়েছে।
- ffmpeg: অডিও ডিকোড, কাটা, জোড়া, পুনরায় স্যাম্পল করা ও রপ্তানির জন্য।
- Whisper: তৈরি ফলাফল আবার ট্রান্সক্রাইব করে পুনরাবৃত্তি, বাদ পড়া বাক্য ও বিষয়বস্তুর বিচ্যুতি শনাক্ত করতে।
- NumPy: অডিও অ্যারে প্রক্রিয়াকরণ, ক্রস-করেলেশন, শব্দমাত্রা গণনা ও অংশ সরানোর জন্য।
README-তে পরীক্ষিত পরিবেশ হলো macOS। এতে কোনো নির্দিষ্ট ইনস্টলেশন স্ক্রিপ্ট নেই, তাই প্রতিটি সরঞ্জামের সরকারি নির্দেশনা অনুযায়ী আলাদাভাবে ইনস্টল করতে হবে এবং ffmpeg, Whisper ও Python পরিবেশ ঠিকভাবে চলছে কি না নিশ্চিত করতে হবে।
বিশ্লেষণ শুরু করার আগে অডিওকে একই স্যাম্পল রেটের মনো তরঙ্গে ডিকোড করতে হবে এবং নির্দিষ্ট ধাপের ব্যবধানে গণনা করা দুই সেট ডেটা প্রস্তুত করতে হবে: প্রতি ফ্রেমের পিচ f0 এবং প্রতি ফ্রেমের রুট-মিন-স্কোয়ার শব্দমাত্রা rms। মূল প্রক্রিয়ায় ফ্রেম ধাপ ছিল 10 মিলিসেকেন্ড; শব্দমাত্রা বিশ্লেষণের উইন্ডো সীমানাকে কয়েক দশ মিলিসেকেন্ড অস্পষ্ট করে, তাই অংশ সরানোর সময় সামান্য অতিরিক্ত মার্জিন রাখতে হবে।
সবসময় দুইটি কণ্ঠ সংস্করণ সংরক্ষণ করুন
প্রতিবার তৈরি করার পর নিচের সংস্করণগুলো সংরক্ষণ করুন:
- শুষ্ক কণ্ঠ: শুধু মানুষের কণ্ঠ, কোনো পরিবেশ বা অ্যাকশনের শব্দ ছাড়া।
- ভেজা কণ্ঠ: কণ্ঠের নিচে পরিবেশের শব্দ বসানো চূড়ান্ত সংস্করণ।
শুষ্ক কণ্ঠ শুধু নিঃশ্বাস মাপার জন্যই সুবিধাজনক নয়; পরে কোনো বাক্য মুছে ফেলা, কোনো অংশ বদলানো বা নতুন করে ব্যাকগ্রাউন্ড বসানোর সময়ও এটি মূল অভিনয়টি ধরে রাখতে সাহায্য করে। শুধু শেষের মিক্সড ফলাফল সংরক্ষণ করবেন না।
প্রথম ধাপ: নিঃশ্বাসের প্রম্পট সঠিকভাবে লেখা
দীর্ঘ নীরবতার মাঝে “উম”, “হা” বা নিঃশ্বাসের ট্যাগ একেকটি আলাদা লাইনে বসাবেন না। এভাবে তৈরি কণ্ঠে প্রায়ই স্পষ্ট পিচ থাকে, শব্দমাত্রা স্বাভাবিক কথার কাছাকাছি হয় এবং আগে-পরে দীর্ঘ মৃত নীরবতা থাকে; ফলে এটি আলাদা সাউন্ড এফেক্টের মতো শোনে।
নিঃশ্বাসটি সংলাপের একই লাইনে লেখাই ভালো:
[low, breathy, wet]
[inhales] আমার দিকে তাকাও… [exhales]
[long pause]
উম… লুকিও না… উম…হা…- লাইনের শুরুতে শুধু ছোট নিঃশ্বাসের ট্যাগ ব্যবহার করুন, যেমন
[inhales],[exhales]বা[sighs]। - ট্যাগ ও সংলাপের মাঝে আবার একগুচ্ছ ডট দেবেন না।
- বাক্যের শেষে স্বাভাবিকভাবে একটি নিঃশ্বাস বা পরপর দুই-তিনটি হালকা স্বরধ্বনি যোগ করা যায়।
- ফাঁকা অংশে শুধু এক লাইন
[long pause]লিখুন; সেখানে আলাদা গুনগুন শব্দ সাজাবেন না। - বাক্যের মাঝেও শ্বাস নেওয়া যোগ করা যায়; একটি বাক্যে শুরু, মাঝ ও শেষ থেকে এক বা দুইটি অবস্থান বেছে নিলেই যথেষ্ট।
পরপর দুটি [long pause] লিখলেই বিরতি স্পষ্টভাবে দ্বিগুণ হবে, এমন নয়। প্রকল্পের পরীক্ষায় একটি ট্যাগ প্রায় 0.96 সেকেন্ড নীরবতা তৈরি করেছে, আর পরপর দুটি তৈরি করেছে প্রায় 1.04 সেকেন্ড। তাই ট্যাগের আক্ষরিক লেখার ওপর নির্ভুল সময় নিয়ন্ত্রণের দায়িত্ব দেবেন না।
দ্বিতীয় ধাপ: শব্দকে মাপযোগ্য “ব্লকে” ভাগ করা
এখানে “ব্লক” বলতে ধারাবাহিক শব্দযুক্ত একটি অংশ বোঝানো হয়েছে। প্রতিটি ব্লকের তিনটি সূচক মাপুন: স্থায়িত্ব, গড় শব্দমাত্রা এবং পিচ থাকা ফ্রেমের অনুপাত। এগুলো স্বাভাবিক সংলাপ, প্রকৃত নিঃশ্বাস এবং পিচযুক্ত আলাদা গুনগুন শব্দের মধ্যে পার্থক্য করতে সাহায্য করে।
def is_breath(f0, rms, a, b):
dur = (b - a) * 0.01
voiced = (f0[a:b] > 0).mean()
db = 20 * np.log10(rms[a:b].mean() + 1e-9)
return 0.12 <= dur <= 0.9 and voiced < 0.15 and db < -29মূল প্রকল্পের সাধারণ পরিসরগুলো হলো:
- নিচু ও শ্বাসময় সংলাপ: প্রায় 0.5 থেকে 2 সেকেন্ড, শব্দমাত্রা প্রায় −22 থেকে −27 dB, পিচযুক্ত ফ্রেম প্রায় এক-পঞ্চমাংশ থেকে দুই-পঞ্চমাংশ।
- শ্বাস নেওয়া, ছাড়া বা হিসহিস শব্দ: প্রায় 0.3 থেকে 0.65 সেকেন্ড, শব্দমাত্রা প্রায় −32 থেকে −40 dB, পিচযুক্ত ফ্রেম প্রায় এক-দশমাংশ।
- বিচ্ছিন্ন আলাদা গুনগুন শব্দ: প্রায় 0.4 থেকে 0.5 সেকেন্ড, শব্দমাত্রা −25 dB পর্যন্ত হতে পারে, পিচযুক্ত ফ্রেম 60%-এর বেশি, এবং আগে-পরে প্রায় 0.6 থেকে 1 সেকেন্ড নীরবতা থাকে।
এই সীমাগুলো নির্দিষ্ট কণ্ঠস্বর ও নমুনা থেকে এসেছে; সব ধরনের কণ্ঠের জন্য এগুলোকে সার্বজনীন মানদণ্ড ধরা যাবে না। আরও নির্ভরযোগ্য পদ্ধতি হলো, আগে শ্রোতাকে সমস্যা চিহ্নিত করতে দেওয়া, তারপর কাছাকাছি স্বাভাবিক অংশ ব্যবহার করে সেই কণ্ঠস্বরের নিজস্ব পরিসর তৈরি করা।
তৃতীয় ধাপ: মুখ খোলার আগের নিঃশ্বাসকে সংলাপের কাছে আনা
প্রম্পট সঠিকভাবে লেখা হলেও মডেল নিঃশ্বাস ও সংলাপের মধ্যে নিজে থেকেই 0.3 সেকেন্ড বা তারও বেশি নীরবতা রেখে দিতে পারে। প্রম্পট দিয়ে কয়েক দশ মিলিসেকেন্ডের অবস্থান নিয়ন্ত্রণ করা কঠিন, তাই তৈরি হওয়ার পর অডিও অংশ সরাতে হবে।
প্রক্রিয়ার আগে ও পরের কাঠামো এভাবে বোঝা যায়:
প্রক্রিয়ার আগে: আগের বাক্য → নীরবতা A → নিঃশ্বাস → নীরবতা B → পরের বাক্য
প্রক্রিয়ার পরে: আগের বাক্য → দীর্ঘতর নীরবতা → নিঃশ্বাস → 0.08 সেকেন্ড → পরের বাক্যএ সময় শুধু নিঃশ্বাস ও নীরবতার অবস্থান অদলবদল করুন; নিঃশ্বাস বা সংলাপ নিজে বদলাবেন না এবং পুরো অংশের মোট সময়ও বদলাবেন না। এতে বিদ্যমান টাইমলাইন, শব্দ বসানোর বিন্যাস ও বলার গতির পরিসংখ্যান অক্ষুণ্ণ থাকবে।
সরানোর উপযুক্ত প্রার্থী ব্লকের বৈশিষ্ট্য:
- এটি হালকা, সংক্ষিপ্ত এবং স্পষ্ট পিচহীন নিঃশ্বাস হিসেবে শনাক্ত হয়েছে।
- এর পরের প্রায় 0.14 থেকে 1.5 সেকেন্ডের মধ্যে একটি কথ্য ব্লক আছে।
- এর আগে অন্তত প্রায় 0.3 সেকেন্ড ফাঁকা অংশ আছে।
- বাক্যের মাঝখানে ঠিক আগের অর্ধবাক্যের সঙ্গে যুক্ত শ্বাস সরাবেন না, যাতে স্বাভাবিক বাক্যমধ্যের শ্বাস নষ্ট না হয়।
README-র পরীক্ষিত লক্ষ্য ব্যবধান প্রায় 0.08 সেকেন্ড। সরানোর সময় নিঃশ্বাসের শুরুতে প্রায় 0.02 সেকেন্ড এবং শেষে প্রায় 0.03 সেকেন্ড অতিরিক্ত অংশ রাখা যায়; নতুন অবস্থানে জোড়ার অনুভূতি কমাতে শুরু ও শেষে প্রায় 4 মিলিসেকেন্ড ফেড দিন।
চতুর্থ ধাপ: বিরতির পরের “অতিরিক্ত আনুষ্ঠানিক স্বর” সংশোধন
কিছু কণ্ঠ দীর্ঘ বিরতির পর আরও স্পষ্ট, জোরালো এবং কম শ্বাসময় স্বাভাবিক কথার অবস্থায় ফিরে যায়। উদাহরণে অস্বাভাবিক ছোট বাক্যটি আশেপাশের বিষয়বস্তুর চেয়ে 6 dB-এর বেশি জোরালো ছিল এবং পিচযুক্ত ফ্রেমের অনুপাতও প্রায় 30% থেকে 60%-এ বেড়েছিল।
প্রথমে প্রম্পট দিয়ে ঘটার সম্ভাবনা কমান
- বিরতির পর প্রথমে একটি নিঃশ্বাস দিন, অথবা নিচু গুনগুন শব্দের মাধ্যমে সংলাপে প্রবেশ করুন।
- বাক্যের শেষে টেনে শেষ করার ভঙ্গি ব্যবহার করুন; প্রতিবার স্পষ্ট প্রশ্নবোধক বা পূর্ণচ্ছেদে শেষ করবেন না।
- দুই-তিন শব্দের ছোট বাক্য পাশের বাক্যের সঙ্গে মিলিয়ে দিন, যাতে সেটি আলাদাভাবে স্পষ্ট ঘোষণার স্বরে পড়া না হয়।
- কণ্ঠস্বর আবার জোর দিতে হলে ছোট ট্যাগটি কথার শুরুতে বসান, সবসময় আলাদা লাইনে নয়।
[long pause]
উম… [low, breathy] লুকিও না…সেগমেন্টার যদি প্রতিটি লাইনের শুরুতে থাকা কণ্ঠস্বরের ট্যাগে নতুন অংশ তৈরি করে, তাহলে লাইনের ভেতরে এভাবে লেখা জোড় ও পিচের হঠাৎ পরিবর্তন কমাতেও সাহায্য করবে।
তারপর প্রোগ্রাম দিয়ে অস্বাভাবিক শব্দমাত্রা কমান
প্রতিটি ব্লকের শব্দমাত্রা গণনা করে বর্তমান অনুচ্ছেদের সব কথ্য ব্লকের মধ্যককে রেফারেন্স হিসেবে নিন। কোনো ব্লক 4 dB-এর বেশি উঁচু হলে সেটিকে এমনভাবে কমান যাতে এটি মাত্র প্রায় 2 dB বেশি থাকে; সর্বোচ্চ 6 dB কমান এবং শুরু ও শেষে প্রায় 25 মিলিসেকেন্ডের গ্রেডিয়েন্ট এনভেলপ ব্যবহার করুন।
বাক্য ধরে নয়, অবশ্যই ব্লক ধরে মাপতে হবে। আধা সেকেন্ডের ক্ষণিক জোরালো অংশ পরের দীর্ঘ বাক্যের সঙ্গে মিশিয়ে গড় নিলে 6 dB-এর অস্বাভাবিকতা থ্রেশহোল্ডের নিচে নেমে যেতে পারে। প্রোগ্রাম শুধু ভলিউম ঠিক করতে পারে; শ্বাসময় গুণ হারিয়ে গেলে তা সরাসরি ফিরিয়ে আনতে পারে না। তাই প্রম্পট ও পরবর্তী প্রক্রিয়াকরণ একসঙ্গে ব্যবহার করতে হবে।
পঞ্চম ধাপ: সংশ্লেষণের পর সঙ্গে সঙ্গে ট্রান্সক্রিপশন যাচাই
মডেল মাঝে মাঝে একই বাক্য দুই-তিনবার বলে ফেলতে পারে, অথবা শেষ বাক্যটি সরাসরি বাদ দিতে পারে। মূল স্ক্রিপ্ট সম্পূর্ণ সঠিক হলেও প্রতিটি সংশ্লেষিত অংশ একবার ট্রান্সক্রাইব করে যাচাই করা উচিত।
প্রকল্পে দুই ধরনের সংকেত ব্যবহার করা হয়েছে:
- বর্গাকার বন্ধনীর ট্যাগ ও প্রচলিত স্বরধ্বনি বাদ দিয়ে, অন্তত ছয়টি চীনা অক্ষরের এমন অংশ খুঁজুন যা ট্রান্সক্রিপশনে পুনরাবৃত্ত হয়েছে, কিন্তু মূল স্ক্রিপ্টে একবারই আছে।
- ট্রান্সক্রিপশনের অক্ষরসংখ্যা ও মূল স্ক্রিপ্টের অক্ষরসংখ্যা তুলনা করুন; প্রত্যাশার চেয়ে প্রায় 20% কম হলে সম্ভাব্য বাক্য বাদ পড়া হিসেবে ধরুন।
অস্বাভাবিকতা শনাক্ত হলে একবার পুনরায় তৈরি করুন, তারপর দুই সংস্করণকে স্কোর দিয়ে কম স্কোরের সংস্করণটি রাখুন। স্বরধ্বনি প্রায়ই নির্ভুলভাবে ট্রান্সক্রাইব হয় না, তাই “উম, হা, আহ, এহ” ইত্যাদি অক্ষরকে প্রধান যাচাইয়ের ভিত্তি করা উচিত নয়।
লাইভ ফোন কলে Whisper-এর 20–30 সেকেন্ডের অডিও ট্রান্সক্রাইব করতে প্রায় তিন সেকেন্ড লাগতে পারে। বর্তমান অংশ চলার সময় পরের অংশগুলো ব্যাকগ্রাউন্ডে যাচাই করা যায়; প্রথম অংশে বিলম্ব আড়াল করার মতো প্লেব্যাক সময় নেই, তাই আগে “সময় ÷ কার্যকর অক্ষরসংখ্যা” দিয়ে দ্রুত筛াই করা যায়। মূল উদাহরণে স্বাভাবিক পরিসর ছিল প্রতি অক্ষরে প্রায় 0.41 থেকে 0.62 সেকেন্ড; এর বাইরে গেলে পূর্ণ ট্রান্সক্রিপশন চালু করুন।
ষষ্ঠ ধাপ: পুনরায় তৈরি না করে একটি বাক্য কেটে ফেলা
শ্রোতা যদি কোনো নির্দিষ্ট পরিবেশনার সংস্করণ পছন্দ করেন, শুধু একটি বাক্য মুছতে পুরো অংশটি আবার পড়াবেন না। প্রতিটি তৈরি একটি নতুন পরিবেশনা; নিঃশ্বাস, বিরতি ও বাক্যের শেষের সূক্ষ্মতা হুবহু পুনরায় তৈরি করা কঠিন।
- নীরবতা শনাক্ত করুন: প্রথমে প্রায় 50 মিলিসেকেন্ড ধাপে শব্দমাত্রা আঁকুন, তারপর প্রার্থী ছোট অংশগুলো আলাদাভাবে ট্রান্সক্রাইব করে নিশ্চিত করুন যে সেগুলো সংলাপ, নিঃশ্বাস নাকি ফাঁকা অংশ।
- শুষ্ক কণ্ঠ থেকে কাটুন: জোড়ের দুই প্রান্তকে সবচেয়ে নীরব অবস্থানে রাখুন এবং প্রতিটি অংশের শুরু ও শেষে কয়েক দশ মিলিসেকেন্ড ফেড-ইন ও ফেড-আউট রাখুন।
- আবার পরিবেশের শব্দ বসান: ইতিমধ্যে ব্যাকগ্রাউন্ড বসানো চূড়ান্ত সংস্করণ সরাসরি কাটবেন না; এতে লুপ করা শব্দের তাল জোড়ের স্থানে বদলে যেতে পারে।
- আবার ট্রান্সক্রাইব করুন: নিশ্চিত করুন যে চূড়ান্ত ফলে শুধু লক্ষ্য বাক্যটি আছে।
- প্রতি স্যাম্পলে তুলনা করুন: যে অংশগুলো বদলানো হয়নি সেগুলো মূল কণ্ঠের সঙ্গে এখনও একই আছে কি না পরীক্ষা করুন।
ভেজা কণ্ঠে কোন লুপ করা উপাদান ব্যবহার হয়েছে জানা না থাকলে, মানুষের কণ্ঠ সম্পূর্ণ স্থির থাকা অংশ থেকে চূড়ান্ত তরঙ্গরূপ বের করুন। তারপর প্রার্থী উপাদানটি লুপ করে ক্রস-করেলেশন করুন। সর্বোচ্চ করেলেশন অবস্থান উপাদানের ফেজ দিতে পারে, আর ডট প্রোডাক্ট ব্যাকগ্রাউন্ডের গেইন অনুমান করতে পারে। উদাহরণে দুই উপাদানের করেলেশন 0.99-এ পৌঁছেছিল এবং অনুমিত গেইন ছিল যথাক্রমে প্রায় 0.200 ও 0.241।
তুলনা অবশ্যই স্যাম্পল-নির্ভুল হতে হবে। কয়েক ডজন স্যাম্পলের স্থানচ্যুতিতেই সাদৃশ্য স্পষ্টভাবে কমে যেতে পারে এবং “ভুল উপাদান বসানো হয়েছে” এমন ভুল সিদ্ধান্ত হতে পারে। অ্যালাইন করার পর উদাহরণের অপরিবর্তিত অংশগুলোর সাদৃশ্য 0.996 থেকে 0.998-এ পৌঁছেছিল।
সপ্তম ধাপ: সঠিক মুহূর্ত থেকে শব্দ শুরু করা
প্রম্পটের কাস্টম চিহ্ন ব্যবহার করে প্রকল্পটি নিচের পরিবেশের শব্দের ধরন নির্ধারণ করে, তারপর ElevenLabs-এ পাঠানোর আগে এই চিহ্নগুলো সরিয়ে দেয়। মূল নিয়ম হলো: শব্দ যে বাক্য থেকে শুরু হবে, চিহ্নটিও সেই বাক্যেই লিখতে হবে।
licking: ধীর ভেজা শব্দের জন্য।fingering: তুলনামূলক আঠালো অ্যাকশন শব্দের জন্য; দ্রুত অবস্থায়fast fingeringলেখা যায়।sucking: ধীর ভেজা শব্দের জন্য।thrust: অ্যাকশন সত্যিই শুরু হওয়া বাক্যের আগে থাকবে; পুরো রাউন্ডের শুরুতে আগেভাগে বসানো যাবে না।still: বর্তমান লুপ করা শব্দ বন্ধ করতে।
চিহ্নের কারণে যদি সেগমেন্ট কাটা হয়, অ্যাকশন সত্যিই শুরু হওয়ার অবস্থানে একটি নতুন জোড় রাখা যুক্তিযুক্ত; কণ্ঠস্বর পুনরায় নির্দেশ করার জন্য ব্যবহৃত অন্যান্য ছোট ট্যাগ যতটা সম্ভব কথার শুরুতেই, লাইনের ভেতরে রাখুন।
অষ্টম ধাপ: স্বাভাবিক কথার কণ্ঠস্বর নকশা করা
“অস্বাভাবিক” মানেই কণ্ঠ যথেষ্ট কোমল নয়, এমন নয়। মূল প্রকল্পে প্রথমে পুরোনো মডেলকে ElevenLabs v4-এ উন্নীত করা হয় এবং আরও আরামদায়ক ও নরম প্রম্পট পরীক্ষা করা হয়েছিল, কিন্তু শ্রোতাদের মনে হয়েছিল চরিত্রটি অন্য একজন হয়ে গেছে। শেষ পর্যন্ত কার্যকর দিকটি ছিল চরিত্রটির নিজস্ব বলার ভঙ্গি স্পষ্ট করা।
নির্বাচিত ভিত্তি প্রম্পট ছিল:
[low, slow, confident, a little teasing]সেটিং ছিল v4 এবং স্থায়িত্ব 0.35। বাক্যের শুরুতে এলোমেলোভাবে [exhales], [chuckles softly], একটি “উম…” অথবা কিছুই না যোগ করা যায়। প্রতিবার যোগ করবেন না, নইলে স্বাভাবিক পরিবর্তন স্থির মুখের বুলি হয়ে যাবে।
- শুধু সংশ্লেষণের জন্য পাঠানো টেক্সট বদলান; চ্যাট ইন্টারফেস ও ইতিহাসের মূল টেক্সট বদলাবেন না।
- বাক্যটি যদি আগে থেকেই কোনো স্বরধ্বনি দিয়ে শুরু হয়, তাহলে আবার একই জিনিস যোগ করবেন না।
- আগেই থাকা কণ্ঠস্বরের ট্যাগ বা সম্পূর্ণ ইংরেজি বিষয়বস্তু সরাসরি বাদ দিয়ে স্বয়ংক্রিয় মোড়ক প্রয়োগ না করলেও হবে।
- ফোনের জন্য আলাদা প্রম্পট ব্যবস্থা ব্যবহার করুন; দৈনন্দিন কণ্ঠের এলোমেলো বাক্য-শুরুর নিয়ম প্রয়োগ করবেন না।
উন্নত কৌশল ও সাধারণ ফাঁদ
প্রম্পটের নিয়মে “কী করা উচিত” লিখুন
“কোনো নির্দিষ্ট ধরনের শব্দ লিখবে না” এমন নির্দেশ টেক্সট জেনারেটরকে সেটি পুরোপুরি বন্ধ করে দিতে পারে। আরও নির্ভরযোগ্য পদ্ধতি হলো কী ধরনের শব্দ, কোন অবস্থানে এবং ন্যূনতম কতবার থাকা দরকার তা স্পষ্টভাবে লেখা; আর মাঝে মাঝে হওয়া উচ্চ পিচ বা অস্বাভাবিক উচ্চারণ প্রোগ্রাম দিয়ে শনাক্ত করা।
একই নিঃশ্বাস পুনরায় ব্যবহার করবেন না
পছন্দের মূল অংশ নতুন সংস্করণে স্থানান্তর করার সময় একই তৈরি করা অংশ থেকে উপাদান নেওয়া যায়, কিন্তু একই নিঃশ্বাস দুটি অবস্থানে পুনরাবৃত্তি করবেন না। নইলে শ্রোতা বুঝতে পারেন যে সম্পূর্ণ একই সূক্ষ্মতা কপি করা হয়েছে।
সহজে খুঁজে পাওয়া যায় এমন উপাদান বাক্স তৈরি করুন
অনুমোদিত শ্বাস নেওয়া, হিসহিস শব্দ এবং সংক্ষিপ্ত শ্বাসগুলো মূল ফাইল, সময়সীমা ও ব্যবহারের অবস্থান অনুযায়ী সংরক্ষণ করুন। পরে কোনো শ্বাসের লেবেল শুধু নীরবতা তৈরি করলে, উপকরণ বাক্স থেকে একটি শ্বাস যোগ করা যাবে। README-তে একই সঙ্গে বলা হয়েছে, স্বয়ংক্রিয়ভাবে শ্বাস যোগ করতে এখনও টাইমস্ট্যাম্পযুক্ত ইন্টারফেস প্রয়োজন; শুধু “বাক্যের মধ্যে নীরবতা আছে” দেখে শ্বাসের অনুপস্থিতি এবং স্বাভাবিক অসম্পূর্ণ বিরামচিহ্নের বিরতি আলাদা করা যায় না।
রিয়েল-টাইম ফোনকলে কথার মধ্যে ঢুকে পড়া সামলাতে হবে
সিস্টেম উত্তরটি বাজানো শুরু করার আগেই অপর পক্ষ কথা বলা শুরু করলে, এখনও শোনা না-যাওয়া পুরোনো উত্তরটি বাতিল করে সরাসরি নতুন বিষয়টি প্রক্রিয়া করা উচিত। নতুন কথাগুলো পুরোনো উত্তর শেষ হওয়া পর্যন্ত ক্যাশে রাখবেন না, নইলে একই কথার উত্তর দুবার দেওয়া হতে পারে। যেসব সংক্ষিপ্ত শব্দকে টেক্সটে শনাক্ত করা যায় না, সেগুলোর ক্ষেত্রে মূল প্রক্রিয়ায় স্বয়ংক্রিয়ভাবে কথার ভঙ্গির শব্দ বসানোর অপেক্ষার সময় ২.৫ সেকেন্ড থেকে বাড়িয়ে ৪.৫ সেকেন্ড করা হয়েছে, যাতে প্রকৃত কথার আগে তা সক্রিয় হওয়ার সম্ভাবনা কমে।
আগে সমস্যা শুনুন, তারপর কী মাপবেন ঠিক করুন
শব্দের তীব্রতা, স্বর, নীরবতার দৈর্ঘ্য, শব্দসংখ্যার অনুপাত এবং পারস্পরিক সহসম্পর্ক—সবই কেবল আগে শনাক্ত করা সমস্যাকে যাচাই করতে পারে। এগুলো একা “শোনার স্বাভাবিকতা ঠিক আছে কি না” তা নির্ধারণ করতে পারে না। সবচেয়ে কার্যকর পদ্ধতি এখনও হলো, শ্রোতা আগে নির্দিষ্ট অস্বাভাবিক স্থানটি চিহ্নিত করবেন, তারপর তার জন্য উপযুক্ত মেট্রিক তৈরি করা হবে।
প্রস্তাবিত সম্পূর্ণ কর্মপ্রবাহ
- কণ্ঠের ধরন, শ্বাস, বিরতি এবং শব্দের চিহ্নসহ টেক্সট লিখুন।
- শুধু পোস্ট-প্রসেসিংয়ের জন্য ব্যবহৃত শব্দের চিহ্ন সরিয়ে বাকি টেক্সট ElevenLabs v4-এ পাঠান।
- শুষ্ক ভয়েস সংরক্ষণ করুন এবং Whisper দিয়ে ট্রান্সক্রাইব করে পুনরাবৃত্তি, বাদ পড়া বাক্য ও বিষয়বস্তুর বিচ্যুতি পরীক্ষা করুন।
f0এবংrmsগণনা করে অডিওকে কথা বলার অংশ, শ্বাসের অংশ এবং অন্যান্য শ্রাব্য অংশে ভাগ করুন।- কথা শুরু হওয়ার আগের শ্বাসকে সংলাপের প্রায় ০.০৮ সেকেন্ড আগে সরিয়ে আনুন, তবে বাক্যের মাঝের শ্বাস রেখে দিন।
- প্রতিটি অংশে হঠাৎ শব্দের তীব্রতা বেড়েছে কি না শনাক্ত করে অস্বাভাবিক অংশে মসৃণ ক্ষয় প্রয়োগ করুন।
- অ্যাকশন চিহ্ন অনুযায়ী লুপ করা শব্দ বসিয়ে মিশ্রিত ভয়েস সংস্করণ রপ্তানি করুন।
- আবার ট্রান্সক্রাইব করে মোট সময়কাল, দীর্ঘ নীরবতার সংখ্যা, শ্বাসের অবস্থান এবং অপরিবর্তিত অংশের স্যাম্পল-স্তরের সাদৃশ্য পরীক্ষা করুন।
- শ্রোতার অনুমোদিত মূল অংশ ও তাদের সময়সীমা সংরক্ষণ করুন; শুধু চূড়ান্ত মিক্স রেখে দেবেন না।
উপসংহার
প্রাকৃতিক AI ভয়েস আরও বেশি শ্বাসের লেবেল স্তূপ করে তৈরি হয় না। আরও নির্ভরযোগ্য পদ্ধতি হলো শ্বাসকে কথার সঙ্গে ঘনিষ্ঠভাবে রাখা, অ্যাকশন-ভিত্তিক শব্দকে সঠিক মুহূর্তে শুরু করা, প্রতিটি সংশ্লেষিত ফল ট্রান্সক্রাইব করে যাচাই করা এবং সম্পাদনার প্রয়োজন হলে মূল পরিবেশন যতটা সম্ভব সংরক্ষণ করা।
প্রম্পট ঠিক করে “কী লিখতে হবে” এবং “কী ভঙ্গিতে বলতে হবে”; প্রোগ্রাম সামলায় কয়েক দশ মিলিসেকেন্ডের অবস্থান, অস্বাভাবিক শব্দের তীব্রতা, পুনরাবৃত্তি, বাদ পড়া উচ্চারণ এবং স্যাম্পল-স্তরের সংযোগ। দুটির সমন্বয়েই আকস্মিকভাবে তৈরি হওয়া একটি ভালো ভয়েসকে পুনরাবৃত্তিযোগ্য উৎপাদন প্রক্রিয়ায় রূপ দেওয়া যায়। আরও পটভূমির জন্য ElevenLabs প্রম্পট নির্দেশিকা, ElevenLabs শ্বাসের শব্দ সংক্রান্ত ব্যাখ্যা এবং কথার সময় শ্বাস-প্রশ্বাস বিষয়ক গবেষণা দেখুন।
