Membangun Metronom

36

pengantar

Beberapa hari yang lalu saya membutuhkan metronom untuk sesuatu. Saya tidak punya satu pun jadi saya mengunduh aplikasi dari App Store. Aplikasi ini memiliki ukuran 71 MB !!!
71 MB untuk membuat tic-toc ...?!
Jadi kode-golf muncul di benak saya dan saya bertanya-tanya apakah beberapa dari kalian bisa memperbaiki ini.

Tantangan

Golf beberapa kode yang menghasilkan suara. Suara apa yang agak tidak relevan. Jika diperlukan buat beberapa file suara ... tetapi bip Sistem akan melakukan pekerjaan dengan baik. ( Ini beberapa suara yang saya buat ... tidak ada yang istimewa. )

Input : Detak per menit output metronom.

Contoh

Ini adalah versi Java non-golf! Hanya untuk menunjukkan tugasnya kepada Anda.

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

    }
  }
}

Aturan

Anda tidak boleh menggunakan perpustakaan eksternal, hanya alat bahasa itu sendiri yang diperbolehkan.
Hanya byte dari kode sumber yang dihitung ... bukan file suara.

Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang!

EDIT:

Contoh output: Jadi sesuatu seperti ini akan menjadi output untuk tautan 120 bps :

PIR
sumber
1
Bisakah Anda menambahkan beberapa contoh untuk I / O (merekam suara dan mengunggahnya, memposting tautan di sini)?
Addison Crump
2
Pertanyaan: ketika Anda mengatakan "perpustakaan eksternal", apakah itu termasuk perpustakaan yang disarankan dengan bahasa? (Saya tidak akan menggunakan ini, tetapi sebuah contoh adalah di Vitsy di mana saya dapat mengakses shell atau JS (tapi JS adalah builtin))
Addison Crump
3
Bisakah Anda menambahkan cuplikan papan peringkat ?
Addison Crump
1
Saya menduga sebagian besar aplikasi yang Anda unduh adalah gambar dan efek suara yang cantik. Ini seperti aplikasi senter yang tidak mengubah layar menjadi putih, tetapi masih bisa menggunakan puluhan MB ...
Darrel Hoffman
1
Apa persyaratan akurasi? Dalam sampel Anda, beep()output kedua dan konsol tidak persis IIRC instan. Baik sleep()dikenal karena akurat.
Num Lock

Jawaban:

19

Mathematica, 26 byte

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

