अंक 0 से 9 तक जोर से बोलें


15

इलेक्ट्रॉनिक्स से इस सवाल से प्रेरित होकर , यहाँ, आपके लिए एक चुनौती है:

एक प्रोग्राम या सबरूटीन लिखें जो दशमलव अंकों (0 से 9) के अनुक्रम में लेता है और उन्हें मौजूदा भाषण संश्लेषण उपकरण का उपयोग किए बिना , जोर से बोलता है ।

इनपुट:

आप किसी भी उचित प्रारूप में प्रदान किए जाने वाले इनपुट अंकों के लिए पूछ सकते हैं, जैसे कि ASCII अंकों की एक स्ट्रिंग के रूप में, पूर्णांक का एक सरणी, एक बीसीडी-एन्कोडेड नंबर, आदि। यदि आपका समाधान एक निष्पादन योग्य कार्यक्रम है, तो आप इनपुट के रूप में ले सकते हैं। एक कमांड लाइन पैरामीटर, इसे मानक इनपुट से पढ़ें, या किसी अन्य उचित तरीके से प्राप्त करें।

आपका कार्यक्रम प्रति आह्वान में कम से कम आठ अंक बोलने में सक्षम होना चाहिए । आप मान सकते हैं कि पहला अंक शून्य नहीं है, जब तक कि यह एकमात्र अंक न हो।

आउटपुट:

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

आप इस बात का विवरण तय करने के लिए स्वतंत्र हैं कि संख्याएँ कैसे बोली जाएंगी, लेकिन आपके आउटपुट में अंग्रेजी भाषा के अंकों का समावेश होना चाहिए , जो सामान्य अंग्रेजी बोलने वाले के लिए समझ में आता है , और यह स्पष्ट होना चाहिए कि श्रोता के लिए सटीक रूप से अनुवाद करने में सक्षम होना चाहिए एक बोले गए आठ-अंकीय यादृच्छिक संख्या। नहीं, बस beeping n बार में नहीं गिना जाता। अंकों के बीच ठहराव को शामिल करना न भूलें।

स्कोरिंग:

मानक स्कोरिंग नियम लागू होते हैं: आपका स्कोर बाइट्स में आपके कोड की लंबाई है या, यदि आपका कोड यूनिकोड पाठ में, यूनिकोड वर्णों में लिखा गया है। सबसे कम स्कोर जीतता है। कोई भी भाषा जाती है।

जैसा कि इलेक्ट्रॉनिक्स पर मूल प्रश्न है। मैं एम्बेडेड प्रोग्रामिंग के बारे में था, मुझे लगा कि निम्न-स्तरीय भाषाओं का उपयोग करके लेखकों को एक हड्डी टॉस करना उचित होगा: यदि आपका समाधान संकलित भाषा में लिखा गया है, तो आप लंबाई की गणना करना चुन सकते हैं अपने स्कोर के रूप में बाइट्स में संकलित निष्पादन योग्य फ़ाइल । (हाँ, precompiled बाइटकोड, जैसे कि जावा .classफ़ाइल, भी ठीक है।) यदि आप इस विकल्प का उपयोग करना चुनते हैं, तो कृपया अपने उत्तर में संकलित निष्पादन योग्य की एक प्रति (जैसे एक हेक्स डंप के रूप में) को अपने स्रोत कोड के साथ शामिल करें। और संकलक संस्करण और विकल्प जो आप इसे उत्पन्न करने के लिए उपयोग करते हैं।

एक माननीय उल्लेख , एक +50 प्रतिनिधि इनाम के साथ, पहले उत्तर के लिए दिया जाएगा जो मूल प्रश्न के मानदंडों को भी पूरा करता है , अर्थात 4 के फ्लैश और SRAM के 1 kb के साथ एम्बेडेड MCU पर चलने में सक्षम है।

प्रतिबंध:

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

आप किसी भी पहले से मौजूद स्पीच सिंथेसिस टूल या लाइब्रेरी या ऑडियो डेटा के संकलन का उपयोग नहीं कर सकते हैं (जब तक कि आप उनके स्कोर के हिस्से के रूप में उनके आकार की गणना नहीं करते हैं), भले ही वे आपके चुने हुए भाषा के मानक रनटाइम वातावरण में शामिल हों।


Ps। मैं अपने खुद के समाधान के बाद में पोस्ट कर सकता हूं, अगर मैं इसे कुछ ऐसा बनाने का प्रबंधन करता हूं जो वास्तव में समझ में आता है। हालांकि, अपनी खुद की पोस्टिंग से शर्मिंदा न हों; इस बिंदु पर, कोई भी उत्तर एक अच्छा उत्तर है।
इल्मरी करोनें

1
क्या हमें बोले गए अंकों का एक डेटाबेस डाउनलोड करने की अनुमति है (और स्कोर की ओर इसके आकार की गणना करें) या हमें अपनी खुद की आवाज़ रिकॉर्ड करनी होगी? मुझे संदेह है कि मैं भाषण के नमूने एल्गोरिथम उत्पन्न कर सकता हूं।
जॉन ड्वोरक

