我正在玩 Alsa API,我想知道应该将哪些参数传递给函数 snd_pcm_writei只需演奏视唱练耳音节/音符(A-G/do re mi fa sol la si do)。
谢谢
最佳答案
如果您确实想使用该函数执行此操作,请在缓冲区中生成波形。三角波可能听起来不太糟糕,并且应该足够简单来生成。
基础“la”(A) 为 440Hz,即每秒 440 个您选择的波形周期。
对于高于/低于该基频的每个半音,可以通过乘/除 2^(1/12) (1.05946309
) 来获得其他音符。您需要知道输出设备的设置频率(这可能是另一个 ALSA 函数的参数)。如果设备频率为 44100 Hz,并且您想要播放基音“la”,则波形的每个周期应占用 44100/440 或大约 100 个样本。还要注意样本宽度和设备配置的 channel 数。
说明:一个 Octave 中有 12 个半音,一个 Octave 恰好是频率的一半(低音)或两倍(高音)。一旦您乘以 2^(1/12) 12 倍,就乘以了 2,因此每个半色调比前一个半色调高出 2^(1/12) 倍。
关于c - 使用 ALSA API 演奏视唱音符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7275299/