Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与线程一起使用的音乐库_Java_C++_Multithreading_Audio - Fatal编程技术网

Java 与线程一起使用的音乐库

Java 与线程一起使用的音乐库,java,c++,multithreading,audio,Java,C++,Multithreading,Audio,我想写播放音乐的程序(音频或midi,甚至纯音都可以) 但是我想把它和线程一起使用,一个线程播放一个声音,而另一个线程播放另一个声音 线程1*可以播放不同强度和频率的纯音 (形成更复杂的包络,创造声音的“音色”) 线程2*一组线程1可以在给定的音色中播放不同的音符 (从乐器声音中形成和弦) 线程3*一组线程2可以用不同的音符弹奏和弦 (代表音乐家) 线程4*一组线程3可以成为一个乐团!=) 我认为这里最困难的部分是我想同时输出不同的声音,预处理是典型的方式,但是如果声音的混合可以现场进行,它

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

但是我想把它和线程一起使用,一个线程播放一个声音,而另一个线程播放另一个声音

  • 线程1*可以播放不同强度和频率的纯音 (形成更复杂的包络,创造声音的“音色”)
  • 线程2*一组线程1可以在给定的音色中播放不同的音符 (从乐器声音中形成和弦)
  • 线程3*一组线程2可以用不同的音符弹奏和弦 (代表音乐家)
  • 线程4*一组线程3可以成为一个乐团!=)
我认为这里最困难的部分是我想同时输出不同的声音,预处理是典型的方式,但是如果声音的混合可以现场进行,它会变得更加有趣


任何想法、经验、图书馆或信息都会有所帮助,提前谢谢

我认为线程不是您想要的。同步太困难了。您可能想要做的(以及几年前我为一个类似的应用程序所做的)是维护一个活动注释的数据结构(可以通过类实例、闭包或任何有效的方法实现),并且对于每个示例,调用结构中的每个项,对输出进行求和(我建议在这一点上使用有符号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次),我可以用一两个简单的笔记来获得实时性,但不能更多。

您可能想看看。它允许您将音频流建模为“管道”由元素组成。并行元素将在不同线程中自动处理。元素可以使用“时钟”保持同步

看一看。前10章将给你一个很好的可能性概述。(它读起来很快。)

看看s,似乎有一些对midi的支持。

似乎有一个全面的库。他们网站上的页面也有更多的资源。 [n.b.我没有愤怒地使用它;几年前我看了看它,转而选择了商业包装…]


hth,R

这里有一个有趣的链接,将音乐和软件结合在一起。这个博客的第二部分专门介绍音乐软件中的线程和无锁算法,还有一个库列表。还有一个列表,您将感兴趣。

考虑使用Juce库()

是C++交叉平台库。 除了音频功能外,它还有许多不同的功能()

  • 线程同步功能
  • Gui构建和图形功能
  • 支持VST插件
  • Midi支持
  • 双重许可(GPL2.0或专有许可)允许您重新发布您的作品或编写封闭源代码应用程序
  • 很多专业音频应用程序都是用这个库编写的,比如MAX/MSP()

    我推荐。 我自己使用这个库使用多线程编程音乐


    作为一个实验,我改编了一个也在使用JFugue的现有版本。

    您使用了什么语言/库来进行声音输出?它是某种MacAudio模块。请记住,这是OS8.6下的Python 1.5.2,因此与现代情况完全不相关。这些天我可能会看到类似OpenAL或SDL的东西。我很犹豫是否使用它将此作为实际答案发布,但您可能能够从我的相关codegolf答案中收集到一两个如何实现@Tyler答案的想法:因为您没有提到具体的操作系统,我建议您查看fmod()。@mootinator谢谢您的参考,@yms.cu我会检查它