उम ... "आउटपुट" अनुभाग निर्दिष्ट नहीं करता है कि हमें भाषण नमूने का उत्पादन करना चाहिए। क्या हमें केवल दस बार बीप करने की अनुमति है?
जॉन ड्वोरक

@PeterTaylor: यदि आप उनके आकार को अपने स्कोर के हिस्से के रूप में गिनते हैं, तो यह ठीक है। मैं बस इस बात से चिंतित था कि वहाँ कुछ सिस्टम हो सकता है जिसमें अंकों के ऑडियो नमूने हैं जो इसके मानक रनटाइम वातावरण में कहीं दफन हैं।
इल्मरी करोनें

3
चूंकि ऐसे लोगों की एक स्थिर धारा लगती है जो हेवीवेट पुस्तकालयों के आसपास प्रश्न को अंत तक नहीं पढ़ते हैं और तुच्छ आवरणों को पोस्ट करते हैं, इसलिए "यह स्वयं करें" पहलू पर और भी अधिक जोर देने के लिए संपादन के लायक हो सकता है।
पीटर टेलर

जवाबों:


10

रूबी - 3710 = 90 वर्ण कोड + 3620 बाइट्स डेटा

require'zlib'
$><<$*[0].chars.map{|x|Zlib::Inflate.inflate File.open(x).read}.join(?0*5e3)

इनपुट: एक एकल कमांड लाइन तर्क, पढ़ने के लिए संख्या

आउटपुट: कच्चा साउंड डेटा, PCM 8bit / 8kHz

यह किसी भी इनपुट स्ट्रिंग को पढ़ सकता है, जब तक

  • इसमें केवल वे अक्षर हैं जो मान्य फ़ाइल नाम हैं। केवल चार वर्णों के लिए, आप उस सेट को सभी वर्णों में बड़ा कर सकते हैं।
  • आपके पास नेक्सेसरी फाइलें हैं।
  • क्यों ओह आप स्पेस डी ओह एन एपोस्ट्रोफी टी स्पेस एम आई एन डी स्पेस टी एइच आई एस अवधि

5e3दो शब्दों के बीच ठहराव को कूटबद्ध करता है। यहां, 5ksamples ~ = 0.6s। इच्छानुसार चिकोटी।

अब, मुश्किल हिस्सा 4K में नमूना फ़ाइलों को प्राप्त करना है और फिर भी उन्हें आसानी से और पर्याप्त गुणवत्ता में विघटित करने में सक्षम है। यहाँ है कि मैं उन्हें कैसे मिला:

  • ध्वनि फ़ाइलों का उत्पादन करने में सक्षम पाठ से वाक् इंजन लें। विकिपीडिया में एक है
  • इसे सभी अंकों वाला पाठ फ़ीड करें, आदर्श रूप से एक साथ बंद हुआ। मैंने http://en.wikipedia.org/wiki/Base_13 का उपयोग किया
  • Downsample।
  • ध्वनि संपादक में प्रत्येक भाग को काटें
  • कच्ची फ़ाइल के रूप में सहेजें।
  • प्रत्येक नमूने को कम करें (कम-क्रम बिट्स को त्यागें)।
  • हवा निकालना।

अब, एक को एक नमूना दर और परिसमापन राशि का चयन करना होगा। बहुत अधिक, और ध्वनि समझ में नहीं आएगा। बहुत कम, और आप फिट नहीं हैं। मैंने 8kHz / 3b के लिए समझौता किया है। वहाँ वे हैं: https://github.com/honnza/drops/raw/master/digits.zip

  • 8 kHz * 4b / नमूना और उच्च गुणवत्ता - बहुत बड़ा है
  • 8KHz * 3b / नमूना - निम्न गुणवत्ता, लेकिन यह 4K में फिट बैठता है
  • 8KHz * 2b / नमूना - kch khhhhhhhhh [समझने योग्य नहीं]
  • 2KHz * 8b / नमूना - बहुत बड़ा
  • 2KHz * 3b / नमूना - kch khhhhhhhhh
  • 1KHz * 8b / नमूना - kch khhhhhhhhh

यहाँ डिकिमेशन स्क्रिप्ट है:

require'zlib'
Dir.glob "*.raw" do |fname|
  File.open fname[/\d/], "wb" do |out|
    File.open fname do |input|
      bytes = input.bytes.to_a
      bytes.map! {|x|x&0xE0}
      dfl = Zlib::Deflate.deflate(bytes.pack("C*"),9)
      dfl.each_byte do |byte|
        out.print byte.chr
      end
      puts "done #{fname}: #{dfl.size}"
    end
  end
end

