एक मेट्रोनोम का निर्माण


36

परिचय

कुछ दिनों पहले मुझे किसी चीज़ के लिए मेट्रोनोम की ज़रूरत थी। मेरे पास कोई उपलब्ध नहीं था इसलिए मैंने ऐप स्टोर से एक ऐप डाउनलोड किया। एप्लिकेशन का आकार 71 एमबी था !!!
टिक-टॉक्स बनाने के लिए 71 एमबी ...?!
इसलिए कोड-गोल्फ मेरे दिमाग में आया और मैं सोच रहा था कि क्या आप में से कुछ लोग इसमें सुधार कर सकते हैं।

चुनौती

कुछ ध्वनि को आउटपुट करने वाले कुछ कोड को गोल्फ करें। यह बहुत अप्रासंगिक है कि किस तरह की ध्वनि है। यदि आवश्यक हो तो कुछ ध्वनि फ़ाइल बनाएं ... लेकिन सिस्टम बीप काम भी करेगा। ( यहाँ कुछ ध्वनि मैंने बनाई है ... कुछ खास नहीं। )

इनपुट : प्रति मिनट धड़कता है मेट्रोनोम आउटपुट।

उदाहरण

यह एक गैर-गोल्फ वाला जावा-संस्करण है! यह आपको केवल कार्य दिखाना है।

public class Metronome {
  public static void main(String[] args) throws InterruptedException {
    int bpm = Integer.valueOf(args[0]);
    int interval = 60000 / bpm;

    while(true) {
        java.awt.Toolkit.getDefaultToolkit().beep();
        // or start playing the sound
        Thread.sleep(interval);
        System.out.println("Beep!");

    }
  }
}

नियम

आप बाहरी परिवादियों का उपयोग नहीं कर सकते हैं, केवल भाषा के उपकरण की अनुमति है।
केवल स्रोत कोड की बाइट्स ... ध्वनि फ़ाइल नहीं।

यह , इसलिए कम से कम बाइट्स जीत के साथ जमा करना!

संपादित करें:

उदाहरण आउटपुट: तो ऐसा कुछ 120 बीपीएस के लिए आउटपुट होगा : लिंक


1
क्या आप I / O के लिए कुछ उदाहरण जोड़ सकते हैं (कुछ ध्वनि रिकॉर्ड करें और इसे अपलोड करें, यहां लिंक पोस्ट करें)?
Addison Crump

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

3
क्या आप एक लीडरबोर्ड स्निपेट जोड़ सकते हैं ?
Addison Crump

1
मुझे संदेह है कि आपके द्वारा डाउनलोड किए गए अधिकांश ऐप बहुत ही सुंदर ग्राफिक्स और ध्वनि प्रभाव हैं। यह उन टॉर्च ऐप की तरह है जो स्क्रीन को सफेद करने के अलावा कुछ नहीं करते लेकिन फिर भी किसी तरह एमबी का दसियों तक इस्तेमाल कर लेते हैं ...
डारेल हॉफमैन

1
सटीकता पर क्या आवश्यकता है? आपके नमूने में, दोनों beep()और कंसोल आउटपुट बिल्कुल IIRC नहीं हैं। न ही sleep()मधुमक्खी पालन के लिए जाना जाता है।
न्यू लॉक

जवाबों:


19

गणितज्ञ, 26 बाइट्स

