কোড থেকে শব্দ নমুনা উত্পন্ন করার জন্য সি এর জন্য কোনও শব্দ গ্রন্থাগার রয়েছে? [বন্ধ]


10

আমি সি তে একটি রেট্রো-স্টাইলের গেমের জন্য একটি ইঞ্জিনে কাজ করছি আমি এমন একটি সাউন্ড লাইব্রেরি খুঁজছি যা কোড থেকে চিপ শব্দ তৈরি করবে ... আমি ইঞ্জিনটি তৈরি করতে আমার নিজস্ব চিপটিউন ট্র্যাকার তৈরি করতে চাই। এ জাতীয় কি কোন অস্তিত্ব আছে?

আমি আমার প্রকল্পে .nsf ফাইল ব্যবহার করার জন্য একটি লাইব্রেরিতে আগ্রহী।

আমি উন্নয়নের জন্য লিনাক্স ব্যবহার করছি।


আমি মনে করি এই প্রশ্নটি "কোন প্রযুক্তিটি ব্যবহার করতে হবে" বিভাগের আওতায় পড়ে। যদিও, সাধারণত এই কুলুঙ্গি অনুরোধগুলি প্রতিক্রিয়াগুলির একটি বৃহত তালিকা তৈরি করে না, আমি মনে করি এটি গঠনমূলক নয়।
MichaelHouse

ঠিক আছে, সমস্যাটি হ'ল আমি কিছুই খুঁজে পাচ্ছি না বলে মনে হচ্ছে। আমি কোথায় শুরু করব তাও জানি না ... আমি খুঁজে পাওয়া প্রতিটি লাইব্রেরিতে .wav এর মতো ফাইলগুলি লোড করার দিকে দৃষ্টি নিবদ্ধ করে। আমি কেবল একটি .mod বা .xm মডিউল লোড করতে চাইলে আমি libmikmod ব্যবহার করতে পারি, তবে এটি আমি করতে চাই না।
rzrscm

আমি মনে করি না এটি সত্যিই গেম বিকাশের আওতায় পড়ে। এটি গেমসের চেয়ে সাধারণ মিডিয়া।
পিক্সেলআর্টড্রাগন

আরও সাধারণ ব্যাকগ্রাউন্ড এবং সংস্থানগুলির জন্য "মোড ট্র্যাকার" বা সম্ভবত "ডেমোসেসিন ট্র্যাকার" অনুসন্ধান করার চেষ্টা করুন।
প্যাট্রিক হিউজেস

1
আমি ব্যক্তিগতভাবে এই প্রশ্নটি একটি ভাল প্রশ্ন মনে করি। যেহেতু আমি রেট্রো স্টাইলের গেমগুলি প্রোগ্রাম করতে পছন্দ করি কিছু অস্পষ্ট সম্প্রদায়ের অংশ না হয়ে এ জাতীয় জিনিসের জন্য সংস্থান খুঁজে পাওয়া শক্ত।
জ্যাক দ্য হিউম্যান

উত্তর:


3

সম্ভবত সঠিক উত্তর নয় তবে এখানে বিভিন্ন অডিও ইঞ্জিনের একটি লাইব্রেরি রয়েছে

(অডিও লাইব্রেরির জন্য দ্বিতীয় বিভাগে স্ক্রোল করুন)

12 টির মধ্যে কমপক্ষে 9 টি ইঞ্জিন সি এর সাথে যায় তাদের বেশিরভাগ ট্র্যাকার ফাইলগুলিকে সমর্থন করে। যা এনএসএফের চেয়ে আলাদা নয় (আমি ধরে নিলাম এগুলি এনইএস সংগীত ফাইল) ফাইলগুলি।


16

নিশ্চিত যে আপনি এটি করতে পারেন, এটি "সুন্দর" শোনার জন্য তুচ্ছ নয়।

এটি লিনাক্সে কীভাবে করবেন তা আমি জানি না, তবে আপনি যদি পিসিএম বাফার খেলতে পারেন তবে আপনাকে যা করতে চান তা পূরণ করতে হবে।

সুতরাং ধরুন আপনার বাফারটি সেকেন্ডে 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

আপনি তৈরি করতে পারেন এমন বিভিন্ন ধরণের শব্দ বাড়াতে আপনি যা করতে পারেন তা হ'ল:

  1. প্রশস্ততা মডুলেশন : বাফারে তরঙ্গের প্রশস্ততা পরিবর্তন করা
  2. ফ্রিকোয়েন্সি মড্যুলেশন : বাফারে তরঙ্গের ফ্রিকোয়েন্সি পরিবর্তন করা
  3. রিভারব : বাফারের আকার এবং অবস্থান পরিবর্তন করে একটি নমুনা পুনরাবৃত্তি করা। নিজেই একটি খুব জটিল বিষয়।
  4. এনভেলপিং : একটি নমুনার প্রশস্ততা পরিবর্তন করে এটি আরও জীবন দেয়

