Ein Metronom bauen


36

Einführung

Vor einigen Tagen brauchte ich ein Metronom für etwas. Ich hatte keine verfügbar, also habe ich eine App aus dem App Store heruntergeladen. Die App hatte eine Größe von 71 MB !!!
71 MB für Tic-Toc ...?!
Also kam mir Codegolf in den Sinn und ich fragte mich, ob einige von euch dies verbessern könnten.

Herausforderung

Spielen Sie einen Code ab, der einen Ton ausgibt. Es ist ziemlich irrelevant, welche Art von Sound. Erstellen Sie bei Bedarf eine Audiodatei, aber ein System-Piepton erledigt auch die Aufgabe. ( Hier ist ein Sound, den ich erstellt habe ... nichts Besonderes. )

Eingang : Die Schläge pro Minute, die das Metronom ausgibt.

Beispiel

Dies ist eine nicht golfene Java-Version! Es ist nur um Ihnen die Aufgabe zu zeigen.

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

    }
  }
}

Regeln

Sie dürfen keine externen Bibliotheken verwenden, nur Tools der Sprache selbst sind erlaubt.
Es zählen nur die Bytes des Quellcodes ... nicht die Audiodatei.

Das ist , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!

BEARBEITEN:

Beispielausgabe: So ähnlich wäre die Ausgabe für 120 bps : link


1
Können Sie ein paar Beispiele für I / O hinzufügen (etwas Sound aufnehmen und hochladen, die Links hier posten)?
Addison Crump

2
Frage: Wenn Sie "externe Bibliotheken" sagen, beinhaltet dies die Bibliotheken, die mit der Sprache vorgeschlagen werden? (Ich werde dies nicht verwenden, aber ein Beispiel ist in Vitsy, wo ich auf Shell oder JS zugreifen kann (aber JS ist eingebaut))
Addison Crump

3
Können Sie ein Leaderboard-Snippet hinzufügen ?
Addison Crump

1
Ich vermute, der Großteil der von Ihnen heruntergeladenen App besteht aus hübschen Grafiken und Soundeffekten. Es ist wie bei diesen Taschenlampen-Apps, die nichts anderes tun, als den Bildschirm komplett weiß zu machen, aber trotzdem irgendwie Dutzende MB
verbrauchen

1
Was ist die Anforderung an die Genauigkeit? In Ihrem Beispiel sind sowohl die beep()Konsolen- als auch die Sofort-IIRC-Ausgabe nicht genau gleich. Weder sleep()ist dafür bekannt, genau zu sein.
Num Lock

Antworten:


19

Mathematica, 26 Bytes

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

