Closed. This question needs to be more
focused。它当前不接受答案。
想要改善这个问题吗?更新问题,使它仅关注
editing this post的一个问题。
2年前关闭。
Improve this question
我想编写播放音乐的程序(音频,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)时,我可以得到一两个简单的音符,但不能再得到实时记录。