我想写一些播放音乐的程序(音频、midi甚至纯音都可以)。
但是我想将它与线程一起使用,线程播放声音,而其他线程播放其他声音。
困难的是,我想我想要同时输出不同的声音,这是典型的预处理方式,但是如果声音的混合可以现场进行,它就会变得更有趣。
任何想法、经验、图书馆或信息都会有所帮助,谢谢!
发布于 2011-03-02 16:34:52
我不认为这是你想要的。同步太困难了。您可能想要做的事情(以及几年前我对一个类似的应用程序所做的事情)是维护一个活动注释的数据结构(可以用类实例、闭包或其他有效的方法实现),对于每个示例,调用结构中的每个项,并将输出加起来(此时我建议使用签名的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次的速度重复这个循环。可能需要某种缓冲。实际的实时操作很棘手。当我在玩这个东西的时候(在233 but的G3 Powerbook上~2000),我可以用一两个简单的音符就可以得到实时的信息,但不是更多。
发布于 2011-03-14 22:06:56
您可能想看看GStreamer框架。它允许您将音频流建模为由元素组成的“管道”。并行元素将在不同的线程中自动处理。元素可以使用“时钟”保持同步。
看一看手册。前十章将给你一个很好的可能性概述。(它读起来很快。)
从插件列表的角度来看,midi似乎得到了一些支持。
发布于 2011-03-15 16:49:22
jMusic似乎有一个全面的库。他们网站上的链接页面也有更多的资源。n.b.我没有生气地用它;几年前我看过它,然后选择了一个商业软件包.
hth,R
https://stackoverflow.com/questions/5170316
复制相似问题