Dowird normalerweise im engeren Sinne als "for" -Schleife verwendet: Wiederholen Sie diesen Code für jedes ivon xbis y... oder wiederholen Sie diesen Code einfach nmal. Anstelle einer Zahl können nwir sie auch unendlich setzen, um eine Endlosschleife zu erstellen. Der Loop-Body ist Pause[Beep[];60/#]nur eine Golf-Schreibweise, Beep[];Pause[60/#]in der #das Funktionsargument steht.

Wenn es für die Lösung zulässig ist, den Aufrufstapel irgendwann in die Luft zu jagen, können wir mit einer rekursiven Lösung ein Byte sparen:

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

Ich wusste nicht, dass ~Do~∞das möglich ist. Eine ForSchleife brachte mich nur auf 29 Bytes. (Ich persönlich glaube auch, dass die 26-Byte-Version die einzig gültige ist.)
LegionMammal978

@ LegionMammal978 Scheint leider ~Do~∞nicht zu funktionieren, wenn das von einer Variablen kommt. (Ich habe versucht, das beim Golfen Ihrer Wahrheitsmaschine zu verwenden.)
Martin Ender

1
Attributes[Do]enthält HoldAll, so meine Vermutung, dass _~Do~∞ein spezielles Bewertungsmuster hat.
LegionMammal978

@ LegionMammal978 Es scheint eher so, als ob Variablen dies tun, da die Fehlermeldung für " Do[...,a]where hold ainfinity" den Aufruf tatsächlich als anzeigt Do[...,{a}].
Martin Ender

14

Pyth, 11 10 9 Bytes

Vielen Dank an Adnan , der mich daran erinnert hat #.

#C7.dc60Q

#Drucken Sie für immer ( ) den CCode har 7. Dann Schlaf ( .d) 60Sekunden geteilt durch ( c) Eingabe ( Q).


@Adnan Hab das vergessen. Vielen Dank.
PurkkaKoodari

Benötigen Sie den Platz?
Lirtosiast

@ ThomasKwa Ja. IIRC 7.würde als Zahl analysiert.
Conor O'Brien

5
Oh. #pythnoob
Conor O'Brien

2
Ich konnte nicht einschlafen, als ich es versuchte. Es druckte Unix-Zeit
busukxuan

8

JavaScript, 36 45 42 41 34 Bytes

1 Byte dank @RikerW gespeichert

1 Byte dank @ETHproductions eingespart

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

Dies ist eine Funktion.

Wenn ich benutze `\7`, beschwert sich SpiderMonkey, dass oktale Literale veraltet sind.

Alternative, 31 Bytes

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

Das Problem ist, dass die nicht druckbaren Dateien entfernt werden, dies sollte jedoch funktionieren.


Verdammt, ich wollte gerade so etwas posten. Ich werde es immer noch posten (weil es node und all verwendet), weil ich einen anderen Ansatz benutze.
Addison Crump

Wenn Sie es so betrachten, wie ich die Frage gestellt habe, wäre die rekursive Lösung nicht möglich. Metronome sind zum Arbeiten und Arbeiten gemacht ... nicht zum Abstürzen nach einiger Zeit.
Birne

@PEAR dies sollte nicht abstürzen, da keine Variable inkrementiert wird. Das Einzige, was zum Absturz führen könnte, ist der Terminalpuffer, außer auf modernen Computern, die meiner Meinung nach> 50-100 Jahre
benötigen

Unter welcher Umgebung läuft das? Ich habe Chrome und Node.js ausprobiert, kann es aber nicht zum Laufen bringen.
Starbeamrainbowlabs

@starbeamrainbowlabs dies verwendet die JavaScript-Shell (SpiderMonkey)
Downgoat

8

Bash, 53 55 41 Bytes

Vielen Dank an @Dennis für das Abschneiden von 14 Byte 1

Okay, Zeit für die Wahrheit: Ich bin schrecklich, wenn es um Golf geht. Jede Hilfe wäre so sehr dankbar.

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

1 Heiliger Mist. Kein Wunder, dass niemand Dennis übertreffen kann.


Ist while 1möglich
Birne

@PEAR Nupe - habe das schon probiert.
Addison Crump

while printf \\avielleicht?
Neil

Dies funktioniert nicht, da bash eine Ganzzahldivision verwendet. Sie müssen verwenden bc.
ein Spaghetto

1. Der BEL-Charakter ist nichts Besonderes für Bash, daher brauchen Sie keine Anführungszeichen. 2. Wenn Sie die Eingabe als CLA lesen, brauchen Sie sie nicht read. 3. echoExistiert mit Code 0, daher können Sie diese Anweisung anstelle von verwenden true.
Dennis

7

JavaScript ES6 (Browser), 43 Byte

Dies könnte die Regeln verletzen:

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

Geben Sie dieser Funktion einen Namen (zB F=x=>...) und geben Sie diesen in der Browserkonsole auf dieser Seite ein . Rufen Sie dann die Funktion mit Ihrem bps auf F(60)und warten Sie, bis die Magie einsetzt. :-)

Warum funktioniert das? Nun, b.htmlbefindet sich im selben Ordner wie eine Datei mit dem Namen 1, bei der es sich um die Beispielsounddatei aus dem OP handelt. Ich bin nicht sicher, ob dies innerhalb der Regeln liegt (ich denke, es ist wie die Shell-Version; es muss in einer bestimmten Umgebung ausgeführt werden), aber es war einen Versuch wert.

Sicherere Version, 57 Bytes

Wenn der obige Code aus irgendeinem Grund nicht zulässig ist, versuchen Sie Folgendes:

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

Funktioniert auf jeder Seite!


Dies ist eine interessante Lösung. Es ist noch kürzer, wenn Sie die Datei herunterladen und umbenennen, nicht wahr?
Birne

@PEAR Das wäre kürzer, aber dann müsste eine eigene Webseite mit der Audiodatei im selben Ordner laufen.
ETHproductions

Oh, es ist JavaScript xD ... Sie haben Recht
PEAR

@PEAR Da habe ich es geschafft. Ist diese neue Lösung in den Regeln?
ETHproductions

Huh. Sie können angeben, dass es sich bei der bestimmten Webseite um JS handelt. Es ist ein bereits vorhandener Dolmetscher, also eine gültige Sprache.
Addison Crump

6

05AB1E , 31 Bytes

Code:

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

Wenn ich eine eingebaute Wartezeit von N Sekunden hätte, hätte dies 11 Bytes sein können. Dies ist leider nicht der Fall. Hier ist die Erklärung:

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

