सफेद शोर पैदा करें


15

चुनौती है: सफेद शोर से बना एक ऑडियो फ़ाइल उत्पन्न करें।
आवश्यकताएँ और निर्देश:

  • आपके कार्यक्रम में केवल सफेद शोर वाली एक ऑडियो फ़ाइल उत्पन्न होनी चाहिए, जिसका अर्थ है कि इसकी तीव्रता सभी (उचित) आवृत्तियों और गैर-अक्ष के लिए समान है [एक उदाहरण प्लॉट देखें ];
  • एक को वीएलसी के नवीनतम संस्करण पर ऑडियो फ़ाइल चलाने में सक्षम होना चाहिए [अपना उत्तर लिखने के समय];
  • कार्यक्रम को क्रिप्टोग्राफिक रूप से मजबूत यादृच्छिकता, randकार्यों या पढ़ने की आवश्यकता नहीं /dev/randहै, ठीक है;
  • कार्यक्रम कम से कम 1 घंटे का ऑडियो उत्पन्न करने में सक्षम होना चाहिए, कम से कम सिद्धांत में (अर्थ सिस्टम सीमाएं जैसे अधिकतम फ़ाइलें लागू नहीं होती हैं);
  • आपका स्कोर आपके स्रोत कोड में बाइट्स की संख्या है, साथ ही सभी बोनस जो लागू होते हैं;
  • किसी भी तीसरे पक्ष का उपयोग करना , बाहरी पुस्तकालय ठीक है;
  • कार्यक्रम को इंटरनेट तक पहुंच के बिना काम करना चाहिए।

बोनस हैं:

  • -15%: ऑडियो फ़ाइल के प्रारूप को निर्दिष्ट करने की अनुमति दें (कम से कम दो विकल्प; संभावित विकल्पों की संख्या स्कोर में बदलाव नहीं करती है);
  • -10%: ऑडियो फ़ाइल की अवधि निर्दिष्ट करने की अनुमति दें;
  • -5%: ऑडियो फ़ाइल के बिटरेट को निर्दिष्ट करने की अनुमति दें।

सेटिंग्स को चर, फ़ाइलों में संग्रहीत किया जा सकता है, या कमांड लाइन पैरामीटर, आपकी पसंद के रूप में दिया जा सकता है। किसी भी बोनस को लागू करने से पहले प्रतिशत की गणना बाइट्स की मूल संख्या से की जाती है।


समस्या कल्पना एक कोड कॉलिंग चुनौती का वर्णन करते हुए प्रतीत होती है, लेकिन टैग अन्यथा कहते हैं।
अंडरग्राउंडोरेल

ओह! मैं ठीक कर दूँगा।
गिउलिओ मस्केलरलो

शायद चुनौती को केवल "किसी भी पुस्तकालय" के बजाय "मौजूदा तीसरे पक्ष के पुस्तकालयों" की अनुमति देने के लिए संशोधित किया जाना चाहिए।
jpmc26

क्या आप सफेद होने के शोर पर एक स्टिकर बनने जा रहे हैं? यदि आप वास्तव में सत्यापित करना चाहते हैं: इसके ऑटोकॉरलोग्राम में शून्य के आसपास स्पष्ट स्पाइक होना चाहिए, और किसी भी देरी पर लगभग कुछ भी नहीं। यदि आप एक स्टिकलर नहीं हैं, तो मैं कहता हूं कि यह स्पष्ट है कि यह सफेद शोर है। सिर्फ शोर बोलो।
टिम सेगिन

WebAudioAPI के बारे में क्या? मैंने जेएस प्रोग्राम को कोड किया, जो सफेद शोर बजाता है
евгений Новиков

जवाबों:


4

MATLAB, 25

wavwrite(rand(8e3,1),'a')

डिस्क पर एक नई WAV फ़ाइल लिखता है a। हस्ताक्षरित पूर्णांक प्रारूप में इसका नमूना दर 8 kHz और 16 बिट प्रति नमूना है। स्रोत डेटा को समान रूप से अंतराल पर वितरित किया जाता है [0,1], जो [0,32767]पूर्णांक प्रारूप में रूपांतरण के बाद अंतराल पर मैप किया जाता है ।

MATLAB, 28 - 4 (10% + 5%) = 24

