Xây dựng một Metronome


36

Giới thiệu

Vài ngày trước tôi cần một máy đếm nhịp cho một cái gì đó. Tôi không có sẵn vì vậy tôi đã tải xuống một ứng dụng từ App Store. Ứng dụng có kích thước 71 MB !!!
71 MB để làm tic-toc ...?!
Vì vậy, môn đánh gôn đã xuất hiện trong đầu tôi và tôi tự hỏi liệu một số bạn có thể cải thiện điều này không.

Thử thách

Golf một số mã mà phát ra một số âm thanh. Nó khá là không liên quan loại âm thanh. Nếu được yêu cầu, hãy tạo một số tệp âm thanh ... nhưng tiếng bíp hệ thống cũng sẽ thực hiện công việc đó. ( Đây là một số âm thanh tôi tạo ra ... không có gì đặc biệt. )

Đầu vào : Nhịp đập mỗi phút của đầu ra máy đếm nhịp.

Thí dụ

Đây là phiên bản Java không chơi gôn! Nó chỉ để cho bạn thấy nhiệm vụ.

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!");

    }
  }
}

Quy tắc

Bạn không được phép sử dụng các từ khóa bên ngoài, chỉ cho phép các công cụ của ngôn ngữ.
Chỉ các byte của mã nguồn đếm ... không phải tệp âm thanh.

Đây là , vì vậy bài nộp có số byte ít nhất sẽ thắng!

CHỈNH SỬA:

Ví dụ đầu ra: Vì vậy, một cái gì đó như thế này sẽ là đầu ra cho 120 bps : link


1
Bạn có thể thêm một vài ví dụ cho I / O (ghi lại một số âm thanh và tải nó lên, đăng các liên kết ở đây)?
Addison Crump

