如何在 Android 上播放非正弦音符?迷笛?

Posted

技术标签:

【中文标题】如何在 Android 上播放非正弦音符?迷笛?【英文标题】:How do I play non-sine notes on Android? MIDI? 【发布时间】:2011-12-20 06:35:10 【问题描述】:

我正在编写一个伴奏应用程序,它需要不断地演奏特定的音符(甚至是和弦)。我有一个线程正在运行,可以确定我需要播放哪个音符,但我不知道从哪里开始实际播放。我知道我可以创建一个音轨并向它写入一个正弦波,但对于这个项目,一个简单的音调不会削减它。所以我猜我要么需要使用 MIDI(android 可以做到这一点吗?)或者以某种方式采样并动态改变它的音高,但我不知道这是否可能。

【问题讨论】:

Android app for composing music: Beginner的可能重复 快速搜索让我找到了一些有希望的热门歌曲,包括上面的 SO 帖子,或者这个 ***.com/questions/4056846/available-music-api 【参考方案1】:

我只能说看看 pitch-shifting(您似乎听说过)和 soundpool(这需要您自己录制一些录音)和这两个链接:

Audio Playback Rate in Android

Programmatically increase the pitch of an array of audio samples

第二个链接似乎有更多信息。

【讨论】:

谢谢。好的,所以我可以通过一些倍数来改变播放速率,但是我如何确定是否要播放一些音符?如果我在 C5 录制了一个样本,它会像在 0.5(完成一个八度音程)和 1.0 之间以 1/12 为增量(所以一个增量是 12 个音符之一)一样容易吗?乘数 = 0.5 + ((1.0 - 0.5) * (t/12f)) @ThePwnStick 不要“懒散”。音符是对数刻度:每个半音是2**(1/12) 乘以它下面的频率。如果你不喜欢数学,你也可以搜索“notes hertz”并找到一个表格,其中包含每个音符的实际频率。 @ThePwnStick 另请注意,Android 中的播放速率有些受限,因此您需要有多个样本,例如每个八度音程一个。然后,您为所需的音高选择“最近”样本,并设置速率以将其调整为正确的音高。这里只是推测,但如果您录制原声乐器,可能最好使用单个录音,然后使用 sox 或 Audacity 之类的工具来生成每个八度音阶的样本,否则可能会有八度音阶之间有明显的不连续性。

以上是关于如何在 Android 上播放非正弦音符?迷笛?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AudioTrack 提高音符合成的性能

如何在 iOS 上播放音符(.mid 文件)?

在 iOS 上播放音符或简单的声音?

Pygame - 永久调整主音量

在android soundpool中播放新声音时如何停止所有其他以前的声音?

音频处理乐器音符播放时电流处理 ( 使用均衡器调节低频 )