Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中播放特定频率的声音_Android_Soundpool_Javasound - Fatal编程技术网

在android中播放特定频率的声音

在android中播放特定频率的声音,android,soundpool,javasound,Android,Soundpool,Javasound,我想在android中根据用户输入播放特定频率的声音,有点类似于吉他应用程序。谁能告诉我怎么做?我是否需要在res\raw文件夹中保存所有的freq sounds?否,您不需要将其存储在参考资料中。我认为更好的方法是实时合成音调。为此,您需要以下各项: 用于三角函数计算的java.lang.Math,以正确的音调填充缓冲区(从浮点转换为PCM(int)后) 用于音频播放的android.media.AudioTrack(从缓冲区)。我想静态模式将是您所需要的-更快的响应和更容易操作。然而,音频

我想在android中根据用户输入播放特定频率的声音,有点类似于吉他应用程序。谁能告诉我怎么做?我是否需要在res\raw文件夹中保存所有的freq sounds?

否,您不需要将其存储在参考资料中。我认为更好的方法是实时合成音调。为此,您需要以下各项:

  • 用于三角函数计算的java.lang.Math,以正确的音调填充缓冲区(从浮点转换为PCM(int)后)
  • 用于音频播放的android.media.AudioTrack(从缓冲区)。我想静态模式将是您所需要的-更快的响应和更容易操作。然而,音频播放并不是一项简单的任务,所以你们需要更多地了解Android上的音频系统。当然,一些关于信号处理的基础知识是非常受欢迎的
  • 您甚至可以使用android.media.audiofx添加一些很酷的效果

这是一个极其复杂的问题,尽管看起来不是这样

当你说“声音”时,你是指一种音调(例如正弦、正方形、三角形、锯齿波)还是你想演奏“真实”乐器的声音,如吉他、钢琴等

如果是第一个(简单音调),那么Desiderio的答案可能是正确的,但是如果你想要“真实”的声音,那么你需要在/res/raw或/assets目录中有一个简短的“sample”


您可以将它们加载到SoundPool实例中,并使用它以不同的“速率”进行播放,例如,“速率”2将是速度的两倍,频率的两倍,从而增加一个倍频程。“速率”为0.5将是速度的一半,因此将声音降低八度。

将声音发送到AudioTrack实例,并动态更改其采样速率。

同意。我试图尽可能简单地回答这个问题。只需提及,使用例如Karplus Strong算法对真实仪器进行物理建模是可能的。所以,利用Android智能手机目前的计算能力,应该可以实现实时合成。我在寻找乐器的声音。。因此,除了你建议的方法之外,没有其他方法了?在这种情况下,选择“样本”是非常重要的,对吗?@ashwin,我相信还有MIDI。我会尝试一下,如果有任何困难,我肯定会找到的,我会告诉你的:P非常感谢Desiderio…:)