(如果您不熟悉声音编程,请参阅“编辑”)
我正在撰写媒体艺术计划,我想做以下事情。
有一个SourceDataLine
正在运行,
例如,每10毫秒,
我通过sourceDataLine.write()
方法发送长度为1764的字节数组
(44100 Hz,16位立体声音频数据,441个样本* 2个字节(16位)* 2个通道= 1764)
如果已存在要播放的音频数据,
这很容易实现。
也就是说,从音频字节数组中取出1764并每秒发送到sourceDataLine
100次。
从这里开始,我的问题
我想在点击鼠标时播放声音
所以,我无法预先知道声音数据
要做到这一点,我必须知道点击的时间,
从定时信息中,我将声音数据写入适当的位置
字节数组
我怎样才能做到这一点?
我能想到的一种方法是
当声音开始时,我将System.nanoTime()
存储到long
变量,
点击后,我测量声音的位置
但它似乎不太酷。
我不会将MIDI用于此目的,
因为我想合成声音
谢谢。
EDITED
对于那些不熟悉Java音频API的人。
我想记录特定采样率的点击时间,
并输出实时记录数据。
EDITED2
检查每个样品中是否点击是不可能的,
因为两个原因
间隔很短。 (在44100赫兹的情况下大约23微秒)
2.结果数据的准确性(时间)会波动。