java - 与线程一起使用的音乐库

标签 java c++ multithreading audio

<分区>

我想编写播放音乐的程序(音频或 midi 甚至纯音都可以)

但我想将它与线程一起使用,一个线程播放声音,而另一个线程播放其他声音。

  • 线程 1 * 可以播放不同强度和频率的纯音 (形成更复杂的包络,创造声音的“音色”))
  • 线程 2 * 一组线程 1 可以在给定的音色中演奏不同的音符 (从乐器声音组成和弦)
  • 线程 3 * 一组线程 2 可以用不同的音符演奏和弦 (代表音乐家)
  • 线程 4 * 一组线程 3 可以成为管弦乐队! =)

我认为这里最难的部分是我想同时输出不同的声音,这是典型的预处理方式,但如果声音的混合可以现场完成,它就会变得更加有趣。

任何想法、经验、图书馆或信息都会有所帮助,在此先感谢!

最佳答案

我认为线程不是您想要的。同步太困难了。您可能想要做的(以及我几年前为类似应用程序所做的)是维护 Activity 笔记的数据结构(可以用类实例、闭包或任何有效的方法来实现),并为每个示例调用每个结构中的项目,对输出求和(此时我建议使用带符号的 16 位数学,因此您的值在 -32767 到 +32768 的范围内)。要混合,只需将各种信号相加即可。

类似下面的内容:

#ts = A clock, in eg, seconds, passed in to your calls for generation purposes.
sample = sum([notefunc(ts) for notefunc in notes])
#Now convert the sample to whatever format needed for your media lib
#Update notes array

... 并以 44100 次/秒的速度重复该循环。可能需要某种缓冲。实际实时是棘手的。回到我玩这些东西的时候(在 233mhz G3 Powerbook 上大约 2000)我可以通过一两个简单的笔记获得实时,但不能更多。

关于java - 与线程一起使用的音乐库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170316/

相关文章:

java - 结果未显示在 ListView Android 中

c++ - OpenCV中的熵过滤器类似于matlab中的entropyfilt()函数

c# - 只允许一个线程通过/不让线程不必要地等待

java - 在 Cucumber 测试场景中比较整数值的最佳实践

java - 直接在枚举中使用 Wicket 属性

c++ - CUDA 和 C++ 中的名称重整

C++ libclang : Retrieving cursor from CXSourceLocation returning wrong cursor?

multithreading - 如果线程的主进程被强制结束,线程是否会自动终止?

C++ 是否使用 OpenAL 进行实时 PCM fft 音频处理?

java - Java 或 C++ 中的 API,用于读取机读区旅行证件(护照)代码