用于线程的音乐库

Her*_*che 3 c++ java audio multithreading

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

但我想用线程,线程播放声音,而其他线程播放其他声音.

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

我认为这里的难点在于我想要同时输出不同的声音,预处理这将是典型的方式,但如果声音的混合可以实时完成,它会变得非常有趣.

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

Tyl*_*ves 5

我不认为线程是你想要的.同步太难了.您可能想要做的事情(以及我多年前为类似应用程序所做的)是维护活动笔记的数据结构(可以使用类实例,闭包或任何工作实现),并且对于每个样本,调用每个结构中的项目,对输出求和(我建议此时使用带符号的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
Run Code Online (Sandbox Code Playgroud)

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