java - Android Studio java,混合两种不同长度的.wav音频,较短的一个循环播放
问题描述
应用目的图片我的目的是混合两个不同长度的 wav 音频,让它们同时播放。
一种是语音,另一种是背景声音。背景声音的长度很短。我需要循环播放背景声音,直到演讲结束。
问题是我的代码结果,音频长度不够,只播放了1/4,两个音频的声音大小没有按计划平衡。
for (int i=0; i<(data1.length+data2.length)/4; i++) 这里如果我不设置 (data1.length+data2.length)/4 程序将关闭。所以我不知道如何设置循环的长度。这是我的代码:</p>
private WavAudio wavMixing(WavAudio wav1, WavAudio wav2, double alpha) {
WavAudio wav = new WavAudio();
// perform the mixing as specified in the assignment and stored the mixed audio in wav
// requirements:
// a) wav's duration should be same as wav1.
// b) if wav2 is shorter than wav1, then repeatedly use wav2 in a periodic manner
// your code goes here
// ***Create three byte[] to store data, wav1 data1, wav2 data2, wav data3***
byte data1[] = wav1.getData();
byte data2[] = wav2.getData();
byte[] data3 = new byte[data1.length];
/// ***Add the sum data of wav1 and wav2 to wav***
for (int i=0; i<(data1.length+data2.length)/4; i++) {
short buf1A = data1[i+1];
short buf2A = data1[i];
buf1A = (short) ((buf1A & 0xff) << 8);
buf2A = (short) (buf2A & 0xff);
short buf1B = data2[i+1];
short buf2B = data2[i];
buf1B = (short) ((buf1B & 0xff) << 8);
buf2B = (short) (buf2B & 0xff);
short buf1C = (short) (buf1A + buf1B);
short buf2C = (short) (buf2A + buf2B);
short res = (short) (buf1C + buf2C);
data3[i] = (byte) res;
data3[i+1] = (byte) (res >> 8);
}
// ***set wav data***
wav.setData(data3);
// ***() = 1() + (1 − )2() Make wav1 and wav2 have different volume levels***
double rate = alpha*wav1.getRate() + (1-alpha)*wav2.getRate();
// ***set new wav***
wav.set((int) rate,wav1.getNumChannels(),wav1.getBitPerSample(),wav1.getNumSamples(),wav.getData());
// ***wav duration = wav1 duration***
wav.duration = wav1.getDuration();
return wav;
}
解决方案
推荐阅读
- wordpress - 从 Wordpress 休息返回中获取真正的错误消息
- node.js - 如何避免角度 ejs 选择选项标签中的黑色选项?
- azure-active-directory - 如何填充 Azure Active Directory B2C 用户自定义用户属性?
- python - Python 3.9:BeautifulSoup:“NoneType”对象没有属性“文本”
- sql - Select all product's last price and if null set to 0
- swift - Mailgun error code 400 "'from' parameter is missing"
- python - 熊猫将值拆分为变量
- python - 通过循环迭代numpy数组的元素
- r - 您可以将变量设置为列名吗?
- r - 尝试使用 R 对 Sankey 图中的节点进行排序?