c - 使用 ALSA API 演奏视唱音符?

标签 c audio alsa waveform procedural-generation

我正在玩 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/

相关文章:

c - 多个链表

ios - AVPlayer音量太慢

flash - AS3收听mp3播放的开始

linux - ALSA soc_pcm_open() 未被调用

树莓派上的 Alsa 问题

raspberry-pi - 如何在不重启树莓派本身的情况下重启 ALSA?

c - 在循环中使用 strlen 反转 C 中的字符串

c++ - C/C++ 中 void main 和 int main 的区别?

c - 静态函数是否需要 C 中原型(prototype)的 static 关键字?

audio - 将多个 RTP 流混合成一个流