मुझे यकीन नहीं है कि ओपी का मतलब क्या था कि सेटिंग्स को चर में कैसे संग्रहीत किया जा सकता है, लेकिन मैंने इसे इस तरह से व्याख्या किया जो इस मामले के अनुकूल है। ऐसा मानते हुए:

  • वांछित बिट दर (बिट्स / सेकंड में) चर में उपयोगकर्ता द्वारा प्रदान की जाती है b। नमूना प्रति बिट 16 पर हार्ड-कोडित है।

  • फ़ाइल की वांछित अवधि (नमूनों में) चर में दी गई है d

परिणाम है:

wavwrite(rand(d,1),b/16,'a')

MATLAB, 16 - 4 (15% + 10%) = 12

बोनस की खोज में स्लेज की एक और परत जोड़ना, मैं एक और धारणा बनाता हूं: फ़ाइल को आउटपुट में उपयोग करने के लिए वांछित फ़ंक्शन को चर में निर्दिष्ट किया जाना चाहिए f। फिर कोड को सरल करता है:

f(rand(d,1),'a')

समारोह के लिए स्वीकार्य मूल्य हैं:

f = @wavwrite

या

f = @auwrite

प्रत्येक फ़ंक्शन उपरोक्त स्निपेट को .auनिर्दिष्ट अवधि के साथ 8 kHz की नमूना दर पर उपयुक्त प्रारूप (WAV या ) की एक फ़ाइल लिखने का कारण होगा । मैंने यहां बिटरेट के विनिर्देशन के लिए बोनस को बंद कर दिया, क्योंकि auwriteप्रति 16 के बजाय 8 बिट प्रति नमूना डिफॉल्ट wavwriteकरता है। मुझे अधिक वर्णों का उपयोग किए बिना दोनों को सामंजस्य बनाने का तरीका नहीं दिखता है।


10

बाश, ३४

dd if=/dev/sda of=file.wav count=1

यदि आप हार्ड ड्राइव 'यादृच्छिकता' नहीं चाहते हैं, (बहुत धीमा)

dd if=/dev/random of=file.wav count=9

SPIN, 28

word x=0
repeat
 word[?x]=?x

4
किसी तरह मुझे नहीं लगता कि फ़ाइल हेडर पूरी तरह से यादृच्छिक हो सकता है / हार्ड डिस्क ड्राइव पहले सेक्टर जैसा ही हो
John Dvorak

1
यदि टेस्ट हार्नेस वीएलसी है, तो हायर डॉक्टर सही हो सकते हैं। VLC बहुत क्षमाशील है।
जोनाथन वान मैट्रे

1
आपने शोर उत्पन्न किया है, लेकिन क्या यह सफेद शोर है?
स्टीफन मेल्विन

1
/ देव / यादृच्छिक भी मैक पर मौजूद है, याय! दुर्भाग्य से iTunes परिणामस्वरूप wav फ़ाइल नहीं चला सकता है। ऐसा नहीं है कि मैं शिकायत कर सकता हूं - मैं अपनी माफी और देशी कोडेक्स की भीड़ के कारण VLc के लिए चुना।
Giulio Muscarello

1
आप कार्यशील निर्देशिका के होते हुए कमांड निष्पादित करके पांच वर्णों को बचा सकते हैं /dev
डेविड रिचरबी

4

गणितज्ञ ५२ - ५ = ४।

gएक सफेद शोर निर्यात करता है। sसेकंड और 8000 बीपीएस की .wav फ़ाइल ।

g@s_:=Export["p.wav",RandomReal@{-1,1}~Play~{t,0,s}]

उदाहरण: 6 सेकंड की सफेद शोर फ़ाइल निर्यात की जाती है।

g[6]

p.wav


4

सुपरकोलाइडर, 89 - 10% = 80.1 बाइट्स

अफसोस की बात है कि ध्वनि / ऑडियो की पीढ़ी के लिए जानबूझकर बनाया जाने के बावजूद, यह भाषा यहां जीतने वाली नहीं है। लेकिन यह कोड गोल्फ पर सुपरकोलाइडर की पहली उपस्थिति है, इसलिए यह अच्छा है!

यह सबमिशन मुख्य रूप से खोता है क्योंकि रिकॉर्डिंग स्थापित करना और ऐसा करना इस भाषा के क्लाइंट / सर्वर डिज़ाइन के कारण एक क्रिया प्रक्रिया है। फिर भी, यह बहुत कम कोड में बहुत अधिक शक्ति के साथ एक शांत भाषा है जब आप इसे केवल सफेद शोर से अधिक जटिल चीजों को करने के लिए कहते हैं।