Verwendet die ISO 8859-1-Codierung.


Dies muss eine der ersten 05AB1E-Antworten sein. “Es sieht sehr seltsam aus, das time.sleepund .pop()in der Mitte des Codes so zu sehen. ;)
Kevin Cruijssen

6

osascript, 39 bytes

on run a
repeat
beep
delay 60/a
end
end

Es gibt buchstäblich einen Befehl namens Beep? Süßer!

Kann aufgrund der eingeschränkten Lizenz nur unter Mac OS X ausgeführt werden.

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

6

Python, 68 67 57 Bytes

1 Byte dank @FlagAsSpam gespeichert

9 Bytes dank @Adnan eingespart

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

Nach der Konvertierung der Zeilenenden in das UNIX-Format wurden 2 Byte weniger benötigt.

Ältere Version, die eigentlich bpm als Kommandozeilenargument benötigt (66 Bytes):

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

4
Können Sie nicht tun print"\7";? Ich bin mir nicht sicher, aber ich bin mir ziemlich sicher, dass das funktioniert.
Addison Crump

@Andan Nein, input () fordert Eingaben vom Benutzer an. Ich weiß nicht, ob dies eine gültige Eingabe ist. Auch die Umwandlung in eine Zahl ist ohnehin erforderlich.
Webwarrior

1
Wie wäre es a=input()und aersetzen int(sys.argv[1])? Ich habe immer gedacht, dass Python 2 Eingaben automatisch auswertet und daher die int-Konvertierung nicht benötigt, aber ich kann mich irren.
Adnan

@Andan wird input()tatsächlich automatisch ausgewertet. Ich habe diese Funktion vergessen. Es ist allerdings ziemlich unpythonisch - wahrscheinlich ein Erbe aus alten Zeiten.
Webwarrior

Kann time.sleep(60./a)ersetzt werden time.sleep(60./input()), während vollständig entfernt werden a=input()?
klatschen


4

Vitsy, 14 Bytes

a6*r/V1m
<wVO7

Ausführlicher Modus (Dolmetscher in Kürze verfügbar):

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;

Grundsätzlich verwende ich den wOperator, um eine bestimmte Anzahl von Sekunden zu warten bpm/60, die in einer Endlosschleife eingeschlossen sind. Dann mache ich Geräusche mit der Terminalausgabe des ASCII-Zeichens 7 ( BEL).


Sieht gut aus, aber wie kann ich das testen? :)
Birne

@PEAR Sie müssen den Interpreter herunterladen (vergessen, ihn im Titel zu verlinken). Speichern Sie es in einer Datei und führen Sie es mit java -jar Vitsy.jar <filename>.
Addison Crump

4

C #, 118 Bytes

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

Grundlösung.


Warum nicht ASCII char 7 drucken?
Addison Crump

@FlagAsSpam Es ist länger: Das System piept und druckt System.Console.Beep();die Zeichen System.Console.Write('<\a character>');.
LegionMammal978

Woah. Das ist eine Menge, um einen Charakter zu schreiben.
Addison Crump

4

Java, 103 82 Bytes

Vielen Dank an @Justin für das Abschneiden von 21 Bytes!

Oh mein Gott.

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

Methode und Golfversion des Beispielprogramms.


Warum nicht System.out.print('\7');statt der java.awt.Toolkit.getDefaultToolkit().beep();?
Justin

@Justin \ dient ausschließlich zum Ausblenden von Regex-Zeichen.
Addison Crump

1
Nein, der Backslash ist eine Escape-Sequenz. '\7'ist die Glockenfigur, die beim Ausdruck einen Ton
Justin

@ Justin Huh. Darauf habe ich immer Fehler geworfen (wenn ich doppelte Anführungszeichen verwende). Mein Fehler. Vielen Dank! : D
Addison Crump

3

GMC-4- Maschinencode, 21,5 Byte

Der GMC-4 ist ein 4-Bit-Computer der Firma Gakken, der die Prinzipien der Assemblersprache in einem vereinfachten Befehlssatz und Computer lehrt. Diese Routine nimmt die Eingabe in Datenspeicheradressen 0x5Ddurch eine 0x5FBig-Endian-Dezimalzahl (dh eine Ziffer pro Halbbyte) vor.

Der Algorithmus addiert im Grunde genommen die Eingabe in den Speicher und wartet 0,1 Sekunden, bis sie mindestens 600 beträgt, und subtrahiert dann 600 und piept in einer Endlosschleife. Da der GMC-4 eine Reihe von Register-Swap-Funktionen hat, aber keine Register- Copy- Funktionen, wird dies auf die harte Tour gemacht.

