*** Предыстория: я создал клавиатуру пианино с 31 клавишами в Intellij Idea с LibGDX.Я создал музыкальный файл, содержащий .wav для КАЖДОЙ клавиши (18 белых клавиш, 13 черных клавиш).Пианино было визуально создано с использованием таблиц для представления каждой клавиши (с черным, сложенным над белым).
Так что, когда кто-то нажимает на нижнюю клавишу, которая здесь является F2, будет воспроизводиться соответствующий файл "2F.wav", которыйЭто образец PolySaw F2.
*** Теперь моя цель и проблема, с которой я столкнулся:
*** Цель: Я добавил ползунок под клавишами пианино.Ползунок должен иметь возможность модулировать частоту каждой ноты или нот, которые воспроизводятся.Перемещение слайдера ниже (его вертикаль) должно сделать звучание нот более басовым, обрезая верхние и средние частоты.В середине, это будет просто вырезать максимумы и оставить средние, низкие и низкие частоты.Все время сэмпл воспроизводится как обычно, со всеми высокими частотами.
Так что сейчас я не беспокоюсь о ползунке так сильно, как я просто пытаюсь кодировать способ повлиять на частоту любогоиз файлов WAV, воспроизводимых для каждой ноты.Я думал об использовании AudioDevice, я просто смущен этим и не понимаю, как ввести .wav в него, когда он запрашивает «шорты» или «плавает» в качестве 1-го аргумента.Я пытаюсь лучше понять, как Audio работает в LibGDX и с точки зрения разработки под Android, поэтому приведенный ниже код является примером (не МОЙ код, а то, что я использую для изучения), который я использую, чтобы узнать о AudioDevices,AudioRecorder, Audio и, самое главное, модулирующее частоту.
*** Проблема: мне нужно знать, каков наилучший метод / алгоритм кодирования для чтения внутренних файлов WAV и их воспроизведения на заданной частоте от 20 до20000.Я не хочу изменять высоту нот .wav при их воспроизведении / щелчке (они также настроены на циклическое воспроизведение, поэтому при нажатии клавиши она воспроизводится до повторного нажатия), я хочу только изменить частотутаким образом, что сначала постепенно удаляются верхние частоты, затем средние частоты, затем низкие частоты, затем низкие частоты и, в конце концов, все частоты удаляются, как только ползунок достигает дна.И наоборот, при скольжении вверх эти частоты добавляются обратно (при скольжении вверх добавляются суб-бас, бас, середина, а затем максимумы).Все 31 WAV-файлы (по одному на каждую заметку) в моих ресурсах ссылаются с помощью типа переменной Music, поэтому при нажатии на заметку активируется следующий код:
music.play ();music.setLooping (true);
И при повторном нажатии музыка останавливается.
*** Итак, как я могу модулировать частоты нот в файлах .wav в моем Intellij?/ LibGDX программа?Есть ли лучшая техника, чем использование AudioDevice?Если это так, пожалуйста, пришлите мне в правильном направлении.Если создание AudioDevice [s] работает лучше всего, как мне ввести wav-файл в AudioDevice, чтобы изменить частоту?Пример того, как сделать это вручную в коде, был бы идеальным (то есть, я имею в виду: я сам настраиваю разные частоты, жестко программируя их, а не используя ползунок или позволяя пользователю контроллера изменять частоту).Тогда я уверен, что смогу выяснить, как сделать частоту модулированной пользователем с помощью ползунка, связанного со значениями частоты, как только я пойму, КАК писать код для изменения пределов частоты для данного файла .wav.
Спасибомного за помощь.Это просто стандартная программа для Android, я использую Desktop launcher atm, и это все, что мне нужно для работы.
//This is NOT THE CODE for my program. It is coded example of AudioDevice, //AudioRecorder, etc, use and how they work. I just need to learn to apply //frequency modulation/alter-ability to my program and I figured maybe this code //would help.
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Audio;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.AudioDevice;
import com.badlogic.gdx.audio.AudioRecorder;
import sun.audio.AudioData;
public class PcmExample extends ApplicationAdapter {
/** used to signal thread to stop **/
private volatile boolean done;
@Override
public void dispose() {
// stop thread when app closes
done = true;
}
@Override
public void create() {
// create and start a thread where we do the audio processing
new Thread(new Runnable() {
@Override
public void run() {
// create an AudioDevice, to output mono, 44.1khz PCM data
AudioDevice device = Gdx.audio.newAudioDevice(44100, false);
//AudioData audioData = new AudioData();
// create an AudioRecorder, to record mono, 44.1khz PCM
data
AudioRecorder recorder = Gdx.audio.newAudioRecorder(44100, false);
//Audio audio = Gdx.audio.
// we need a buffer of shorts to store the recorded data
// and pass it to the device. This equals 1/10th
// of a second of PCM data.
short[] pcmBuffer = new short[4410];
// read data from the recorder, push it to the device
// until app is closed
while(!done) {
recorder.read(pcmBuffer, 0, pcmBuffer.length);
//recorder.
device.writeSamples(pcmBuffer, 0, pcmBuffer.length);
}
// native resources need to be diposed!
device.dispose();
recorder.dispose();
}
}).start();
}
}