任何人都知道学习音频dsp for android的任何有用链接? 还是一个健全的图书馆?
我试图制作一个基本的混音器来播放wav文件,但意识到我对dsp知之甚少,而且我无法找到任何关于android的东西。
我有一个wav文件加载到一个字节数组和一个短循环的AudioTrack。 我该如何提供数据?
我希望这篇文章会被忽略,但值得一试。
FileInputStream is = new FileInputStream(filePath);
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
int i = 0;
while (dis.available() > 0) {
byteData[i] = dis.readByte(); //byteData
i++;
}
final int minSize = AudioTrack.getMinBufferSize( 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT );
track = new AudioTrack( AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT,
minSize, AudioTrack.MODE_STREAM);
track.play();
bRun=true;
new Thread(new Runnable() {
public void run() {
track.write(byteData, 0, minSize);
}
}).start();
答案 0 :(得分:0)
我会因为几个月前我在你的位置而给我一个机会......
如果你已经在字节数组中有wav文件音频样本,你只需要将样本传递给音频轨道对象(查找write()方法)。
要将音频混合在一起,您只需添加每个音轨的相同内容即可。例如,将第一个样本从轨道1添加到轨道2,将第二个样本从轨道1添加到轨道2,依此类推。理想情况下,最终结果将是第三个数组,其中包含您传递给音频轨道实例的“write”方法的添加的samplws。
你必须注意剪裁。如果您的数据类型为“short”,则允许的最大值为32768.确保添加的样本不超过此限制的一种简单方法是执行添加并将结果存储在数据类型大于short的变量中(例如.int)并评估结果。如果它大于32768,则使其等于32768并将其转换为短路。
int result = track1[i] + track2[i];
if(result > 32768) {
result = 32768;
}
else if(result < -32768) {
result = -32768;
}
mixedAudio[i] = (short)result;
请注意上面的代码段如何测试短片的最小范围。
这里缺乏格式化的习惯,我在火车上的手机上: - )
祝你好运。