2
Câu hỏi: khi bạn nói "thư viện bên ngoài", có bao gồm các thư viện được đề xuất với ngôn ngữ không? (Tôi sẽ không sử dụng cái này, nhưng một ví dụ là trong Vitsy trong đó tôi có thể truy cập shell hoặc JS (nhưng JS được tích hợp sẵn)
Addison Crump

3
Bạn có thể thêm một đoạn bảng xếp hạng trong?
Addison Crump

1
Tôi nghi ngờ phần lớn ứng dụng mà bạn đã tải xuống là đồ họa và hiệu ứng âm thanh đẹp. Nó giống như những ứng dụng đèn pin không làm gì ngoài việc biến màn hình thành màu trắng nhưng vẫn có thể sử dụng tới hàng chục MB ...
Darrel Hoffman

1
Yêu cầu về độ chính xác là gì? Trong mẫu của bạn, cả hai beep()và đầu ra giao diện điều khiển không chính xác ngay lập tức IIRC. Không sleep()được biết đến để nuôi ong chính xác.
Khóa số

Câu trả lời:


19

Toán học, 26 byte

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

Do thường được sử dụng như một vòng lặp "for" theo nghĩa hẹp nhất: lặp lại đoạn mã này cho mỗi vòng lặp i từ xđến y... hoặc thậm chí chỉ lặp lại đoạn mã này n. Thay vì một số nchúng ta có thể cung cấp cho nó vô hạn mặc dù để tạo ra một vòng lặp vô hạn. Phần thân vòng lặp Pause[Beep[];60/#]chỉ là một cách viết golf trong Beep[];Pause[60/#]đó #là đối số hàm.

Nếu cuối cùng, giải pháp này có thể làm nổ tung ngăn xếp cuộc gọi, chúng ta có thể lưu một byte bằng một giải pháp đệ quy:

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

Tôi không biết điều đó ~Do~∞là có thể. Một Forvòng lặp chỉ đưa tôi đến 29 byte. (Ngoài ra, cá nhân tôi tin rằng phiên bản 26 byte là phiên bản duy nhất hợp lệ.)
LegionMammal978

@ LegionMammal978 Thật không may, ~Do~∞dường như không hoạt động khi xuất phát từ một biến. (Tôi đã thử sử dụng nó khi đánh golf cỗ máy thật của bạn.)
Martin Ender

1
Attributes[Do]bao gồm HoldAll, do đó, dự đoán của tôi là _~Do~∞có một mẫu đánh giá đặc biệt.
LegionMammal978

@ LegionMammal978 Có vẻ giống như các biến hơn, bởi vì thông báo lỗi cho Do[...,a]nơi agiữ vô cực thực sự hiển thị cuộc gọi như Do[...,{a}].
Martin Ender

14

Pyth, 11 10 9 byte

Cảm ơn Adnan đã nhắc nhở tôi về #.

#C7.dc60Q

Mãi mãi ( #), in Cmã har 7. Sau đó ngủ ( .d) 60giây chia cho ( c) input ( Q).


@Ad Nam Quên cái đó đi. Cảm ơn.
PurkkaKoodari

Bạn có cần không gian?
lirtosiast

@ThomasKwa Vâng. IIRC 7.sẽ được phân tích cú pháp dưới dạng số.
Conor O'Brien

5
Oh. #pythnoob
Conor O'Brien

2
Tôi không thể ngủ .d khi tôi cố gắng. Nó tiếp tục in thời gian unix
busukxuan

8

JavaScript, 36 45 42 41 34 byte

Đã lưu 1 byte nhờ @RikerW

Đã lưu 1 byte nhờ @ETHproductions

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

Đây là một chức năng.

Nếu tôi sử dụng `\7` , SpiderMonkey sẽ phàn nàn những chữ bát phân bị phản đối.

Thay thế, 31 byte

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

Vấn đề là không thể in được bị tước nhưng điều này sẽ hoạt động.


Khỉ thật, tôi vừa định đăng một cái gì đó như thế này. Tôi vẫn sẽ đăng nó (vì nó sử dụng nút và tất cả) bởi vì tôi sử dụng một cách tiếp cận khác.
Addison Crump

Nếu bạn nhìn nó từ cách tôi đặt câu hỏi, giải pháp đệ quy sẽ không thể thực hiện được. Metronomes được tạo ra để làm việc và làm việc ... không phải để sụp đổ sau một thời gian.
PEAR

@PEAR điều này không nên sụp đổ vì không có biến nào đang tăng. Điều duy nhất có thể khiến nó bị sập là bộ đệm đầu cuối ngoại trừ trên các máy tính hiện đại có thể mất> 50 - 100 năm tôi nghĩ
Downgoat

Môi trường này chạy theo môi trường nào? Tôi đã thử chrome và Node.js, nhưng tôi không thể làm cho nó hoạt động được.
starbeamrainbowlabs

@starbeamrainbowlabs này sử dụng trình bao JavaScript (SpiderMonkey)
Downgoat

8

Bash, 53 55 41 byte

Cảm ơn @Dennis đã cạo 14 byte 1

Được rồi, thời gian thật: Tôi rất tệ khi chơi golf. Bất kỳ trợ giúp sẽ được rất đánh giá cao.

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

1 thánh nhảm nhí. Không có gì ngạc nhiên khi không ai có thể vượt qua Dennis.


while 1thể không?
PEAR

@PEAR Nupe - đã thử nó.
Addison Crump

while printf \\acó lẽ?
Neil

Điều này không hoạt động vì bash sử dụng phép chia số nguyên. Bạn sẽ cần phải sử dụng bc.
một spaghetto

1. Ký tự BEL không đặc biệt đối với Bash, vì vậy bạn không cần dấu ngoặc kép. 2. Nếu bạn đọc đầu vào dưới dạng CLA, bạn không cần read. 3. echotồn tại với mã 0, vì vậy bạn có thể sử dụng câu lệnh đó thay vì true.
Dennis

7

JavaScript ES6 (trình duyệt), 43 byte

Điều này có thể được kéo dài các quy tắc:

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

Đặt tên cho hàm này (ví dụ F=x=>...) và nhập nó vào bảng điều khiển trình duyệt trên trang này . Sau đó gọi hàm với bps của bạn, vdF(60) , và chờ phép màu xảy ra. :-)

Tại sao điều này làm việc? Chà, b.htmltrong cùng một thư mục với một tập tin có tên1 , đó là tệp âm thanh mẫu từ OP. Tôi không chắc liệu đây có nằm trong quy tắc không (tôi đoán nó giống như phiên bản shell; nó cần được chạy trong một môi trường cụ thể), nhưng nó đáng để thử.

Phiên bản an toàn hơn, 57 byte

Nếu vì lý do nào đó, mã trên không được phép, thay vào đó, hãy thử điều này:

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

Hoạt động trên bất kỳ trang nào!


Đây là một giải pháp xen kẽ. Nó thậm chí còn ngắn hơn khi bạn tải xuống và đổi tên tập tin, phải không?
PEAR

@PEAR Điều đó sẽ ngắn hơn, nhưng sau đó nó sẽ cần trang web riêng của mình với tệp âm thanh trong cùng một thư mục để chạy.
Sản phẩm điện tử

Ồ, đó là JavaScript xD ... bạn nói đúng
PEAR

@PEAR Ở đó, tôi đã làm nó. Đây có phải là giải pháp mới trong các quy tắc?
Sản phẩm ETH

Huh. Bạn có thể chỉ định rằng đó là JS với trang web nhất định. Đó là một thông dịch viên có từ trước, vì vậy đó là một ngôn ngữ hợp lệ.
Addison Crump

6

05AB1E , 31 byte

Mã số:

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

Nếu tôi đã tích hợp sẵn để chờ N giây, thì đây có thể là 11 byte. Không may, không phải trường hợp này. Đây là lời giải thích:

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

Sử dụng mã hóa ISO 8859-1.


Đây phải là một trong những câu trả lời đầu tiên của 05AB1E o.Ô Có vẻ rất kỳ lạ khi thấy time.sleep.pop()ở giữa đoạn mã như thế. ;)
Kevin Cruijssen

6

osascript, 39 byte

on run a
repeat
beep
delay 60/a
end
end

Có nghĩa đen là một lệnh gọi là tiếng bíp? Sweeeet!

Chỉ có thể chạy trên Mac OS X do giấy phép bị hạn chế, nhưng để chạy, hãy:

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

6

Python, 68 67 57 byte

Đã lưu 1 byte nhờ @FlagAsSpam

Đã lưu 9 byte nhờ @Adnan

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

Ngoài ra, mất ít hơn 2 byte sau khi chuyển đổi kết thúc dòng sang định dạng UNIX.

Phiên bản cũ hơn, thực sự lấy bpm làm đối số dòng lệnh (66 byte):

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

4
Bạn không thể làm gì print"\7";? Tôi không chắc chắn, nhưng tôi khá chắc chắn rằng nó hoạt động.
Addison Crump

@Andan Không, input () yêu cầu đầu vào từ người dùng. Tôi không biết nếu đó được coi là một đầu vào hợp lệ. Ngoài ra, chuyển đổi sang số là cần thiết.
chiến binh web

1
Làm thế nào về a=input()athay thế int(sys.argv[1])? Tôi đã luôn nghĩ rằng Python 2 tự động đánh giá đầu vào và do đó không cần chuyển đổi int, nhưng tôi có thể sai.
Ad Nam

@Andan input()thực sự tự động đánh giá. Tôi quên mất tính năng đó. Mặc dù nó không đẹp mắt - có lẽ là một di sản từ thời xa xưa.
chiến binh web

Có thể time.sleep(60./a)được thay thế bằng time.sleep(60./input()), trong khi loại bỏ hoàn toàn a=input()?
vỗ tay vào


4

Vitsy, 14 byte

a6*r/V1m
<wVO7

Chế độ dài dòng (sắp có phiên dịch):

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;

Về cơ bản, tôi sử dụng wtoán tử để chờ một số giây nhất định theo quy định bpm/60, được gói trong một vòng lặp vô hạn. Sau đó, tôi tạo tiếng ồn với đầu ra đầu cuối của ký tự ASCII 7 ( BEL).


Có vẻ tốt, nhưng làm thế nào tôi có thể kiểm tra điều này? :)
PEAR

