Я хочу изменять высоту звука аудиоклипа динамически на основе ввода пользователя в разные моменты времени, скажем, если пользователь вводит изменение высоты звука через 10 секунд, как я могу добиться того же?
Я нашел эту ссылку, в котором описывается, как изменить высоту звука, но я хочу повторить этот процесс в разные моменты времени аудиоклипа и только в течение некоторого короткого промежутка времени. Кто-нибудь может помочь мне в этом?
Некоторые правки
Изменить 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);
Теперь, как я могу изменить высоту тона на время, установленное в Редактировать 2, то есть с 10 мс до 50 мс, с помощью кода в Редактировать 1
Кто-нибудь может мне посоветовать, могу ли я сделать то же самое другими способами, кроме Java? тогда предложения приветствуются ... Пожалуйста, помогите. Я новичок в этом.
** Редактировать 3 **
Точную проблему можно указать по этой ссылке: ссылка
Это значения (в миллисекундах), о которых я говорю:
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;
}
}
}