Dobiasanya digunakan sebagai "untuk" loop dalam arti tersempit: ulangi potongan kode ini untuk masing-masing idari xke y... atau bahkan hanya mengulangi potongan kode ini nkali. Alih-alih angka nkita bisa memberikannya tanpa batas meskipun untuk membuat loop tak terbatas. Tubuh loop adalah Pause[Beep[];60/#]yang hanya cara golf di Beep[];Pause[60/#]mana #argumen fungsi.

Jika solusi yang diterima untuk meledakkan tumpukan panggilan pada akhirnya, kita dapat menyimpan satu byte dengan solusi rekursif:

#0[Beep[];Pause[60/#];#]&
Martin Ender
sumber
Saya tidak tahu ~Do~∞itu mungkin. Satu Forloop hanya membuat saya menjadi 29 byte. (Juga, saya pribadi percaya bahwa versi 26-byte adalah satu-satunya yang valid.)
LegionMammal978
@ LegionMammal978 Sayangnya, ~Do~∞sepertinya tidak berfungsi ketika berasal dari variabel. (Saya mencoba menggunakannya saat bermain golf di mesin kebenaran Anda.)
Martin Ender
1
Attributes[Do]termasuk HoldAll, jadi dugaan saya adalah yang _~Do~∞memiliki pola evaluasi khusus.
LegionMammal978
@ LegionMammal978 Tampaknya lebih seperti variabel lakukan, karena pesan kesalahan untuk Do[...,a]mana amemegang infinity benar-benar menunjukkan panggilan sebagai Do[...,{a}].
Martin Ender
14

Pyth, 11 10 9 byte

Terima kasih kepada Adnan untuk mengingatkan saya tentang #.

#C7.dc60Q

Forever ( #), cetak Ckode har 7. Kemudian sleep ( .d) 60detik dibagi dengan ( c) input ( Q).

PurkkaKoodari
sumber
@ Adnan Lupa tentang itu. Terima kasih.
PurkkaKoodari
Apakah Anda membutuhkan ruang?
lirtosiast
@ThomasKwa Ya. IIRC 7.akan diuraikan sebagai angka.
Conor O'Brien
5
Oh #pythnoob
Conor O'Brien
2
Saya tidak bisa tidur. D ketika saya mencoba. Itu terus mencetak waktu unix
busukxuan
8

JavaScript, 36 45 42 41 34 byte

Disimpan 1 byte berkat @RikerW

Disimpan 1 byte berkat @ETHproductions

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

Ini sebuah fungsi.

Jika saya menggunakan `\7`, SpiderMonkey mengeluh literal oktal sudah usang.

Alternatif, 31 byte

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

Masalahnya adalah unsintables dilucuti tetapi ini harus bekerja.

Downgoat
sumber
Sial, saya baru saja memposting sesuatu seperti ini. Saya masih akan mempostingnya (karena menggunakan node dan semua) karena saya menggunakan pendekatan yang berbeda.
Addison Crump
Jika Anda melihatnya dari cara saya mengajukan pertanyaan, solusi rekursif tidak akan mungkin. Metronom dibuat untuk bekerja dan bekerja ... bukan untuk menabrak setelah beberapa waktu.
PEAR
@ PEAR ini seharusnya tidak crash karena tidak ada variabel yang bertambah. Satu-satunya hal yang mungkin menyebabkannya crash adalah buffer terminal kecuali pada komputer modern yang bisa memakan waktu> 50-100 tahun saya pikir
Downgoat
Lingkungan apa yang dijalankan di bawah ini? Saya sudah mencoba chrome dan Node.js, tetapi saya tidak bisa membuatnya berfungsi.
starbeamrainbowlabs
@starbeamrainbowlabs ini menggunakan shell JavaScript (SpiderMonkey)
Downgoat
8

Bash, 53 55 41 byte

Terima kasih kepada @Dennis karena mencukur 14 byte 1

Oke, waktu yang tepat: Aku payah bermain golf. Bantuan apa pun akan sangat dihargai.

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

1 sial. Tidak heran tidak ada yang bisa mengalahkan Dennis.

Addison Crump
sumber
Apakah while 1mungkin?
PEAR
@ PEAR Nupe - sudah mencobanya.
Addison Crump
while printf \\amungkin?
Neil
Ini tidak berfungsi karena bash menggunakan pembagian integer. Anda harus menggunakan bc.
spaghetto
1. Karakter BEL tidak spesial untuk Bash, jadi Anda tidak perlu tanda kutip. 2. Jika Anda membaca input sebagai CLA, Anda tidak perlu read. 3. echoada dengan kode 0, sehingga Anda dapat menggunakan pernyataan itu alih-alih true.
Dennis
7

JavaScript ES6 (browser), 43 byte

Ini mungkin memperluas aturan:

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

Beri nama fungsi ini (misalnya F=x=>...) dan masukkan di konsol browser di halaman ini . Kemudian panggil fungsi dengan bps Anda, mis. F(60), Dan tunggu keajaiban terjadi. :-)

Mengapa ini bekerja? Nah, b.htmlada di folder yang sama dengan file bernama 1, yang merupakan file sampel suara dari OP. Saya tidak yakin apakah ini sesuai aturan (saya kira itu seperti versi shell; perlu dijalankan di lingkungan tertentu), tetapi layak dicoba.

Versi lebih aman, 57 byte

Jika kode di atas tidak diizinkan karena alasan tertentu, coba ini sebagai gantinya:

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

Bekerja pada halaman mana saja!

Produksi ETH
sumber
Ini adalah solusi menarik. Bahkan lebih pendek ketika Anda mengunduh dan mengganti nama file, bukan?
PEAR
@ PEAR Itu akan lebih pendek, tetapi kemudian akan membutuhkan halaman web sendiri dengan file suara di folder yang sama untuk dijalankan.
ETHproduk
Oh, ini JavaScript xD ... Anda benar
PEAR
@ PEAR Di sana, saya berhasil. Apakah ini solusi baru dalam aturan?
ETHproduk
Hah. Anda dapat menentukan bahwa itu adalah JS dengan laman web tertentu. Ini adalah penerjemah yang sudah ada sebelumnya, jadi ini adalah bahasa yang valid.
Addison Crump
6

05AB1E , 31 byte

Kode:

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

Jika saya memiliki built-in untuk menunggu N detik, ini bisa jadi 11 byte. Sayangnya, ini bukan masalahnya. Berikut penjelasannya:

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

Menggunakan penyandian ISO 8859-1.

Adnan
sumber
Ini pasti salah satu jawaban 05AB1E pertama o.Ô Terlihat sangat aneh melihat time.sleepdan .pop()di tengah kode seperti itu. ;)
Kevin Cruijssen
6

