用于线程的音乐库[关闭]
Posted
技术标签:
【中文标题】用于线程的音乐库[关闭]【英文标题】:Music library for using with threads [closed] 【发布时间】:2011-03-02 16:20:05 【问题描述】:我想编写播放音乐的程序(音频或midi甚至纯音都可以)
但我想将它与线程一起使用,一个线程播放声音,而另一个线程播放其他声音。
线程 1 * 可以播放不同强度和频率的纯音 (形成更复杂的包络,创造声音的“音色”)) 线程 2 * 一组线程 1 可以在给定音色中播放不同的音符 (从乐器的声音形成和弦) 线程 3 * 一组线程 2 可以演奏不同音符的和弦 (代表音乐家) 线程 4 * 一组线程 3 可以成为一个管弦乐队! =)我认为这里的难点是我想同时输出不同的声音,预处理是典型的方式,但如果声音的混合可以现场完成,它会变得非常有趣。
任何想法、经验、图书馆或信息都会有所帮助,在此先感谢!
【问题讨论】:
我很犹豫是否将其发布为实际答案,但您也许可以从我的相关 codegolf 答案中收集一两个关于如何实施@Tyler 答案的想法:codegolf.stackexchange.com/questions/272/… 由于您没有提及特定的操作系统,我建议您查看 fmod (fmod.org/index.php/download)。 @mootinator 感谢您的参考,@yms.cu 我会检查它 【参考方案1】:我不认为线程是你想要的。同步太难了。您可能想要做的(以及几年前我为类似的应用程序所做的)是维护活动笔记的数据结构(可以使用类实例或闭包或任何有效的方法来实现),并且对于每个示例,调用每个结构中的项目,对输出求和(我建议此时使用带符号的 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 分钟),我可以通过一两个简单的音符获得实时,但不能更多。
【讨论】:
您使用什么语言/库进行声音输出? 这是某种 MacAudio 模块。请记住,这是 OS8.6 下的 Python 1.5.2,因此与现代情况完全不相关。这些天我可能会关注 OpenAL 或 SDL 之类的东西。【参考方案2】:您可能想看看GStreamer framework。它允许您将音频流建模为由元素组成的“管道”。并行元素将在不同的线程中自动处理。元素可以使用“时钟”保持同步。
看看manual。前 10 章将为您提供对可能性的一个很好的概述。 (而且读起来很快。)
查看list of plugins 似乎有一些对midi 的支持。
【讨论】:
【参考方案3】:jMusic 似乎有一个综合库。他们网站上的links 页面也有更多资源。 [n.b.我没有在愤怒中使用它;几年前我看过它,然后转而选择了商业包...]
hth,R
【讨论】:
【参考方案4】:这是一个有趣的blog,它将音乐和软件结合在一起。博客的This page 致力于音乐软件中的线程和无锁算法,并且有一个库列表。另外here 是另一个您会感兴趣的列表。
【讨论】:
【参考方案5】:考虑使用 Juce 库 (http://www.rawmaterialsoftware.com/juce.php)。
这是一个 C++ 跨平台库。 除了音频功能,它还有许多不同的功能(http://www.rawmaterialsoftware.com/jucefeatures.php):
-
线程同步函数
GUI 构建和图形功能
支持 VST 插件
Midi 支持
双重许可(GPL 2.0 或专有许可)允许您重新分发您的工作或编写封闭源代码应用程序。
很多专业的音频应用都是用这个库写的,比如 MAX/MSP (http://en.wikipedia.org/wiki/Max_%28software%29)
【讨论】:
【参考方案6】:我会推荐JFugue。 我自己使用这个库来使用多线程编程音乐。
作为一个实验,我改编了一个现有的Piano module,它也在使用 JFugue。
【讨论】:
以上是关于用于线程的音乐库[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
是否有用于音乐信息(专辑、艺术家、曲目)的免费数据库或网络服务 API? [关闭]