Ich würde gerne Musik mit R spielen. Während R vielleicht nicht das beste Werkzeug für diesen Zweck ist, ist es das Werkzeug, mit dem ich vertraut bin, und es wäre schön, anderen seine Flexibilität bei solch einer freudigen Gelegenheit zu demonstrieren.
Wie könnte ich das erreichen?
I would like to play video using R
.rasterImage
jedes Bild zu rendern)Antworten:
Wenn Sie das wirklich wollten:
Beachten Sie, dass Sie
install.packages("audio")
zuerst müssen. Wenn Sie bereits eine bestimmte Datei haben, müssen Sie diese zuerst in das WAV-Format konvertieren.Wenn Sie etwas mehr Programmierprogramm als das Abspielen einer WAV-Datei wünschen, finden Sie hier eine Version, die die Melodie aus einer Reihe von Sinuswellen generiert:
Es gibt ein paar Punkte zu beachten. Die Standardoktave für die Noten ist Oktave 4, wobei A4 bei 440 Hz liegt (die Note, mit der das Orchester gestimmt wird). Die Oktaven wechseln bei C, sodass C3 einen Halbton höher als B2 ist. Der Grund für das Einblenden
make_sine
ist, dass ohne das Einblenden beim Starten und Stoppen von Noten hörbare Knallgeräusche zu hören sind.quelle
c
indo.call
, und die letzte Aufgabe inmake_sine
ist nicht erforderlich.do.call
. Es ist allzu leicht, in die Falle zu tappen, so etwasa <- 1; b <- 2; c <- 3
auf dem Weg getan zu haben , und in dieser Situationdo.call(c, ...)
wird es scheitern, währendc(1, 2, 3)
es nicht so ist. Stimmen Sie dem letzteren Punkt jedoch voll und ganz zu und haben Sie die unnötige Zuordnung entfernt!do.call("c", ...)
wird funktionieren. Versuchen Sie esc <- 4; do.call("c", list(1, 2))
. R ist insofern einigermaßen konsistent, als in den meisten Fällen ein Argument, das eine Funktion akzeptiert, entweder die Funktion selbst oder den Namen der Funktion akzeptiert. In einigen Fällen (z. B.lapply
) erfolgt dies übermatch.fun
, während in anderen, z. B.do.call
,getMethod
die Implementierung im C-Code erfolgt (für letztere über einen Aufruf vonC_R_getGeneric
). Ich kann sehen, warum Sie stilistisch vielleicht lieber die Funktion als ihren Namen übergeben möchten, aber das letztere Verhalten ist gut dokumentiert.symbol
Klammern folgen, selbst wenn eine anderesymbol
weiter oben im Suchpfad vorhanden ist. Dies ermöglicht esc <- 4; c(1, 2)
, wie gewohnt zu arbeiten,c <- paste0; c(1, 2)
ohne die Basis zu verwendenc
. Ich habe Verwirrung dadurch gesehen, dass jemandc(1, 2)
seinen Code ziemlich glücklich aufgerufen hat, aber danndo.call(c, ...)
nicht funktioniert. Letztendlich ist mir nicht klar, ob Funktionen namentlich oder direkt bereitgestellt werden.