naskah, 39 byte

on run a
repeat
beep
delay 60/a
end
end

Ada secara harfiah perintah yang disebut bip? Sweeeet!

Runnable hanya pada Mac OS X karena lisensi terbatas, tetapi untuk menjalankan, lakukan:

osascript -e "on run a
repeat
beep
delay 60/a
end
end" bpm
Addison Crump
sumber
6

Python, 68 67 57 byte

Disimpan 1 byte berkat @FlagAsSpam

Disimpan 9 byte berkat @Adnan

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

Juga butuh 2 byte lebih sedikit setelah mengkonversi akhir baris ke format UNIX.

Versi yang lebih lama, yang sebenarnya menggunakan bpm sebagai argumen baris perintah (66 byte):

import sys,time
while 1:print"\7";time.sleep(60./int(sys.argv[1]))
webwarrior
sumber
4
Tidak bisa Anda lakukan print"\7";? Saya tidak yakin, tapi saya cukup yakin itu berhasil.
Addison Crump
@Dan Tidak, input () meminta input dari pengguna. Saya tidak tahu apakah itu dianggap sebagai input yang valid. Juga konversi ke nomor tetap diperlukan.
webwarrior
1
Bagaimana dengan a=input()dan amengganti int(sys.argv[1])? Saya selalu berpikir bahwa Python 2 secara otomatis mengevaluasi input dan oleh karena itu tidak memerlukan konversi int, tetapi saya mungkin salah.
Adnan
@Andan input()sebenarnya melakukan evaluasi otomatis. Saya lupa tentang fitur itu. Ini agak unpythonic - mungkin warisan dari masa lalu.
webwarrior
Dapat time.sleep(60./a)diganti dengan time.sleep(60./input()), sementara sepenuhnya menghapus a=input()?
bertepuk tangan
4

Otomatis , 56 byte

Func _($0)
While Sleep(6e4/$0)
Beep(900,99)
WEnd
EndFunc
mınxomaτ
sumber
4

Vitsy, 14 byte

a6*r/V1m
<wVO7

Mode Verbose (juru bahasa segera hadir):

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;

Pada dasarnya, saya menggunakan woperator untuk menunggu sejumlah detik seperti yang ditentukan oleh bpm/60, terbungkus dalam infinite loop. Kemudian, saya membuat noise dengan output terminal karakter ASCII 7 ( BEL).

Addison Crump
sumber
Terlihat bagus, tetapi bagaimana saya bisa menguji ini? :)
PEAR
@ PEAR Anda harus mengunduh juru bahasa (lupa menghubungkannya dengan judul). Simpan dalam file dan jalankan dengan 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();}}

Solusi dasar.

LegionMammal978
sumber
Mengapa tidak mencetak ASCII char 7?
Addison Crump
@ FlagAsSpam Lebih lama: Bip sistem menggunakan System.Console.Beep();, dan mencetak menggunakan karakter System.Console.Write('<\a character>');.
LegionMammal978
Wow. Itu banyak untuk menulis karakter.
Addison Crump
4

Java, 103 82 byte

Terima kasih kepada @Justin karena telah memangkas 21 byte!

Ya ampun.

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

Metode dan versi sampel program golf.

Addison Crump
sumber
Mengapa tidak System.out.print('\7');bukan java.awt.Toolkit.getDefaultToolkit().beep();?
Justin
@Justin \ semata-mata untuk keluar dari karakter regex.
Addison Crump
1
tidak ada garis miring terbalik adalah urutan melarikan diri. '\7'adalah karakter bel, yang mengeluarkan suara saat dicetak
Justin
@Justin Huh. Saya selalu melemparkan kesalahan pada itu (saat menggunakan tanda kutip ganda). Kesalahanku. Terima kasih! : D
Addison Crump
3

Kode Mesin GMC-4 , 21,5 byte

GMC-4 adalah komputer 4-bit oleh sebuah perusahaan bernama Gakken untuk mengajarkan prinsip-prinsip bahasa assembly dalam set instruksi dan komputer yang disederhanakan. Rutin ini mengambil input alamat memori data 0x5Dmelalui0x5F , dalam desimal big-endian (yaitu, satu digit per gigitan).

Algoritma ini pada dasarnya menambahkan input ke memori dan menunggu 0,1s, sampai setidaknya 600, dan kemudian mengurangi 600 dan berbunyi bip, dalam loop tak terbatas. Karena GMC-4 memiliki banyak fungsi swap register tetapi tidak ada fungsi copy register , ini dilakukan dengan cara yang sulit.

Dalam hex (baris kedua adalah posisi di memori):

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

