Alternative zu APLAY für Mac OS X Bash


11

Kennt jemand eine Mac-Alternative für das APLAY-Programm von Linux? Ich möchte dieses Skript ausführen:

echo "main(i){for(i=0;;i++)putchar(((i*(i>>8|i>>9)&46&i>>8))^(i&i>>13|i>>6));}" | gcc -x c - && ./a.out | aplay

Das macht einen großartigen Soundeffekt, aber ich weiß nicht wie, da Mac OS kein Play hat .

BEARBEITEN:

Link zu Wikipedia, der die Funktionalität von aplay beschreibt.


Was macht aplay?
user151019

Siehe Bearbeiten, verknüpfte URL.
Michal

Antworten:



7

Hier ist das gleiche Programm wie ein Perl-Einzeiler, das unter Mac, Linux und Windows funktioniert (getestet)

perl -e 'for($i=0;;$i++){
    print pack("n", ((($i*($i>>8|$i>>9)&46&$i>>8))^($i&$i>>13|$i>>6))); 
}' | ./play -c 1 -b 8 -e unsigned -t raw -r 8k -

Der Befehl "./play" ist das in diesem Artikel bereits erwähnte Dienstprogramm "sox". 


2
aplay verwendet 8khz nicht 48 ... also sollte der Befehl eher seinplay -c 1 -b 8 -e unsigned -t raw -r 8k -
hashier

5


Ich weiß, dass dieses Thema alt ist, aber ich habe eine aktuelle funktionierende Lösung gefunden. SOX unterstützt keine Eingaben von stdout mehr, daher ist jetzt eine funktionierende Alternative mplayer. Sie müssen es mit Hombrew.sh mit installieren brew install mplayer.

Sie können dann ersetzen aplaydurch: mplayer -cache 1024 -quiet -rawaudio samplesize=1:channels=1:rate=8000 -demuxer rawaudio -

Stellen Sie einfach sicher, dass Sie rate=8000mit Ihrer benutzerdefinierten Frequenz ändern .

Sie können einen Alias ~/.bashrcfür aplay erstellen, um Ihren PCM-Chiptune wie folgt einzuschalten:

alias aplay="mplayer -cache 1024 -quiet -rawaudio samplesize=1:channels=1:rate=8000 -demuxer rawaudio -"

Hoffe das hat geholfen, heute auf macOs Sierra 10.12.5 getestet.


3

aplaybenötigt ALSA, das nur unter Linux verfügbar ist. Sie können versuchen, diesen Bytestream in eine Datei auszugeben und unter afplayOS X zu spielen. (Sie müssen wahrscheinlich die richtigen AIFF-Header hinzufügen afplay, um die Datei zu akzeptieren, da kein roher PCM-Dump abgespielt wird (oder jedoch der Bytestream, aus dem er stammt) dieses Echo sollte interpretiert werden).)


Der lustige Teil des Spiels und dieses kleinen C-Algorithmus ist, dass es sich im Laufe der Zeit ändert und unterschiedliche Klänge erzeugt, so dass die Ausgabe dies wegnehmen würde :(
Michal

Sehen Sie es als längere Zeitverzögerung für die Pufferung der Wiedergabe. :-) Wie sind diese Daten zu interpretieren? Dies kann hilfreich sein, um ein geeignetes Befehlszeilenprogramm zu finden, das unter OS X zum Abspielen der vom Dienstprogramm generierten Daten funktioniert. (Zum Beispiel könnte das mit mpg123 funktionieren, obwohl ich das noch nicht ausprobiert habe.)
MacLemon

Was würden Sie vorschlagen?
Michal

2

Ich habe mpv verwendet. Die Optionen ähneln denen von mplayer, aber der Schalter --rawaudio wird in mpv nicht mehr unterstützt. Dies ist, was Sie stattdessen tun:

echo 'c_program' | gcc and crap | mpv --cache=1024 --quiet \
    --demuxer=rawaudio \
    --demuxer-rawaudio-format=u8 \
    --demuxer-rawaudio-channels=1 \
    --demuxer-rawaudio-rate=8000 -

Ich war ein bisschen verwirrt mit "gcc and crap", aber ich habe herausgefunden, dass Sie sich nur auf die Parameter beziehen, die an den Compiler übergeben wurden. Funktioniert wirklich gut, Prost!
Michal

1

Installieren Sie Sox von Homebrew und verwenden Sie es play -c1 -b8 -eunsigned -traw -r8k -stattdessen anstelle von auplay.

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.