मूल चुनौती के रूप में: कोड और फ़ाइल तालिका के लिए 476 बाइट्स हैं। यह थोड़ा बहुत निर्भर करता है कि हम एक छोटे पुस्तकालय के साथ कितने छोटे हो सकते हैं। यदि neccessary है, तो हम यहाँ और वहाँ कुछ कोनों को काट सकते हैं, जिससे ऑडियो नमूनों को थोड़ा और अधिक आक्रामक तरीके से क्रॉप किया जा सकता है। [fo:r]या[o:] वास्तव में कोई फर्क नहीं पड़ता, लेकिन यह बाइट्स बचाता है। संख्याओं को काटते समय मैं कुछ उदार रहा हूँ। इसके अलावा, एक अलग डिसीमेशन स्कीम या डाउनसमलिंग के लिए कुछ डिमिनेशन का त्याग करने से मदद मिल सकती है - मैं बाद में इनके साथ खिलौना बनाऊंगा। इसके अलावा, DEFLATE हेडर छोड़ने से अंतरिक्ष की एक छोटी राशि बच सकती है।

कॉनकैटनेटिंग साउंड सैंपल काफी आसान है, लेकिन 4K थोड़ा टेढ़ा है। यदि आप 4k स्थान से बंधे नहीं हैं, तो मैं सुझाव देता हूं कि कम गिरावट आएगी। नमूना प्रति 4 बिट वास्तव में काफी अच्छी तरह से किराए पर है और केवल थोड़ा बड़ा है।


+1, बुरा नहीं है। स्पष्टता बहुत मामूली है, हालांकि: मैंने कुछ यादृच्छिक संख्याओं को स्थानांतरित करने की कोशिश की और लगभग 70% सफलता दर प्राप्त की। (मैं 99% के करीब कुछ के लिए उम्मीद कर रहा था।) मैं अभी भी माननीय उल्लेख बात के बारे में बाड़ पर थोड़ा सा हूं: जब आपने एक बहुत अच्छा तर्क दिया है कि 4K इस तरह से प्राप्य हो सकता है, तो आपने नहीं किया है वास्तव में इसका प्रदर्शन किया। यहां तक ​​कि अगर आप सी के लिए रूबी खाई है (जो करने के लिए काफी आसान लगता है; मैं विश्वास पर उस हिस्से को लेने के लिए तैयार हूं), क्या आप वास्तव में शेष फ़्लैश स्थान में एक डीफ्लेटर डिकोडर फिट कर सकते हैं ? इसके अलावा, जैसा कि मैंने उल्लेख किया है, ध्वनि की गुणवत्ता बहुत खराब है।
इल्मरी करोनन

Ps। बेहतर संपीड़न पर कुछ सुझाव: आप सभी नमूनों को एक निश्चित लंबाई में नल बाइट्स (जो अच्छी तरह से संपीड़ित करना चाहिए) के साथ पैड कर सकते हैं और उन्हें एक संपीड़ित फ़ाइल में समेट सकते हैं, फिर डीकंप्रेस और इसे स्लाइस कर सकते हैं। इसके अलावा, इस जवाब से KZIP चाल आपको बेहतर संपीड़न दे सकती है। अंत में, समरूप प्रतियों के साथ समरूप स्वरों को बदलने के लिए संयुक्त ध्वनि फ़ाइल को संपादित करने का प्रयास करें।
इल्मरी करोनें

ठीक है, मूल ध्वनि नमूने वास्तव में या तो आईएमओ के लिए समझ में नहीं आ रहे थे - डाउनसमलिंग ने इससे बहुत कम नुकसान पहुंचाया। सबसे छोटी DEFLATE लाइब्रेरी जो मुझे पता है - विकिपेडा से जुड़ी पहली - 500 बी के बारे में है। सच कहूं, क्या आप चाहते हैं कि मैं उस विशिष्ट उपकरण को इनफ्लो को पोर्ट करूं? मुझे यह वास्तव में मिल सकता है, लेकिन मैंने पहले कभी एआरएम के लिए कोडित नहीं किया है।
जॉन ड्वोरक

मैं 70% सफलता दर के बारे में बहुत आश्चर्यचकित हूं - मुझे समझने में आसान होने के लिए संख्या मिली है। आपने किस अंक को सबसे अधिक भ्रमित किया?
जॉन ड्वोरक

एक कॉर्टेक्स एम 0 को यह पोर्टिंग शायद एक है बिट बहुत ज्यादा पूछने के लिए (हालांकि अगर आप ऐसा कर सकते हैं, कि भयानक होगी!), लेकिन मुझे लगता है कि एक स्टैंड-अलोन बाइनरी (+ डेटा फ़ाइलें, यदि कोई हो) के तहत ढाले लगता है 4k एक उचित प्रदर्शन प्रतीत होगा। (फ़ाइल I / O के लिए libc में स्टेटिक रूप से लिंक करने की आवश्यकता नहीं है, क्योंकि आपको एक एम्बेडेड डिवाइस पर इसकी आवश्यकता नहीं होगी, लेकिन DEFLATE कोड को निश्चित रूप से गिना जाना चाहिए।) मूल रूप से, ऐसा कुछ जिसे आप मूल प्रश्न के उत्तर के रूप में पोस्ट कर सकते हैं। Electronics.SE पर और आत्मविश्वास से कहें "यदि आप इसे अपने डिवाइस के लिए संकलित करते हैं, तो मुझे यकीन है कि यह फिट होगा"।
इल्मरी करोनें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.