फ़ाइल अवधि प्रतीक्षा () मान को बदलकर सेट की गई है। मैं इसे एक चर में रख सकता था, लेकिन वास्तव में इसका कोई मतलब नहीं है क्योंकि सुपरकोलाइडर के पास बोलने के लिए कोई stdio नहीं है। अन्तरक्रियाशीलता कोड में हेरफेर कर रही है जबकि सर्वर अभी भी खेल रहा है। अनिवार्य रूप से, आईडीई है मैं / हे (जब तक आप अपनी रचना के लिए एक यूआई का निर्माण)।

यहाँ गोल्फ संस्करण है:

{WhiteNoise.ar(1)}.play;s.prepareForRecord;Routine.run{s.record;wait(99);s.stopRecording}

यहां विकल्प के साथ एक गोल्फ संस्करण है जिसे या तो एआईएफ या वेव में रिकॉर्ड किया जा सकता है, और एक नमूना प्रारूप निर्दिष्ट करें (int16, int8, और फ्लोट सभी विकल्प हैं)। दुर्भाग्य से, सभी बोनस के साथ भी, किराए से ऊपर का संस्करण बेहतर है। यह 139 - 30% = 97.3 बाइट होगा।

s.recSampleFormat='int16';s.recHeaderFormat='wav';{WhiteNoise.ar(1)}.play;s.prepareForRecord;Routine.run{s.record;wait(99);s.stopRecording}

और यहाँ उत्तरार्द्ध का एक ungolfed संस्करण है, इसलिए आप देख सकते हैं कि क्या चल रहा है।

s.recSampleFormat='int16';
s.recHeaderFormat='wav';

{WhiteNoise.ar(1)}.play;
s.prepareForRecord;

Routine.run{
    s.record;
    wait(99);
    s.stopRecording
}

सुपरकोलाइडर के उपयोग के लिए एक वोट। वहाँ कई अन्य पहेली के लिए यह महान होगा रहे हैं। की जाँच करें संगीत और ऑडियो
ऐसा नहीं है कि चार्ल्स

4

बैश + एएलएसए, स्कोर: 44 (52 चार्ट - (10% + 5%) बोनस)

अन्य bashउत्तर की तुलना में लंबा है , लेकिन अवधि और बिटरेट को स्वीकार करता है। फ़ाइल में यथोचित रूप से सही हेडर जोड़ता है, इसलिए यथोचित पोर्टेबल होना चाहिए:

arecord -r$2|head -c44;head -c$[$2*$1] /dev/urandom

स्क्रिप्ट के रूप में सहेजें, chmod +xयह और रन:

$ ./wav.sh 1 44100 > c.wav
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 44100 Hz, Mono
$ 

ध्यान दें, .wav आउटपुट को रोकना है, इसलिए इसे एक फ़ाइल पर पुनर्निर्देशित किया जाना चाहिए।


आप गति / आवश्यकता के बजाय / dev / urandom के बजाय / dev / random पढ़कर लगभग 1,20 अक्षर बचा सकते हैं।
गियुलियो मस्केल्लो

1
उत्पादन स्टड करने के लिए है ?
user253751

0

C 127 115 बाइट्स

#define H htonl
main(c){for(write(1,(int[]){H(779316836),H(24),-1,H(2),H(8000),H(1)},24);;write(1,&c,1))c=rand();}

अधिकांश कोड * .au फ़ाइल के लिए हेडर लिखते हैं। यह छद्म आयामी ध्वनि फ़ाइल को मानक रूप से प्रिंट करता है।

नमूना दर को बदलकर समायोजित किया जा सकता है 8000

ctrl-cजब भी आप रोकना चाहें तब अवधि को रोक कर समायोजित किया जा सकता है :-)


0

जावास्क्रिप्ट, 167 बाइट्स

चेतावनी: चलाने से पहले वॉल्यूम कम करें। सफेद शोर बुरा है

फ़ाइल उत्पन्न न करें, शायद वह नहीं था जो अपेक्षित था।

-4 बाइट्स केवल बायें चैनल पर ही चलाएं

c=new AudioContext()
n=c.createScriptProcessor(s=512)
n.connect(c.destination)
n.onaudioprocess=e=>{a=s;while(a--){e.outputBuffer.getChannelData(0)[a]=Math.random()}}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.