এখানে মুল বক্তব্যটি হ'ল কৌশলগুলি নিজেরাই খুব কঠিন নয়, তাই আপনার জন্য এগুলি বিমূর্ত করার জন্য আপনার সত্যিকারের কোনও লাইব্রেরির প্রয়োজন নেই। এটি কী আকর্ষণীয় শোনার জন্য তা ব্যবহার করে difficult

একটি চূড়ান্ত নোট। এই জাতীয় শব্দের সাথে পরীক্ষা করার সময়, আপনার ডেটা ডাব্লুএভি ফাইলগুলিতে সংরক্ষণ করা, এবং তারপরে অড্যাসিটির মতো কিছু সফ্টওয়্যারগুলিতে ভিজ্যুয়ালাইজ করা সত্যিই দরকারী। আপনি আরও পরিষ্কারভাবে কী করছেন তা আপনি দেখতে পাচ্ছেন।


আপনার নিজের ঘূর্ণায়মান জন্য +1। আমি এমন অনেক লিনাক্স লিব দেখছি না যা এনএসএফ সমর্থন করবে। তবে, এখানে অনুমানটি দেওয়া আছে
michael.bartnett

তথ্যটির জন্য আপনাকে ধন্যবাদ। আমি এখন আমার প্রকল্পের জন্য .nsf ফাইলগুলি তৈরির সাথে লেগে থাকতে পারি যে আমি বুঝতে পারি যে শব্দগুলি ঠিকমতো শোনার জন্য আমার কতটা দরকার।
rzrscm

+1 আমি ধরে নিয়েছি এই প্রশ্নের কোনও উত্তর ক্লান্তিকর হবে। আমি এএম / এফএম সম্পর্কে অনেক কিছুই জানি না তবে সাধারণত তরঙ্গগুলি সাবট্র্যাকটিভ সংশ্লেষণের মতো প্রথমে কোনও ফিল্টারের দিকে চলে যায়। এছাড়াও, আপনার একাধিক পিয়ানো নোটের উদাহরণটি সঠিক, এর চেয়ে ভাল উদাহরণ কেবল একটি নোট হবে! একটি একক পিয়ানো নোট একাধিক সুরেলা তৈরি করবে যা এটিকে কাঠ দেয়। একটি পিয়ানো তৈরি করবে> 5 টি তরঙ্গ একসাথে যুক্ত হবে তবে বেশিরভাগ সংশ্লেষে 2 বা 3 টি ঠিক থাকবে।
টনি

"add_sine_wave" ফাংশনে ওভারফ্লো পরীক্ষা করার সঠিক উপায় কী?
eadmaster

@ এডমাস্টার: আমি ক্লিপিং বলতে চাইছিলাম। আপনি shortএটিতে কাস্ট করার আগে মানটি মানিয়ে যায় তা নিশ্চিত করুন short
পান্ডা পাইজামা

4

চিপটিউন সাউন্ড এফেক্টগুলির জন্য, এর একটি নির্দিষ্ট উত্তর রয়েছে: এসএফএক্সএসআর

এটি একটি স্বতন্ত্র অ্যাপ্লিকেশন যা আপনি নমুনা তৈরি করতে ব্যবহার করতে পারেন, তবে উত্স কোডটিও উপলভ্য আপনার যদি আপনার কোডটিতে এটি সংহত করতে চান তবে।


3

আমি ব্যক্তিগতভাবে বেলার্গের অডিও লাইব্রেরিগুলির পরামর্শ দিতে পারি । আপনার পক্ষে বিশেষ আগ্রহী কিছু হ'ল তার ব্লিপ_বাফার

বেলার্গের সাইটে বেশ কয়েকটি "রেট্রো" অডিও সিনথেসাইজার রয়েছে এবং আমি লিখছি এমন একটি মেগা ম্যান ক্লোনটিতে এনএসএফ ফাইলগুলি খেলতে আমি তার গেম_সিউজিক_ইমুকে সক্রিয়ভাবে ব্যবহার করছি।

অনেকগুলি লাইব্রেরি সি ++ তে লেখা থাকে তবে কয়েকটি সি-ইন্টারফেসও সরবরাহ করে।


অবশ্যই এর মধ্যে কিছু চেষ্টা করে যাচ্ছি ... এগুলি সম্ভবত আমি যা খুঁজছি সেহেতু আমি কোনও গেম ইঞ্জিনে কাজ করছি যা এনইএস গেমটির চেহারা এবং অনুভূতি অনুকরণ করার উদ্দেশ্যে intended
rzrscm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.