Dalam perakitan:

    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

Penolakan:

Saya sebenarnya tidak memiliki GMC-4. Saya telah dengan cermat memeriksa program ini dengan dokumentasi dari online, tetapi saya mungkin telah melakukan kesalahan. Saya juga tidak tahu endianness. Sepertinya GMC-4 adalah big-endian, tapi saya tidak yakin. Jika ada yang memiliki GMC-4 dan dapat memverifikasi ini / katakan padaku endianness dari GMC-4, saya akan sangat menghargainya.

lirtosiast
sumber
3

C, 48 byte

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

Solusi khusus Windows (fungsi Sleep (), lebih spesifik).

Saya juga (ab) menggunakan fakta bahwa printf () mengembalikan jumlah karakter yang dicetak untuk menggunakannya sebagai kondisi loop tak terbatas.

ADA karakter antara tanda kutip ganda dalam panggilan printf (), tetapi tidak ditampilkan di sini untuk beberapa alasan. Jika ragu, salin dan tempel ke Sublime Text 2 atau Notepad ++, karakter akan ditampilkan sebagai BEL.

Ini dimulai sebagai solusi C ++ tetapi agak jatuh ke dalam C-subset dari C ++ (karena, Anda tahu, Sleep()sedikit lebih pendek dari std::this_thread::sleep_for(std::chrono::milliseconds())) dan printf()lebih pendek dari std::cout<<).

Alexander Revo
sumber
3

AppleScript 94 byte

Saya tahu saya sangat terlambat, dan ini adalah posting pertama saya di sini, tetapi apa pun itu.

tampilkan dialog "" jawaban default ""
set x ke 60000 / teks hasil dikembalikan
ulangi
berbunyi
menunda x
akhir

Tidak Disatukan:

tampilkan dialog "" jawaban default ""
set x ke 60000 / (teks hasil dikembalikan)
ulangi
    berbunyi
    menunda x
dan ulangi
Kamu
sumber
Hai, jawaban baru :) Sayangnya saya tidak dapat mencoba posting Anda kecuali saya tidak punya Mac;) - tapi terima kasih banyak
PEAR
@ PEAR Sama-sama. :)
Anda
Selamat datang di Programming Puzzles and Code Golf. Ini jawaban yang bagus, +1. Silakan terus menjawab!
wizzwizz4
2

VBScript, 113 66 byte

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

Program ini cukup sederhana; dibutuhkan input, gema karakter BEL, dan menunggu. Terima kasih kepada Niel karena telah mencukur hampir setengah dari program!

Conor O'Brien
sumber
Ada apa dengan ini WScript.Echo CHR(7)? Juga, maksud Anda 60000?
Neil
@Neil Ah, ya. lupa tentang itu;
Conor O'Brien
2

Ruby, 37 33 byte

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

Cukup mudah.

Ini adalah fungsi lambda. Jika Anda ingin 60 bpm, Anda akan melakukan: m[60].

Justin
sumber
Secara teoritis $><<?\ajuga harus bekerja untuk bip. Dan tidak perlu untuk memberikan nama untuk proc Anda (semua solusi JavaScript dengan fungsi panah lemak juga meninggalkannya belum ditetapkan), Anda dapat menyebutnya anonim juga: ->b{loop{$><<?\a;sleep 6e1/b}}[60].
manatwork
@manatwork Saya hanya punya Ruby 2.x, jadi saya tidak bisa menguji ?\a; apakah Anda memiliki Ruby 1.x? Jika demikian, dapatkah Anda menguji apakah ini berhasil?
Justin
Yah, saya punya Ruby 1.9.3 dan kode tidak menimbulkan kesalahan dengannya. Tapi saya punya masalah lain dengan pengujian: tidak ada bip pada mesin saya. Baik Ruby maupun yang lainnya. Tetapkan sesuatu sekali, tidak tahu apa.
manatwork
2

Japt, 30 byte

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

The ?harus menjadi byte literal 9A. Uji secara online! (Maaf tentang pop-up yang menunda beberapa ketukan pertama; ini akan segera dihapus.)

Bagaimana itu bekerja

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.
Produksi ETH
sumber
2

Mumps, 18 byte

R I F  H 60/I W *7

Baca BPM ke dalam variabel I, maka F {dengan dua spasi setelah} adalah infinate loop. Hentikan selama 60 detik / BPM, kemudian tulis $ CHR (7) {Ascii: BEL} ke output standar, berikan output audio yang diperlukan, kemudian mulai kembali pada infinite loop.

zmerch
sumber
2

Java, 321 karakter