@PEAR Bạn sẽ phải tải xuống trình thông dịch (quên liên kết nó trong tiêu đề). Lưu nó trong một tập tin và chạy nó với java -jar Vitsy.jar <filename>.
Addison Crump

4

C #, 118 byte

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

Giải pháp cơ bản.


Tại sao không in ASCII char 7?
Addison Crump

@FlagAsSpam It's longer: The system beep uses System.Console.Beep();, and printing the character uses System.Console.Write('<\a character>');.
LegionMammal978

Woah. That's a lot to write a character.
Addison Crump

4

Java, 103 82 bytes

Thanks to @Justin for shaving off 21 bytes!

Oh, geez.

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

Method and golfed version of the sample program.


Why not System.out.print('\7'); instead of the java.awt.Toolkit.getDefaultToolkit().beep();?
Justin

@Justin \ is solely for escaping regex characters.
Addison Crump

1
no the backslash is an escape sequence. '\7' is the bell character, which makes a sound when it is printed out
Justin

@Justin Huh. I've always thrown errors on that (when using double quotes). My mistake. Thanks! :D
Addison Crump

3

GMC-4 Machine Code, 21.5 bytes

GMC-4 là một máy tính 4 bit của một công ty có tên Gakken để dạy các nguyên tắc của ngôn ngữ lắp ráp trong một bộ hướng dẫn và máy tính đơn giản hóa. Thường trình này nhận đầu vào trong các địa chỉ bộ nhớ dữ liệu 0x5Dthông qua0x5F số thập phân cuối lớn (nghĩa là một chữ số trên mỗi nibble).

