我需要在命令行上生成给定频率的音符
以下是音符http://www.phy.mtu.edu/~suits/notefreqs.html
的频率列表例如:
$ some-app -frequency 523.25 -timeinseconds 3
它可以是原生的mac,python或ruby工具。我需要安装的库越少越好。也许我可以用mac做点什么:说或者是afplay?
这将用于发送音乐笔记的其他项目,我想在使用它时听到它。
答案 0 :(得分:11)
SoX非常适用于此目的,并且可以在brew中使用:
$ brew install sox
$ play -n synth 3 sin 523.25
您还可以将声音保存到文件中:
$ play -n out.wav synth 3 sin 523.25
答案 1 :(得分:8)
它简单,陈旧且无需维护,但请查看https://github.com/psycotica0/tone-generator
$ brew install sdl
$ git clone https://github.com/psycotica0/tone-generator.git
$ cd tone-generator && make
$ ./generator 2600 2
答案 2 :(得分:4)
$ say "do ray me fa so la te do"
LOLS。
答案 3 :(得分:2)
我根据@ arbovm的答案编写了一个脚本,为特定音符生成音调。
用法:
./tone.sh G# 4
脚本:
#!/bin/bash
# plays middle c with no args
RAW_NOTE=${1:-C}
NOTE=$( tr '[:upper:]' '[:lower:]' <<< "$RAW_NOTE" )
OCTAVE=${2:-4}
case "$NOTE" in
"a")
NOTE_INT=9
;;
"a#" | "bb")
NOTE_INT=10
;;
"b")
NOTE_INT=11
;;
"c")
NOTE_INT=0
;;
"c#" | "db")
NOTE_INT=1
;;
"d")
NOTE_INT=2
;;
"d#" | "eb")
NOTE_INT=3
;;
"e")
NOTE_INT=4
;;
"f")
NOTE_INT=5
;;
"f#" | "gb")
NOTE_INT=6
;;
"g")
NOTE_INT=7
;;
"g#" | "ab")
NOTE_INT=8
;;
*)
echo "Note not recognized"
exit 1
;;
esac
# calc 12th root of 2 to get equal temperament ratio between notes
# see http://phodd.net/gnu-bc/bcfaq.html#bccbrt
EQL_TEMPERAMENT=$( bc -l <<< 'e(l(2)/12)' )
A4_HZ=440
A0_HZ=$( bc -l <<< "$A4_HZ / 16" )
C0_HZ=$( bc -l <<< "$A0_HZ * ( 1 / $EQL_TEMPERAMENT ) ^ 9" )
HZ=$( bc -l <<< "$C0_HZ * 2^$OCTAVE * $EQL_TEMPERAMENT ^ $NOTE_INT" )
# requires sox
DURATION=99999999 # forever
play -n synth $DURATION sin $HZ