Kedengarannya sangat bagus. Hanya bekerja pada sistem dengan dukungan MIDI.

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);}}}

.

username.ak
sumber
Terlihat bagus, tapi ini tidak berhasil untuk saya: pastebin.com/0CbGYkU0
PEAR
@ PEAR diperbaiki. Saya lupa gips.
username.ak
@ PEAR dan impor
username.ak
@ PEAR, saya telah menukar beberapa ops karena tidak ada suara
username.ak
2

ChucK , 90 byte

Kebisingan putih yang dinyalakan dan dimatikan setiap dua kutu.

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

Penjelasan

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

Ini dibuat untuk menyalakan suara saat berdetak, kemudian mematikannya pada ketukan sesudahnya.

Versi 98 93 byte (peternak)

Kebisingan putih dimainkan selama 10 milidetik per centang.

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

Ini dibuat sebagai klik dan bukannya derau konstan dihidupkan dan dimatikan.

The_Basset_Hound
sumber
2

Perl 5, 36 byte

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

Subrutin; gunakan sebagai

sub{{$|=print"\a";sleep 60/$_[0];redo}}->(21)
msh210
sumber
sleepdalam hitungan detik, jadi Anda tidak dapat memiliki lebih dari 60 bip per menit, tidak yakin apakah itu persyaratan. Juga, Anda mungkin dapat menyimpan jumlah byte yang sama tetapi memiliki program lengkap dengan melakukan sesuatu seperti: $|=<>;{print"\a";sleep 60/$|;redo}(tidak dapat mengujinya sekarang).
ChatterOne
@ChatterOne, menurut dokumentasinya, Anda benar tentang sleep. Tetapi itu berhasil bagi saya.
msh210
1

Jolf, 7 byte, tidak bersaing

Saya menambahkan suara setelah tantangan yang sangat halus ini dibuat.

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)

Jika Anda ingin menghapus suara ini, perhatikan hasilnya. Katakan nomor itu x. Jalankan perintah Jolf yang lain ~CP"x", dan intervalnya akan dihapus.

Conor O'Brien
sumber
1

Zsh , 32 byte

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

Berdasarkan jawaban bash terkemuka, tetapi sourcebukan execs. Sumber TIO sumber $0:akarena bagaimana file asli dieksekusi, tetapi itu akan bekerja tanpa itu.

Cobalah online!

Fungsi Gamma
sumber
Anda terlambat ke pesta tetapi ini sepertinya solusi yang sangat bagus!
PEAR
Saya tahu saya terlambat, tapi saya merasa ingin bermain golf hari ini. Memutuskan untuk memeriksa tag musik untuk bersenang-senang, dan menemukan tantangan ini. Bagus, btw!
GammaFunction
0

Bash + bc + > <> , 44 byte

Bermain dengan fakta bahwa juru <>> memungkinkan Anda menentukan waktu centang:

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

Kode> <> adalah 7odan harus menampilkan BELkarakter, menghasilkan bunyi bip sistem. Ini akan berulang sampai terputus.
The -tnilai diatur ke (2 / RPM) / 60 sehingga seluruh kode dimainkan RPM * 60 kali per detik.

Harun
sumber
Terima kasih banyak atas jawaban baru setelah beberapa waktu setelah penerbitan. Tidak bekerja untuk saya :( Tidak yakin apakah ada masalah dengan sistem saya atau yang lainnya. Saya mengunduh fish.py dari GitHub dan mengeksekusi commad Anda (openSUSE). Mendapat kesalahan ini: (standard_in) 1: kesalahan penggunaan sintaksis: fish .py [-h] (<file skrip> | -c <code>) [<options>] fish.py: error: argumen -t / - centang: diharapkan satu argumen
PEAR
Sudahkah Anda bcmenginstal? Sepertinya $(bc -l<<<"2/$1/60")tidak menghasilkan output apa pun. Saya akan menambahkannya ke daftar bahasa jawabannya. Saya belum dapat sepenuhnya menguji jawaban saya, jadi mungkin ada beberapa jenis kesalahan juga.
Aaron
0

SmileBASIC, 26 byte

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

Itu dapat memainkan instrumen midi umum, meskipun apa pun di atas 9 akan menggunakan lebih banyak byte

12Me21
sumber
0

Stax, 17 byte

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

atau, dibongkar:

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

Program menghasilkan byte yang, ketika diumpankan melalui aplay alat baris perintah dengan pengaturan default, menghasilkan suara metronom. Input digunakan sebagai bpm

contoh:

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

Anda harus mendengar bunyi bip mengerikan pada bpm yang diinginkan

pengguna89655
sumber