Thuật toán về cơ bản là thêm đầu vào vào bộ nhớ và chờ 0,1 giây, cho đến khi ít nhất là 600, sau đó trừ 600 và tiếng bíp, trong một vòng lặp vô hạn. Vì GMC-4 có một loạt các chức năng hoán đổi đăng ký nhưng không có bản sao đăng ký chức năng , điều này được thực hiện một cách khó khăn.

Trong hex (dòng thứ hai là vị trí trong bộ nhớ):

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

Trong lắp ráp:

    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

Tuyên bố miễn trừ trách nhiệm:

Tôi không thực sự sở hữu một GMC-4. Tôi đã kiểm tra tỉ mỉ chương trình này với tài liệu từ trực tuyến, nhưng tôi có thể đã mắc lỗi. Tôi cũng không biết sự kết thúc. Có vẻ như GMC-4 là cuối cùng lớn, nhưng tôi không chắc chắn. Nếu bất cứ ai sở hữu GMC-4 và có thể xác minh điều này / cho tôi biết tuổi thọ của GMC-4, tôi sẽ đánh giá cao nó.


3

C, 48 byte

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

Một giải pháp chỉ dành cho Windows (Hàm ngủ (), cụ thể).

Tôi cũng (ab) đã sử dụng thực tế là printf () trả về số lượng ký tự được in để sử dụng nó làm điều kiện vòng lặp vô hạn.

Có một ký tự giữa hai dấu ngoặc kép trong lệnh gọi printf (), nhưng nó không được hiển thị ở đây vì một số lý do. Nếu nghi ngờ, hãy sao chép và dán vào Sublime Text 2 hoặc Notepad ++, ký tự sẽ được hiển thị dưới dạngBEL .

Điều này bắt đầu như một giải pháp C ++ nhưng nó rơi vào tập hợp con C của C ++ (bởi vì, bạn biết đấy, Sleep()nó ngắn hơn một chút std::this_thread::sleep_for(std::chrono::milliseconds())) và printf()ngắn hơn std::cout<<).


3

AppleScript 94 byte

Tôi biết tôi khá muộn, và đây là bài viết đầu tiên của tôi ở đây, nhưng bất cứ điều gì.

hộp thoại hiển thị "" câu trả lời mặc định ""
đặt x thành 60000 / kết quả văn bản trả về
nói lại
tiếng kêu bíp
độ trễ x
kết thúc

Ung dung:

hộp thoại hiển thị "" câu trả lời mặc định ""
set x to 60000 / (result's text returned)
repeat
    beep
    delay x
end repeat

Hey, new answers :) Unfortunatly I'm unable to try your post unless I have no Mac ;) - but thanks a lot
PEAR

@PEAR You're welcome. :)
You

Welcome to Programming Puzzles and Code Golf. This is good answer, +1. Please keep answering!
wizzwizz4

2

VBScript, 113 66 bytes

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

This program is simple enough; it takes input, echoes the BEL character, and waits. Thanks to Niel for shaving off almost half the program!


What's wrong with WScript.Echo CHR(7)? Also, did you mean 60000?
Neil

@Neil Ah, yes. forgot about those.;
Conor O'Brien

2

Ruby, 37 33 bytes

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

Pretty straightforward.

This is a lambda function. If you wanted 60 bpm, you'd do: m[60].


Theoretically $><<?\a should also work for the beep. And no need to give a name for your proc (all JavaScript solutions with fat arrow function also leave it unassigned), you can call it anonymously too: ->b{loop{$><<?\a;sleep 6e1/b}}[60].
manatwork

@manatwork I only have Ruby 2.x, so I couldn't test the ?\a; do you have Ruby 1.x? If so, can you test that this works?
Justin

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.