【发布时间】:2015-03-18 06:20:57
【问题描述】:
我想根据用户在不同时刻的输入动态修改音频剪辑的音高,比如如果用户输入在 10 秒后改变音频的音高,那么我该如何实现呢?
我发现这个link 描述了如何修改音高,但我想在音频剪辑的不同时刻重复这个过程,并且只持续一段时间。有人可以指导我吗?
一些修改
编辑 1
我发现了这段代码,正如我之前提到的那样
//source file
final File file1 = new File(“Sample.mp3”);
//destination file
final File file2 = new File(“Sample_cat.wav”);
//audio stream of file1
final AudioInputStream in1 = getAudioInputStream(file1);
//get audio format for targetted sound
final AudioFormat inFormat = getOutFormat(in1.getFormat());
//change the frequency of Audio format
private AudioFormat getOutFormat(AudioFormat inFormat) {
int ch = inFormat.getChannels();
float rate = inFormat.getSampleRate();
return new AudioFormat(PCM_SIGNED, 72000, 16, ch, ch * 2, rate,
inFormat.isBigEndian());
}
//get the target file audio stream using file format
final AudioInputStream in2 = getAudioInputStream(inFormat, in1);
//write the audio file in targeted pitch file
AudioSystem.write(in2, AudioFileFormat.Type.WAVE, file2);
编辑 2 我找到了另一个代码,它设置了您想要开始和停止音频的音频文件的位置。
File audioFile = new File(audioFilePath);
AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip audioClip = (Clip) AudioSystem.getLine(info);
audioClip.open(audioStream);
audioClip.setLoopPoints(10_000, 500_000);
audioClip.loop(1);
现在,如何使用 Edit 1
中的代码更改 Edit 2 中设置的持续时间的音高,即 10 毫秒至 50 毫秒如果我可以用除 Java 之外的任何其他方式做同样的事情,有人可以建议我吗?那么欢迎提出建议... 请帮忙。我是新来的。
**编辑 3 **
可以参考这个链接上的确切问题:link
这些是我所指的值(以毫秒为单位):
public static void convertMsgToAudio(String msg){
int len = msg.length();
duration = new double[len];
msg = msg.toUpperCase();
System.out.println("Msg 2 : " + msg);
int i;
//char ch;
for(i=0;i<msg.length();i++){
if(msg.charAt(i) == 'A'){
duration[i] = 50000;
}
else if (msg.charAt(i) == 'B'){
duration[i] = 100000;
}
else if (msg.charAt(i) == 'C'){
duration[i] = 150000;
}
else if (msg.charAt(i) == 'D'){
duration[i] = 200000;
}
else if (msg.charAt(i) == 'E'){
duration[i] = 250000;
}
else if (msg.charAt(i) == 'F'){
duration[i] = 300000;
}
else if (msg.charAt(i) == 'G'){
duration[i] = 350000;
}
else if (msg.charAt(i) == 'H'){
duration[i] = 400000;
}
else if (msg.charAt(i) == 'I'){
duration[i] = 450000;
}
else if (msg.charAt(i) == 'J'){
duration[i] = 500000;
}
else if (msg.charAt(i) == 'K'){
duration[i] = 550000;
}
else if (msg.charAt(i) == 'L'){
duration[i] = 600000;
}
else if (msg.charAt(i) == 'M'){
duration[i] = 650000;
}
else if (msg.charAt(i) == 'N'){
duration[i] = 700000;
}
else if (msg.charAt(i) == 'O'){
duration[i] = 750000;
}
else if (msg.charAt(i) == 'P'){
duration[i] = 800000;
}
else if (msg.charAt(i) == 'Q'){
duration[i] = 850000;
}
else if (msg.charAt(i) == 'R'){
duration[i] = 900000;
}
else if (msg.charAt(i) == 'S'){
duration[i] = 950000;
}
else if (msg.charAt(i) == 'T'){
duration[i] = 1000000;
}
else if (msg.charAt(i) == 'U'){
duration[i] = 1100000;
}
else if (msg.charAt(i) == 'V'){
duration[i] = 1200000;
}
else if (msg.charAt(i) == 'W'){
duration[i] = 1300000;
}
else if (msg.charAt(i) == 'X'){
duration[i] = 1400000;
}
else if (msg.charAt(i) == 'Y'){
duration[i] = 1500000;
}
else if (msg.charAt(i) == 'Z'){
duration[i] = 1600000;
}
}
}
【问题讨论】:
-
没人能帮我吗?
-
如果我可以用除 Java 之外的任何其他方式做同样的事情,谁能建议我?那么欢迎提出建议...
标签: java audio time javasound pitch