In hex (zweite Zeile ist Position im Speicher):

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

In Montage:

    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

Haftungsausschluss:

Eigentlich besitze ich kein GMC-4. Ich habe dieses Programm sorgfältig mit Online-Dokumentation überprüft, aber möglicherweise habe ich einen Fehler gemacht. Ich kenne die Endianness auch nicht. Es sieht so aus, als wäre der GMC-4 ein Big-Endian, aber ich bin mir nicht sicher. Wenn jemand ein GMC-4 besitzt und dies bestätigen kann / mir die Endianze des GMC-4 mitteilen kann, würde ich es sehr schätzen.


3

C 48 Bytes

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

Eine reine Windows-Lösung (Sleep () - Funktion, um genau zu sein).

Ich habe auch (ab) die Tatsache verwendet, dass printf () die Anzahl der gedruckten Zeichen zurückgibt, um sie als Endlosschleifenbedingung zu verwenden.

Der Aufruf von printf () enthält ein Zeichen zwischen doppelten Anführungszeichen, das hier jedoch aus irgendeinem Grund nicht angezeigt wird. Im Zweifelsfall kopieren und in Sublime Text 2 oder Notepad ++ einfügen, wird das Zeichen als angezeigt BEL.

Dies begann als C ++ - Lösung, fiel aber irgendwie in die C-Teilmenge von C ++ (weil, wie Sie wissen, Sleep()etwas kürzer ist als std::this_thread::sleep_for(std::chrono::milliseconds())) und printf()ist kürzer als std::cout<<).


3

AppleScript 94 Bytes

Ich weiß, ich bin ziemlich spät dran und dies ist mein erster Beitrag hier, aber was auch immer.

Anzeigedialog "" Standardantwort ""
setze x auf 60000 / result's text return
wiederholen
Signalton
Verzögerung x
Ende

Ungolfed:

Anzeigedialog "" Standardantwort ""
setze x auf 60000 / (der Ergebnistext wird zurückgegeben)
wiederholen
    Signalton
    Verzögerung x
Ende wiederholen

Hey, neue Antworten :) Leider kann ich deinen Beitrag nur testen, wenn ich keinen Mac habe;) - aber vielen Dank
PEAR

@PEAR Gern geschehen. :)
Sie

Willkommen bei Programming Puzzles und Code Golf. Das ist eine gute Antwort, +1. Bitte antworte weiter!
wizzwizz4

2

VBScript, 113 66 Bytes

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

Dieses Programm ist einfach genug; Es nimmt Eingaben entgegen, gibt das BEL-Zeichen wieder und wartet. Vielen Dank an Niel, der fast das halbe Programm abgeschnitten hat!


Was ist los mit WScript.Echo CHR(7)? Meinten Sie auch 60000?
Neil

@ Neil Ah, ja. habe diese vergessen .;
Conor O'Brien

2

Ruby, 37 33 Bytes

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

Ziemlich einfach.

Dies ist eine Lambda-Funktion. Wenn Sie 60 bpm wollte, dann würden Sie tun: m[60].


Theoretisch $><<?\asollte das auch für den Piepton funktionieren. Und keine Notwendigkeit , einen Namen für die proc geben (alle JavaScript - Lösungen mit Fett Pfeil Funktion lassen es auch nicht zugeordnet), können Sie es nennen anonym zu: ->b{loop{$><<?\a;sleep 6e1/b}}[60].
Manatwork

@manatwork Ich habe nur Ruby 2.x, daher konnte ich das nicht testen ?\a. Hast du Ruby 1.x? Wenn ja, können Sie testen, ob dies funktioniert?
Justin

Nun, ich habe einen Ruby 1.9.3 und der Code wirft keinen Fehler damit auf. Aber ich habe ein anderes Problem mit dem Testen: Kein Piepton auf meinem Computer. Weder Ruby noch sonst etwas. Stell mal was ein, keine Ahnung was.
Manatwork

2

Japt, 30 Bytes

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

Das ?sollte das wörtliche Byte sein 9A. Online testen! (Entschuldigung, dass das Popup die ersten Beats verzögert. Dies wird bald entfernt.)

Wie es funktioniert

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

Lese die BPM in die Variable I, dann ist F {mit zwei Leerzeichen danach} eine Endlosschleife. Halten Sie für 60 Sekunden / BPM an, und schreiben Sie dann $ CHR (7) {Ascii: BEL} in die Standardausgabe. Geben Sie dabei die erforderliche Audioausgabe an. Starten Sie dann die Endlosschleife erneut.


2

Java, 321 Zeichen

