如何使用A440(MIDI)获取音符的频率

时间:2016-06-01 06:39:06

标签: c# midi

我正在尝试使用A440

编写一个返回键盘上音符频率的方法

基本上我需要将看到here的等值转换为c#

以下是我的解释,但我得错了输出,我对这个等式的解释有什么不对?

public static float GetFrequency(int keyIndex)
{
    /// The following equation gives the frequency (f) of the nth key
    /// f(n) = (2 * (n - 49 / 12)) * 440 Hz
    return (2 * ((keyIndex - 49) / 12)) * 440;
}

2 个答案:

答案 0 :(得分:4)

指数不是乘法,你需要使用浮点值来避免整数舍入:

return Math.Pow(2, (keyIndex - 49) / 12.0) * 440;

答案 1 :(得分:0)

我碰巧看到了这个旧的问题/答案,并注意到 49 与 MIDI 相关的使用,所以即使这是旧的,我认为值得注意;) 添加一个额外的答案。

频率 440 Hz (A4) 对应于 MIDI 音符编号 69。因此,尽管计算是正确的,并且可以用于任何参考标准(不仅仅是 MIDI),但 MIDI 的参考音符应该是 69。编号 49 是钢琴键(更多见OP链接的维基页面)。

\documentclass[12 pt,a4 paper]{article}
\usepackage[top=1cm,left=1in,right=1 in,bottom=1in]{geometry}
\usepackage[table]{xcolor}
\usepackage{times}
\usepackage{graphicx}
\usepackage{marvosym}
\usepackage[onehalfspacing]{setspace}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage{multirow}
\fancyhf{}
\newcommand{\doublerule}[1][.4pt]{%
  \noindent%
  \makebox[0pt][l]{\rule[.7ex]{\linewidth}{#1}}%
  \rule[.3ex]{\linewidth}{#1}}

\begin{document}
\pagestyle{empty}
\vspace{12 mm}
\centerline{%
\makebox[\paperwidth]{%
\begin{tabular}{@{\hspace{.08\paperwidth}} p{.32\paperwidth} p{.2\paperwidth} p{.32\paperwidth} @{\hspace{.08\paperwidth}} }
\multicolumn{1}{@{}r@{}}{\Large Bangalore} & \centering\multirow{1}{*}{\includegraphics[width=.9\linewidth]{example-image-duck}} & \Large University\\
\multicolumn{1}{@{}r@{}}{\large Dr Vijaykumar H Doddamani} &   & Department of Physics\\
\multicolumn{1}{@{}r@{}}{M.Sc., M. Phil., PhD} && Ph. Off: 080-22961471/84 \\
&&Fax: 080-23219295\\
\textbf{\large Professor} & & Mobile : 9481300346 \\
Email: drvkd@gmail.com & \centering Jnanabharathi Campus  & Mobile : 9448673274 \\
\hphantom{Email:} profvijaykumarhd@bub.ernet.in & \centering Bengaluru - 560 056  & WhatsApp :9741716744 \\[2mm]
\arrayrulecolor{red}\hline\hline
\end{tabular}%
}}



\end{document}

这是一个维基参考:Frequencies, MIDI note numbers, etc.