क्या C से ध्वनि नमूने उत्पन्न करने के लिए C की ध्वनि लाइब्रेरी है? [बन्द है]


10

मैं सी में रेट्रो-शैली के खेल के लिए एक इंजन पर काम कर रहा हूं। मैं एक ध्वनि पुस्तकालय की तलाश कर रहा हूं जो कोड से चिप ध्वनियों का उत्पादन करेगा ... मैं संगीत बनाने के लिए इंजन के लिए अपना खुद का सरल चिपटू ट्रैकर बनाना चाहता हूं। क्या ऐसी किसी वस्तु का अस्तित्व है?

मुझे अपनी परियोजना में .nsf फ़ाइलों का उपयोग करने के लिए एक पुस्तकालय में भी दिलचस्पी होगी।

मैं विकास के लिए लिनक्स का उपयोग कर रहा हूं।


मुझे लगता है कि यह प्रश्न "किस तकनीक का उपयोग करना है" श्रेणी के अंतर्गत आता है। हालांकि, आम तौर पर ये आला अनुरोध प्रतिक्रियाओं की एक बड़ी सूची उत्पन्न नहीं करते हैं, मुझे लगता है कि यह रचनात्मक नहीं है।
MichaelHouse

खैर, समस्या यह है कि मुझे कुछ भी नहीं मिल रहा है। मुझे यह भी पता नहीं है कि कहां से शुरू किया जाए ... मुझे मिली हर लाइब्रेरी को .wav जैसी फाइलों से लोड करने पर केंद्रित है। मैं libmikmod का उपयोग कर सकता हूं अगर मैं सिर्फ एक .mod या .xm मॉड्यूल लोड करना चाहता हूं, लेकिन यह वह नहीं है जो मैं करना चाहता हूं।
rzrscm

मुझे नहीं लगता कि यह वास्तव में खेल के विकास के अंतर्गत आता है। यह खेलों की तुलना में अधिक सामान्य मीडिया है।
PixelArtDragon

अधिक सामान्य पृष्ठभूमि और संसाधनों के लिए "मॉड ट्रैकर" या शायद "डेमोसिन ट्रैकर" की तलाश करें।
पैट्रिक ह्यूजेस

1
मैं व्यक्तिगत रूप से इस प्रश्न को एक अच्छा प्रश्न मानता हूं। चूँकि मुझे रेट्रो-शैली के खेलों का कार्यक्रम करना पसंद है, इसलिए कुछ अस्पष्ट समुदाय का हिस्सा बने बिना इस तरह की चीजों के लिए संसाधनों को खोजना मुश्किल है।
ज़ैक द ह्यूमन

जवाबों:


3

शायद एक सही उत्तर नहीं है, लेकिन यहां विभिन्न ऑडियो इंजनों का एक पुस्तकालय है

(ऑडियो लाइब्रेरी के लिए दूसरे सेगमेंट तक स्क्रॉल करें)

12 में से कम से कम 9 इंजन सी के साथ जाते हैं। उनमें से अधिकांश ट्रैकर फाइलों का भी समर्थन करते हैं। जो nsf से अलग नहीं है (मुझे लगता है कि ये एनईएस म्यूजिक फाइल हैं) फाइलें।


16

यकीन है कि आप कर सकते हैं, यह "अच्छा" लगने के लिए सिर्फ तुच्छ नहीं है।

मुझे नहीं पता कि लिनक्स में यह कैसे करना है, लेकिन अगर आप एक पीसीएम बफर खेल सकते हैं, तो आपको बस इतना करना होगा कि आप जो चाहें उसे भर दें।

तो मान लीजिए कि आपका बफर मोनोरल में खेलने के लिए सेट है, 16-बिट नमूनों पर हस्ताक्षर किए हैं, प्रति सेकंड 44100 नमूनों पर, शुद्ध (साइनसोइडल) A4 ध्वनि (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);

वैसे, मैंने अपने आवृत्तियों हो रही है यहाँ (मैं उपयोग कर रहा हूँ बराबर स्वभाव है, लेकिन देखते हैं बहुत सारे के अन्य उपलब्ध समस्वरीकरण)।

ध्यान दें कि अब तक मैं केवल साइन तरंगों का उपयोग कर रहा हूं, लेकिन पुराने सिंथेसाइज़र भी वर्ग , त्रिकोणीय और आरा तरंगों का समर्थन करते हैं , प्रत्येक अपने स्वयं के दिलचस्प ध्वनि गुणों के साथ। इन्हें लागू करना बहुत सीधा है।