Klingt sehr gut. Funktioniert nur auf Systemen mit MIDI-Unterstützung.

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

.


Sieht gut aus, aber das funktioniert bei mir nicht: pastebin.com/0CbGYkU0
PEAR

@PEAR behoben. Ich habe eine Besetzung vergessen.
Benutzername.ak

@PEAR und ein import
username.ak

@PEAR, ich hatte einige Ops getauscht, weil es keinen Sound gab
username.ak

2

ChucK , 90 Bytes

Weißes Rauschen, das alle zwei Ticks ein- und ausgeschaltet wird.

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

Erläuterung

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

Hiermit schalten Sie den Sound bei einem Beat ein und danach wieder aus.

98 93 byte version (schicker)

Weißes Rauschen wird 10 Millisekunden pro Tick gespielt.

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

Dies ist ein Klick, anstatt dass konstantes Rauschen ein- und ausgeschaltet wird.


2

Perl 5, 36 Bytes

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

Ein Unterprogramm; benutze es als

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

sleepist in Sekunden angegeben, daher können nicht mehr als 60 Signaltöne pro Minute ausgegeben werden. Sie sind sich nicht sicher, ob dies erforderlich ist. Außerdem können Sie wahrscheinlich dieselbe Bytezahl beibehalten, aber ein vollständiges Programm haben, indem Sie Folgendes ausführen: $|=<>;{print"\a";sleep 60/$|;redo}(Kann es derzeit nicht testen).
ChatterOne

@ChatterOne, entsprechend seiner Dokumentation, hast du Recht sleep. Aber es hat bei mir geklappt.
msh210

1

Jolf, 7 Bytes, nicht konkurrierend

Ich habe Sounds hinzugefügt, nachdem diese sehr feine Herausforderung gemacht wurde.

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)

Wenn Sie diesen Ton löschen möchten, notieren Sie sich die Ausgabe. Sagen wir, diese Nummer ist x. Führen Sie einen anderen Jolf-Befehl aus ~CP"x", und das Intervall wird gelöscht.


1

Zsh , 32 Bytes

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

Basierend auf der führenden Bash-Antwort, aber sources statt execs. Der TIO-Link gibt $0:aan, wie die Originaldatei ausgeführt wird, funktioniert jedoch ohne sie.

Probieren Sie es online!


Du bist zu spät zur Party, aber das sieht nach einer wirklich guten Lösung aus!
PEAR

Ich weiß, ich bin spät dran, aber ich wollte heute einfach nur Golf spielen. Beschlossen, das Musik-Tag zum Spaß zu überprüfen, und fanden diese Herausforderung. Gut, übrigens!
GammaFunction

0

Bash + bc + > <> , 44 Bytes

Unter Berücksichtigung der Tatsache, dass Sie mit dem Interpreter> <> eine Tick-Zeit definieren können:

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

Der Code> <> ist 7ound sollte das BELZeichen ausgeben und einen Systemsignalton erzeugen. Es wird wiederholt, bis es unterbrochen wird.
Der -tWert ist auf (2 / U / min) / 60 eingestellt, damit der gesamte Code 60-mal pro Sekunde mit U / min * abgespielt wird.


Vielen Dank für eine neue Antwort nach einiger Zeit nach der Veröffentlichung. Funktioniert bei mir nicht :( Ich bin mir nicht sicher, ob ein Problem mit meinem System oder etwas anderem vorliegt. Ich habe die Datei fish.py von GitHub heruntergeladen und Ihr Kommando ausgeführt (openSUSE) .py [-h] (<Skriptdatei> | -c <Code>) [<Optionen>] fish.py: Fehler: Argument -t / - Häkchen: Erwartet ein Argument
PEAR

Hast du bcinstalliert? Es sieht so aus, als ob der $(bc -l<<<"2/$1/60")keine Ausgabe produziert hat. Ich werde es der Liste der Sprachen der Antwort hinzufügen. Ich konnte meine Antwort noch nicht vollständig testen, sodass möglicherweise auch ein Fehler vorliegt.
Aaron

0

SmileBASIC, 26 Bytes

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

Es kann jedes allgemeine Midi-Instrument spielen, obwohl mehr als 9 Bytes benötigt werden.


0

Stax, 17 Bytes

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

oder ausgepackt:

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

Das Programm gibt Bytes aus, die, wenn sie mit der Standardeinstellung über das Befehlszeilentool abgespielt werden, ein Metronomrauschen erzeugen. Der Eingang wird als BPM verwendet

Beispiel:

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

Sie sollten ein schreckliches Piepen bei der gewünschten Drehzahl hören

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.