Pause[Beep[];60/#]~Do~∞&

Doसामान्य रूप से के रूप में प्रयोग किया जाता है एक संकीर्ण अर्थ में पाश "के लिए": प्रत्येक के लिए कोड के इस टुकड़े को दोहराने iसे xकरने के लिए y... या बस कोड के इस टुकड़े को दोहराने nबार। एक संख्या के बजाय nहम इसे अनंत लूप दे सकते हैं हालांकि एक अनंत लूप बनाने के लिए। लूप बॉडी Pause[Beep[];60/#]जो लिखने का एक गोल्फ का तरीका है Beep[];Pause[60/#]जहां #फ़ंक्शन तर्क है।

अगर यह अंततः कॉल स्टैक को उड़ाने के समाधान के लिए स्वीकार्य है, तो हम पुनरावर्ती समाधान के साथ एक बाइट बचा सकते हैं:

#0[Beep[];Pause[60/#];#]&

मुझे नहीं पता ~Do~∞था कि यह संभव था। एक Forलूप केवल मुझे 29 बाइट्स के लिए मिला। (इसके अलावा, मेरा व्यक्तिगत रूप से मानना ​​है कि 26-बाइट संस्करण एकमात्र वैध है।)
लेजियन मैमल 978

@ LegionMammal978 दुर्भाग्य से, एक चर से आने ~Do~∞पर काम करने के लिए प्रतीत नहीं होता है । (मैंने कोशिश की है कि जब आप अपनी सत्य मशीन को गोल्फ के लिए इस्तेमाल करें।)
मार्टिन एंडर

1
Attributes[Do]शामिल है HoldAll, इसलिए मेरा अनुमान है कि _~Do~∞एक विशेष मूल्यांकन पैटर्न है।

@ LegionMammal978 ऐसा लगता है चर, कर अधिक की तरह है क्योंकि के लिए त्रुटि संदेश Do[...,a]जहां aअनंत रखती है वास्तव में के रूप में कॉल से पता चलता Do[...,{a}]
मार्टिन एंडर

14

अजगर, 11 10 9 बाइट्स

मुझे याद दिलाने के लिए अदनान का शुक्रिया #

#C7.dc60Q

फॉरएवर ( #), प्रिंट Cहार् कोड 7। फिर ( ) इनपुट ( ) द्वारा विभाजित नींद ( .d) 60सेकंड ।cQ


@ अदनान उस एक के बारे में भूल गए। धन्यवाद।
पुरकाकूदरी

क्या आपको स्थान की आवश्यकता है?
lirtosiast

@ThomasKwa हाँ। IIRC 7.को एक संख्या के रूप में लिया जाएगा।
कॉनर ओ'ब्रायन


2
मैं सोने की कोशिश नहीं कर सका जब मैंने कोशिश की। यह यूनिक्स समय को प्रिंट करता रहा
बसुकक्सुआन

8

जावास्क्रिप्ट, 36 45 42 41 34 बाइट्स

@RikerW को 1 बाइट धन्यवाद दिया

सहेजे गए 1 बाइट @ETHproductions के लिए धन्यवाद

n=>{for(;;sleep(60/n))print("\7")}

यह एक फंक्शन है।

अगर मैं उपयोग करता हूं `\7`, तो स्पाइडरमोनकी शिकायत करता है कि अष्टक शाब्दिक हैं।

वैकल्पिक, 31 बाइट्स

n=>{for(;;sleep(60/n))print``}

समस्या यह है कि unprintables छीन लिए गए हैं लेकिन यह काम करना चाहिए।


दमित, मैं बस कुछ इस तरह की पोस्ट करने वाला था। मैं अभी भी इसे पोस्ट करने जा रहा हूं (क्योंकि यह नोड और सभी का उपयोग करता है) क्योंकि मैं एक अलग दृष्टिकोण का उपयोग करता हूं।
Addison Crump

यदि आप इसे प्रश्न पूछने के तरीके से देखते हैं, तो पुनरावर्ती समाधान संभव नहीं होगा। मेट्रोनॉम काम करने और काम करने के लिए बने होते हैं ... कुछ समय बाद दुर्घटनाग्रस्त होने के लिए नहीं।
PEAR

@PEAR को यह दुर्घटना नहीं करनी चाहिए क्योंकि कोई परिवर्तन नहीं किया जा रहा है। केवल एक चीज जो इसे दुर्घटना का कारण बना सकती है वह है आधुनिक कंप्यूटरों को छोड़कर टर्मिनल बफर जो कि ले सकता है> 50-100 साल मुझे लगता है कि
डाउनगैट

यह किस पर्यावरण के तहत चलता है? मैंने क्रोम और Node.js की कोशिश की है, लेकिन मैं इसे काम नहीं कर सकता।
स्टारबिम्रेनबोलाब्स

@starbeamrainbowlabs इस पर जावास्क्रिप्ट शेल (स्पाइडरमोंकी) का उपयोग किया गया है
डाउनगेट

8

बैश, 53 55 41 बाइट्स

14 बाइट्स 1 से शेविंग करने के लिए @ डेनिस का धन्यवाद

ठीक है, सच्चाई का समय: मैं गोल्फिंग बैश में भयानक हूं। किसी भी मदद की बहुत सराहना की जाएगी।

echo " ";sleep `bc -l<<<60/$1`;exec $0 $1
      ^ That's ASCII char 7

1 पवित्र बकवास। कोई आश्चर्य नहीं कि कोई भी डेनिस को पछाड़ नहीं सकता।


है while 1संभव?
PEAR

@PEAR नुप - ने पहले ही कोशिश कर ली थी।
Addison Crump

while printf \\aशायद?
नील

यह काम नहीं करता है क्योंकि बैश पूर्णांक विभाजन का उपयोग करता है। आपको उपयोग करने की आवश्यकता होगी bc
एक स्पेगेटो

1. बीईएल चरित्र बैश के लिए विशेष नहीं है, इसलिए आपको उद्धरण की आवश्यकता नहीं है। 2. यदि आप सीएलए के रूप में इनपुट पढ़ते हैं, तो आपको आवश्यकता नहीं है read। 3. echoकोड 0 के साथ मौजूद है, इसलिए आप उस विवरण का उपयोग कर सकते हैं true
डेनिस

7

जावास्क्रिप्ट ईएस 6 (ब्राउज़र), 43 बाइट्स

यह नियम लंबा हो सकता है:

x=>setInterval('new Audio(1).play()',6e4/x)

इस फ़ंक्शन को एक नाम (जैसे F=x=>...) दें और इस पृष्ठ पर ब्राउज़र कंसोल में दर्ज करें । फिर अपने बीपीएस के साथ फ़ंक्शन को कॉल करें, जैसे F(60), और जादू होने की प्रतीक्षा करें। :-)

यह काम क्यों करता है? खैर, b.htmlएक फ़ोल्डर में है जिसका नाम एक फाइल है 1, जो ओपी से सैंपल साउंड फाइल है। मुझे यकीन नहीं है कि यह नियमों के भीतर है (मुझे लगता है कि यह शेल संस्करण की तरह है; इसे एक विशिष्ट वातावरण में चलाने की आवश्यकता है), लेकिन यह एक शॉट के लायक था।

सुरक्षित संस्करण, 57 बाइट्स

यदि किसी कारण से उपरोक्त कोड की अनुमति नहीं है, तो इसके बजाय यह प्रयास करें:

x=>setInterval('new Audio("//ow.ly/Xrnl1").play()',6e4/x)

किसी भी पृष्ठ पर काम करता है!


यह एक अंतरराज्यीय समाधान है। जब आप डाउनलोड करते हैं और फ़ाइल का नाम बदलते हैं, तो यह बहुत छोटा होता है?
PEAR

@PEAR छोटा होगा, लेकिन तब उसे चलाने के लिए उसी फ़ोल्डर में ध्वनि फ़ाइल के साथ अपने स्वयं के वेबपेज की आवश्यकता होगी।
18

ओह, यह जावास्क्रिप्ट xD है ... तुम सही हो
PEAR

@PEAR वहाँ, मैंने यह किया। क्या यह नया समाधान नियमों के भीतर है?
ETHproductions

हुह। आप यह निर्दिष्ट कर सकते हैं कि यह निश्चित वेबपेज के साथ JS है। यह एक आकर्षक व्याख्याकार है, इसलिए यह एक मान्य भाषा है।
एडिसन क्रम्प

6

05AB1E , 31 बाइट्स

कोड:

I60s/[7ç?D.etime.sleep(#.pop())

अगर मेरे पास N सेकंड प्रतीक्षा करने के लिए अंतर्निहित है, तो यह 11 बाइट्स हो सकता है। दुर्भाग्य से, मामला यह नहीं है। यहाँ स्पष्टीकरण है:

I                               # Push input
 60                             # Push 60
   s                            # Swap the top 2 items
    /                           # Divide the top 2 items
     [                          # Infinite loop
      7ç                        # Push the character \x07
        ?                       # Output it, which give a sound
         .e                     # Evaluate the following as Python code
           time.sleep(       )  # Wait for N seconds
                      #         # Short for stack
                       .pop()   # Pop the last item

आईएसओ 8859-1 एन्कोडिंग का उपयोग करता है।


यह पहले 05AB1E उत्तरों में से एक होना चाहिए। ओ। यह कोड की तरह time.sleepऔर .pop()इसके बीच में देखने के लिए बहुत अजीब लगता है। ;)
केविन क्रूज़सेन

6

ऑसस्क्रिप्ट, 39 बाइट्स

on run a
repeat
beep
delay 60/a
end
end

वहाँ सचमुच एक आदेश बीप कहा जाता है? Sweeeet!

प्रतिबंधित लाइसेंस के कारण केवल मैक ओएस एक्स पर रन करने योग्य, लेकिन चलाने, करने के लिए:

osascript -e "on run a
repeat
beep
delay 60/a
end
end" bpm

6

पायथन, 68 67 57 बाइट्स

@FlagAsSpam को 1 बाइट धन्यवाद दिया गया

@ Adnan के लिए 9 बाइट्स से बचा लिया गया

import time
a=input()
while 1:print"\7";time.sleep(60./a)

इसके अलावा यह UNIX प्रारूप में लाइन एंडिंग्स को परिवर्तित करने के बाद 2 बाइट्स कम लेता है।

पुराना संस्करण, जो वास्तव में कमांड लाइन तर्क (66 बाइट्स) के रूप में बीपीएम लेता है:

import sys,time
while 1:print"\7";time.sleep(60./int(sys.argv[1]))

4
क्या तुम नहीं कर सकते print"\7";? मुझे यकीन नहीं है, लेकिन मुझे यकीन है कि काम करता है।
Addison Crump

@Andan नहीं, इनपुट () उपयोगकर्ता से इनपुट का अनुरोध करता है। मुझे नहीं पता कि क्या इसे वैध इनपुट माना जाता है। इसके अलावा संख्या में रूपांतरण की आवश्यकता है।
वेबवार २३'१६ को

1
कैसे a=input()और aजगह के बारे में int(sys.argv[1])? मैंने हमेशा सोचा है कि पायथन 2 स्वचालित रूप से इनपुट का मूल्यांकन करता है और इसलिए उसे अंतर रूपांतरण की आवश्यकता नहीं है, लेकिन मैं गलत हो सकता हूं।
अदनान

@ और input()वास्तव में ऑटो मूल्यांकन करता है। मैं उस सुविधा के बारे में भूल गया। यह हालांकि unpythonic है - शायद पुराने समय से एक विरासत।
वेबवार

पूरी तरह से हटाते हुए, के time.sleep(60./a)साथ प्रतिस्थापित किया जा सकता है ? time.sleep(60./input())a=input()
ताली


4

विटसी, 14 बाइट्स

a6*r/V1m
<wVO7

वर्बोस मोड (दुभाषिया जल्द ही आ रहा है):

0:                              // a6*r/V1m
push a; // 10
push 6;
multiply top two; // 60
reverse stack; // bpm on top
divide top two; // bpm/60
save/push permanent variable; 
push 1;
goto top method; // goes to 1
1:                              // <wVO7
go backward; // infinite loop, from the bottom of 1
wait top seconds;
save/push permanent variable; // pushes the bpm in terms of seconds of delay
output top as character;
push 7;

मूल रूप से, मैं एक अनंत लूप में लिपटे हुए wएक निश्चित संख्या में सेकंड के लिए प्रतीक्षा करने के लिए ऑपरेटर का उपयोग करता हूं bpm/60। फिर, मैं ASCII वर्ण 7 ( BEL) के टर्मिनल आउटपुट के साथ शोर करता हूं ।


अच्छा लग रहा है, लेकिन मैं यह कैसे परीक्षण कर सकता हूं? :)
PEAR

@PEAR आपको दुभाषिया डाउनलोड करना होगा (शीर्षक में इसे लिंक करना भूल गया)। इसे एक फाइल में सेव करें और इसे रन करें java -jar Vitsy.jar <filename>
Addison Crump

4

सी #, 118 बाइट्स

class A{static int Main(string[]a){for(;;System.Threading.Thread.Sleep(60000/int.Parse(a[0])))System.Console.Beep();}}

मूल समाधान।


ASCII char 7 क्यों नहीं प्रिंट करें?
Addison Crump

@FlagAsSpam यह अधिक लंबा है: सिस्टम बीप का उपयोग करता है System.Console.Beep();, और चरित्र का उपयोग करता है मुद्रण System.Console.Write('<\a character>');
लीजनमोनमल 978

ओह। एक चरित्र लिखने के लिए बहुत कुछ है।
एडिसन क्रम्प

4

जावा, 103 82 बाइट्स

21 बाइट्स से शेविंग करने के लिए @ जस्टिन को धन्यवाद!

हे भगवान।

void x(int b)throws Exception{for(;;Thread.sleep(60000/b))System.out.print('\7');}

नमूना कार्यक्रम की विधि और गोल्फ संस्करण।


के System.out.print('\7');बजाय क्यों नहीं java.awt.Toolkit.getDefaultToolkit().beep();?
जस्टिन

@ जस्टिन \ _ पूरी तरह से रेगेक्स पात्रों से बचने के लिए है।
एडिसन क्रम्प

1
नो बैकलैश एक एस्केप सीक्वेंस है। '\7'घंटी का पात्र है, जो बाहर छपने पर ध्वनि करता है
जस्टिन

@ जस्टिन हुह। मैंने हमेशा उस पर त्रुटियों को फेंका है (जब दोहरे उद्धरण चिह्नों का उपयोग किया जाता है)। मेरी गलती। धन्यवाद! : D
Addison Crump

3

जीएमसी -4 मशीन कोड, 21.5 बाइट्स

GMC-4 एक 4-बिट कंप्यूटर है जिसे गैकेन नाम की कंपनी ने असेंबली इंस्ट्रक्शन सेट और कंप्यूटर में असेंबली लैंग्वेज के सिद्धांतों को पढ़ाया है। यह दिनचर्या बिग-एंडियन दशमलव में डेटा मेमोरी पतों के 0x5Dमाध्यम से इनपुट लेती है 0x5F(यानी, एक अंक प्रति निकले)।

एल्गोरिथ्म मूल रूप से स्मृति में इनपुट जोड़ रहा है और 0.1s की प्रतीक्षा कर रहा है, जब तक कि यह कम से कम 600 न ​​हो, और तब 600 और घटाकर, एक अनंत लूप में। चूंकि GMC-4 में रजिस्टर स्वैप फ़ंक्शंस का एक समूह है, लेकिन कोई रजिस्टर कॉपी नहीं है फ़ंक्शंस करता है, इसलिए यह कठिन तरीका है।

हेक्स में (दूसरी पंक्ति मेमोरी में स्थिति है):

A24A14A04 80EC AF5A2EF AE5A1EF AD5A0EF 8A6 F2AF09 86ADEEE9F09
012345678 9ABC DEF0123 4567890 ABCDEF0 123 456789 ABCDEF01234

विधानसभा में:

    tiy 2     ;ld y, 0x2
    AM        ;ld a, [0x50 + y]
    tiy 1
    AM
    tiy 0
    AM
start:
    tia 0     ;ld a, 0x0
    cal timr  ;pause for (a+1)*0.1 seconds
    tiy F
    MA        ;ld [0x50 + y], a
    tiy 2
    cal DEM+  ;add a to [0x50 + y]; convert to decimal and carry.
    tiy E     ;do the same for the second digit
    MA
    tiy 1
    cal DEM+
    tiy D     ;and the third.
    MA
    tiy 0
    cal DEM+
    tia A
    M+
    jump beep
    jump start
beep:
    tia 6
    tiy D
    cal DEM-
    cal SHTS  ;'play short sound'
    jump start

अस्वीकरण:

मैं वास्तव में GMC-4 का मालिक नहीं हूं। मैंने सावधानीपूर्वक ऑनलाइन से प्रलेखन के साथ इस कार्यक्रम की जाँच की है, लेकिन मैंने गलती की है। मैं भी अंतर्मन को नहीं जानता। ऐसा लग रहा है कि GMC-4 बड़ा-एंडियन है, लेकिन मुझे यकीन नहीं है। अगर किसी के पास GMC-4 है और वह इसे सत्यापित कर सकता है / मुझे GMC-4 की समाप्ति बताता है, तो मैं इसकी बहुत सराहना करूँगा।


3

सी, 48 बाइट्स

void f(int b){while(printf(""))Sleep(60000/b);}
                            ^ literal 0x07 here

एक Windows- केवल समाधान (स्लीप () फ़ंक्शन, विशिष्ट होने के लिए)।

मैंने (ab) इस तथ्य का भी इस्तेमाल किया कि प्रिंटफ () अनंत लूप स्थिति के रूप में उपयोग करने के लिए मुद्रित वर्णों की संख्या देता है।

प्रिंटफ () कॉल में दोहरे-उद्धरणों के बीच एक चरित्र है, लेकिन यह किसी कारण से यहां प्रदर्शित नहीं होता है। यदि संदेह है, तो कॉपी करें और उदात्त पाठ 2 या नोटपैड ++ में पेस्ट करें, चरित्र को प्रदर्शित किया जाएगाBEL

यह एक C ++ समाधान के रूप में शुरू हुआ था, लेकिन यह थोड़े C ++ के C-सबसेट में गिर गया (क्योंकि, आप जानते हैं, Sleep()की तुलना में थोड़ा छोटा है std::this_thread::sleep_for(std::chrono::milliseconds())) और इससे printf()छोटा है std::cout<<


3

AppleScript 94 बाइट्स

मुझे पता है कि मैं बहुत देर से हूँ, और यह मेरी पहली पोस्ट यहाँ है, लेकिन जो भी हो।

प्रदर्शन संवाद "" डिफ़ॉल्ट उत्तर ""
x 60000 पर सेट करें / परिणाम का पाठ वापस आ गया
दोहराना
भोंपू
देरी एक्स
समाप्त

Ungolfed:

प्रदर्शन संवाद "" डिफ़ॉल्ट उत्तर ""
x 60000 पर सेट करें / (परिणाम का पाठ लौटा)
दोहराना
    भोंपू
    देरी एक्स
अंत दोहराना

अरे, नए जवाब :) दुर्भाग्य से मैं आपके पोस्ट की कोशिश नहीं कर पा रहा हूँ जब तक कि मेरे पास कोई मैक नहीं है;) - लेकिन बहुत बहुत धन्यवाद
PEAR

@ स्वागत है आपका। :)
आप