आपके द्वारा बनाई जा सकने वाली ध्वनियों की विविधता बढ़ाने के लिए आप अन्य चीजें कर सकते हैं:

  1. आयाम मॉडुलन : पूरे बफर में तरंग के आयाम को बदलना
  2. फ़्रिक्वेंसी मॉड्यूलेशन : पूरे बफर में तरंग की आवृत्ति को बदलना
  3. Reverb : बफर में अपने आकार और स्थिति को बदलकर एक नमूना दोहराएं। यह एक बहुत ही जटिल विषय है।
  4. लिफाफा : इसे और अधिक जीवन देने के लिए एक नमूने के आयाम को बदलना

यहाँ मुद्दा यह है कि तकनीकें स्वयं बहुत कठिन नहीं हैं, इसलिए आपको वास्तव में उन्हें आपके लिए सार करने के लिए एक पुस्तकालय की आवश्यकता नहीं है। यह उनका उपयोग करना है जो दिलचस्प लगता है कि मुश्किल क्या है।

एक अंतिम नोट। इस तरह से ध्वनि के साथ प्रयोग करने पर, अपने डेटा को WAV फ़ाइलों में सहेजने के लिए वास्तव में उपयोगी हो सकता है, और फिर उन्हें ऑडेसिटी के कुछ सॉफ़्टवेयर में विज़ुअलाइज़ किया जा सकता है। इस तरह आप देख सकते हैं कि आप और अधिक स्पष्ट रूप से क्या कर रहे हैं।


अपने रोल के लिए +1। मैं कई लिनक्स लिबास नहीं देख रहा हूं जो एनएसएफ का समर्थन करेंगे। लेकिन, यहाँ कल्पना है: webcache.googleusercontent.com/…
michael.bartnett

जानकारी के लिए धन्यवाद। मैं अब अपनी परियोजना के लिए .nsf फाइलें बनाने के साथ रह सकता हूं, जिससे मुझे एहसास होता है कि ध्वनियों को सिर्फ सही ध्वनि में लाने में मुझे कितनी आवश्यकता होगी।
rzrscm

+1 मैंने माना कि इस प्रश्न का कोई भी उत्तर थकाऊ होगा। मुझे एएम / एफएम के बारे में बहुत कुछ नहीं पता है, लेकिन आमतौर पर तरंगों को पहले फिल्टर तक पहुंचाया जाएगा, जैसा कि सबट्रैक्टिव सिंथेसिस में होगा। इसके अलावा, कई पियानो नोट्स का आपका उदाहरण सही है, एक बेहतर उदाहरण सिर्फ एक नोट होगा! एक एकल पियानो नोट कई हार्मोनिक्स बनाएगा जो इसे टाइमब्रे देता है। एक पियानो बनाएगा> 5 तरंगों को एक साथ जोड़ा गया है जबकि अधिकांश में 2 या 3 ठीक होंगे।
टोनी

"add_sine_wave" फ़ंक्शन में ओवरफ्लो की जांच करने का सही तरीका क्या है?
ीडमास्टर

@ हेडमास्टर: मेरा मतलब था क्लिपिंग। shortइससे पहले कि आप इसे कास्ट करने के लिए सुनिश्चित करें कि मूल्य फिट बैठता है short
पांडा पायजामा

4

चिपट्यून ध्वनि प्रभावों के लिए, एक निश्चित उत्तर है: sfxr

यह एक स्वसंपूर्ण अनुप्रयोग है जिसका उपयोग आप नमूने उत्पन्न करने के लिए कर सकते हैं, लेकिन स्रोत कोड भी उपलब्ध है जिसे आपको अपने कोड में एकीकृत करना चाहिए।


3

मैं व्यक्तिगत रूप से ब्लार्ग के ऑडियो पुस्तकालयों की सिफारिश कर सकता हूं । कुछ ऐसा जो आपके लिए विशेष रुचि वाला हो सकता है, वह है उसका Blip_Buffer

ब्लार्ग की साइट में कई "रेट्रो" ऑडियो सिंथेसाइज़र हैं, और मैं सक्रिय रूप से अपने Game_Music_Emu का उपयोग कर रहा हूं, जो मैं एक मेगा मैन क्लोन में एनएसएफ फाइलें लिख रहा हूं।

पुस्तकालयों में से कई C ++ में लिखे गए हैं लेकिन कुछ एक C इंटरफ़ेस भी प्रदान करते हैं।


निश्चित रूप से इनमें से कुछ को आज़माने जा रहे हैं ... वे वही हो सकते हैं जो मैं देख रहा हूं क्योंकि मैं एक गेम इंजन पर काम कर रहा हूं जिसका उद्देश्य एनईएस गेम के रूप और स्वरूप का अनुकरण करना है।
rzrscm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.