নিশ্চিত যে আপনি এটি করতে পারেন, এটি "সুন্দর" শোনার জন্য তুচ্ছ নয়।
এটি লিনাক্সে কীভাবে করবেন তা আমি জানি না, তবে আপনি যদি পিসিএম বাফার খেলতে পারেন তবে আপনাকে যা করতে চান তা পূরণ করতে হবে।
সুতরাং ধরুন আপনার বাফারটি সেকেন্ডে 44100 নমুনায় মনোরাল, স্বাক্ষরিত 16-বিট নমুনাগুলিতে খেলতে চলেছে, খাঁটি (সাইনোসয়েডাল) এ 4 সাউন্ড (440 হার্জ) তৈরি করা যত সহজ
int16_t buffer[44100];
float frequency = 440.0f;
float sampling_ratio = 44100.0f;
float amplitude = 0.5f;
float t;
for (int i = 0; i < 44100; i++)
{
float theta = ((float)i / sampling_ratio) * PI;
buffer[i] = (int16_t)(sin(theta * frequency) * 32767.0f * amplitude);
}
তবে এই শব্দটি আপনার আগ্রহগুলির জন্য সম্ভবত খুব নিস্তেজ, সুতরাং আপনাকে আরও কিছু জটিল জিনিস করতে হবে। সাধারণভাবে, দুটি ধরণের শব্দ সংশ্লেষণ হয়: সংযোজক এবং সাবট্র্যাকটিভ । আরও অনেকে আছেন, তবে এই দুটি সম্ভবত সবচেয়ে সাধারণ। আজ আমি শুধু সংযোজন সংশ্লেষ সম্পর্কে কথা বলব।
সংযোজন সংশ্লেষণের জন্য, আমি ঠিক যেমনটি করেছি সেখানে আপনি একই জিনিসটি করেছেন, তবে একটি প্রশস্ততায় কেবল একটি ফ্রিকোয়েন্সি ব্যবহার না করে আপনি একসাথে বেশ কয়েকটি তরঙ্গ যুক্ত করুন। এটি ঠিক একই সাথে পিয়ানোতে কয়েকটি কী টিপানোর মতো। সুতরাং আপনি এই জাতীয় কিছু দেখতে আপনার কোডটি পরিবর্তন করুন:
void add_sine_wave(int16_t* buffer, int buffer_length, float frequency, float sampling_ratio, float amplitude)
{
for (int i = 0; i < buffer_length; i++)
{
float theta = ((float)i / sampling_ratio) * M_PI;
// make sure to correct for overflows and underflows
buffer[i] += (int16_t)(sin(theta * frequency) * 32767.0f * amplitude);
}
}
এবং তারপরে এটি ব্যবহার করুন:
int16_t buffer[44100];
memset(buffer, 0, sizeof(buffer));
// Create an A Major chord
add_sine_wave(buffer, 44100, 440.0f, 44100.0f, 0.5f);
add_sine_wave(buffer, 44100, 554.37f, 44100.0f, 0.5f);
add_sine_wave(buffer, 44100, 659.26f, 44100.0f, 0.5f);
প্রসঙ্গক্রমে, আমি আমার ফ্রিকোয়েন্সি পেয়ে করছি এখানে (আমি ব্যবহার করছি সমান মেজাজ কিন্তু আছে প্রচুর এর অন্যান্য প্রাপ্তিসাধ্য tunings)।
লক্ষ করুন যে, এ পর্যন্ত আমি শুধু সাইন তরঙ্গ ব্যবহার করছি, কিন্তু পুরাতন synthesizers এছাড়াও সমর্থন বর্গক্ষেত্র , ত্রিভুজ এবং করাত পাশাপাশি তরঙ্গ, নিজস্ব আকর্ষণীয় শব্দ বৈশিষ্ট্য সঙ্গে প্রতিটি। এগুলি বাস্তবায়ন করা বেশ সোজা is
আপনি তৈরি করতে পারেন এমন বিভিন্ন ধরণের শব্দ বাড়াতে আপনি যা করতে পারেন তা হ'ল:
- প্রশস্ততা মডুলেশন : বাফারে তরঙ্গের প্রশস্ততা পরিবর্তন করা
- ফ্রিকোয়েন্সি মড্যুলেশন : বাফারে তরঙ্গের ফ্রিকোয়েন্সি পরিবর্তন করা
- রিভারব : বাফারের আকার এবং অবস্থান পরিবর্তন করে একটি নমুনা পুনরাবৃত্তি করা। নিজেই একটি খুব জটিল বিষয়।
- এনভেলপিং : একটি নমুনার প্রশস্ততা পরিবর্তন করে এটি আরও জীবন দেয়
এখানে মুল বক্তব্যটি হ'ল কৌশলগুলি নিজেরাই খুব কঠিন নয়, তাই আপনার জন্য এগুলি বিমূর্ত করার জন্য আপনার সত্যিকারের কোনও লাইব্রেরির প্রয়োজন নেই। এটি কী আকর্ষণীয় শোনার জন্য তা ব্যবহার করে difficult
একটি চূড়ান্ত নোট। এই জাতীয় শব্দের সাথে পরীক্ষা করার সময়, আপনার ডেটা ডাব্লুএভি ফাইলগুলিতে সংরক্ষণ করা, এবং তারপরে অড্যাসিটির মতো কিছু সফ্টওয়্যারগুলিতে ভিজ্যুয়ালাইজ করা সত্যিই দরকারী। আপনি আরও পরিষ্কারভাবে কী করছেন তা আপনি দেখতে পাচ্ছেন।