प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है। यह अच्छा उत्तर है, +1। कृपया जवाब देते रहें!
wizzwizz4

2

वीबीएसस्क्रिप्ट, 113 66 बाइट्स

a=InputBox("")
Do
WScript.Echo(Chr(7))
WScript.Sleep(60000/a)
Loop

यह कार्यक्रम काफी सरल है; यह इनपुट लेता है, बीईएल चरित्र को प्रतिध्वनित करता है, और प्रतीक्षा करता है। लगभग आधे कार्यक्रम को बंद करने के लिए नील के लिए धन्यवाद!


इसमें गलत क्या है WScript.Echo CHR(7)? इसके अलावा, क्या आपका मतलब था 60000?
नील

@ नील आह, हाँ। उन लोगों के बारे में भूल गए ;;
कोनोर ओ ब्रायन

2

रूबी, 37 33 बाइट्स

m=->b{loop{puts"\7"
sleep 6e1/b}}

बहुत सीधा।

यह एक लंबोदर फ़ंक्शन है। यदि आप 60 बीपीएम चाहते हैं, तो आप ऐसा करेंगे m[60]:।


सैद्धांतिक रूप $><<?\aसे बीप के लिए भी काम करना चाहिए। और आपको अपने खरीद के लिए कोई नाम देने की आवश्यकता नहीं है (वसा तीर फ़ंक्शन के साथ सभी जावास्क्रिप्ट समाधान भी इसे बिना बताए छोड़ देते हैं), आप इसे गुमनाम भी कह सकते हैं ->b{loop{$><<?\a;sleep 6e1/b}}[60]:।
मैनटवर्क

@ मैनटवर्क मैं केवल रूबी 2.x है, इसलिए मैं परीक्षण नहीं कर सका ?\a; क्या आपके पास रूबी 1.x है? यदि हां, तो क्या आप परीक्षण कर सकते हैं कि यह काम करता है?
जस्टिन

Well, I have a Ruby 1.9.3 and the code raises no error with it. But I have another problem with the testing: no beep on my machine. Neither Ruby nor anything else. Set something once, no idea what.
manatwork

2

Japt, 30 bytes

6e4/U i`?w Au¹o('../1').play()

The ? should be the literal byte 9A. Test it online! (Sorry about the pop-up delaying the first few beats; this will be removed soon.)

How it works

6e4/U i"new Audio('../1').play()  // Implicit: U = input bps
6e4/U                             // Calculate 60000 / U.
      i                           // Set a timed event every that many milliseconds,
       "new Audio('../1').play()  // running this code every time.
                                  // ../1 is the path to the file used in my JS entry.

2

Mumps, 18 bytes

R I F  H 60/I W *7

Read the BPM into variable I, then F {with two spaces after} is an infinate loop. Halt for 60 seconds / BPM, then write $CHR(7) {Ascii: BEL} to standard output, giving the audio output required, then restart at the infinite loop.


2

Java, 321 chars

Sounds very good. Works only on systems with MIDI support.

import javax.sound.midi.*;import java.util.*;class A{public static void main(String[] a) throws Exception{int d=new Scanner(System.in).nextInt();Synthesizer b=MidiSystem.getSynthesizer();b.open();MidiChannel c=b.getChannels()[0];c.programChange(116);while(true){c.noteOn(0,100);Thread.sleep((int)(d/.06));c.noteOff(0);}}}

.


Looks nice, but this does not work for me: pastebin.com/0CbGYkU0
PEAR

@PEAR fixed. I forgot a cast.
username.ak

@PEAR and an import
username.ak

@PEAR, i had swapped some ops because of no sound
username.ak

2

ChucK, 90 bytes

White noise that is turned on and off every two ticks.

60./Std.atoi(me.arg(0))*1000=>float s;while(1){Noise b=>dac;s::ms=>now;b=<dac;s::ms=>now;}

Explanation

60./Std.atoi(me.arg(0)) //Convert the input to an int and divide 60 by it
*1000                   //Multiply by 1000 (in order to avoid s::second)
=>float s;              //Store it as a float in variable s
while(1)                //Forever,
{Noise b=>dac;          //Connect a noise generator b to the audio output
s::ms=>now;             //Wait for s milliseconds
b=<dac;                 //Disconnect b from the audio output
s::ms=>now;}            //Wait for s milliseconds

This is made to turn on the sound on a beat, then turn it off on the beat after.

98 93 byte version (fancier)

White noise played for 10 milliseconds per tick.

60./Std.atoi(me.arg(0))*1000-9=>float s;while(1){Noise b=>dac;10::ms=>now;b=<dac;s::ms=>now;}

This is made to be a click instead of constant noise being turned on and off.


2

Perl 5, 36 bytes

{{$|=print"\a";sleep 60/$_[0];redo}}

A subroutine; use it as

sub{{$|=print"\a";sleep 60/$_[0];redo}}->(21)

sleep is in seconds, so you can't have more than 60 beeps per minute, not sure if that's a requirement. Also, you can probably keep the same byte count but have a full program by doing something like: $|=<>;{print"\a";sleep 60/$|;redo} (can't test it right now).
ChatterOne

@ChatterOne, according to its documentation, you're right about sleep. But it worked for me.
msh210

1

Jolf, 7 bytes, noncompeting

I added sounds after this very fine challenge was made.

TΑa/Αaj
T       set an interval
 Αa      that plays a short beep (Α is Alpha)
   /Αaj  every 60000 / j (the input) seconds. (Αa returns 60000)

If you so desire to clear this sound, take note of the output. Say that number is x. Execute another Jolf command ~CP"x", and the interval will be cleared.


1

Zsh, 32 bytes

<<<$'\a'
sleep $[60./$1]
. $0 $1

Based on the leading bash answer, but sources instead of execs. The TIO link sources $0:a because of how the original file is executed, but it will work without it.

Try it online!


You're late to the party but this looks like really fine solution!
PEAR

I know I'm late, but I just felt like golfing today. Decided to check on the music tag for fun, and found this challenge. Good one, btw!
GammaFunction

0

Bash + bc + ><>, 44 bytes

Playing on the fact that the ><> interpreter lets you define a tick time :

python fish.py -t $(bc -l<<<"2/$1/60") -c 7o

The ><> code is 7o and should output the BEL character, producing a system beep. It will loop until interrupted.
The -t value is set to (2 / RPM ) / 60 so that the whole code is played RPM * 60 times per second.


Thanks a lot for a new answer after some amount of time after publishing. Doesn't work for me :( Not sure if a problem of my system or something else. I downloaded the fish.py from GitHub and executed your commad (openSUSE). Got this error: (standard_in) 1: syntax error usage: fish.py [-h] (<script file> | -c <code>) [<options>] fish.py: error: argument -t/--tick: expected one argument
PEAR

Have you got bc installed? It looks like the $(bc -l<<<"2/$1/60") did not produce any output. I'll add it to the list of languages of the answer. I haven't been able to fully test my answer yet, so there might be some kind of error too.
Aaron

0

SmileBASIC, 26 bytes

INPUT B$BGMPLAY@8T+B$+"[C]

It can play any general midi instrument, though anything above 9 will use more bytes.


0

Stax, 17 bytes

ü7»♥O╚⌂╥☻≈OyM╜Δ∩`

or, unpacked:

4|A48*x/W2|A]pc{| }*

The program outputs bytes that, when fed through the command line tool aplay with default setting, produce a metronome noise. The input is used as bpm

example:

example-stax-interpreter metronome.stax -i "60" | aplay

You should hear a horrible beeping noise at the desired bpm

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