Я попытался сгенерировать синусоидальную волну с помощью AudioTrack.Результат не был удовлетворительным.Затем я перешел в класс Soundpool.Я использовал Audacity для создания аудиофайлов за 1 секунду, а затем изменил скорость воспроизведения (.5 - 2.0), чтобы получить нужные частоты.(Массивы, поскольку существуют также пильные и треугольные волновые файлы)
sig10000[0]=soundPool01.load(context,R.raw.sine10000,1);
sig2500[0]=soundPool01.load(context,R.raw.sine2500,1);
sig625[0]=soundPool01.load(context,R.raw.sine625,1);
sig157[0]=soundPool01.load(context,R.raw.sine156,1);
sig40[0]=soundPool01.load(context,R.raw.sine40,1);
Затем я, в зависимости от выбранной частоты, проигрываю аудио:
public void play(){
Signal s=null;
float factor;
for(int i=0;i<this.size();i++){
s=this.get(i);
if(s.getFreq()>4999){
factor = s.getFreq()/10000f;
s.setStreamID(soundPool01.play(sig10000[s.getWaveType()],.99f,.99f,0,-1,factor));
}else if(s.getFreq()>1249){
factor = s.getFreq()/2500f;
s.setStreamID(soundPool01.play(sig2500[s.getWaveType()],.99f,.99f,0,-1,factor));
}else if(s.getFreq()>312){
factor = s.getFreq()/625f;
s.setStreamID(soundPool01.play(sig625[s.getWaveType()],.99f,.99f,0,-1,factor));
}else if(s.getFreq()>77){
factor = s.getFreq()/156f;
s.setStreamID(soundPool01.play(sig157[s.getWaveType()],.99f,.99f,0,-1,factor));
}else {
factor = s.getFreq()/40f;
s.setStreamID(soundPool01.play(sig40[s.getWaveType()],.99f,.99f,0,-1,factor));
}
}
}
Теперь, как я вижу,Метод отлично работает за исключением диапазона 5000-20000 Гц.Я ломаю голову над этим, не знаю, почему он не работает, и я не могу найти какие-либо шаблоны для проблемы.
Есть ли фундаментальная проблема с этим методом?
Заранее благодарю
Редактировать: "не работает объяснено" Когда я играю синусоидальные волны в диапазоне 5000-20000 Гц, очень очевидно, что частота является неточной,Это означает, что шаг далеко.Например, 19000 Гц слишком низок и легко обнаруживается на слух.Что я могу сказать, так это то, что 10000 Гц (как и 5000 Гц - моя ошибка), поэтому нормальная скорость воспроизведения является правильной. При частоте около 14 кГц высота тона сигнала больше не правильная.
Мысли / Возможные причины (?): (A) Сколько шаговтам для скорости воспроизведения (SoundPool)?В документации написано 0.5-2.0. Возможно ли, что это означает, что существует 15 различных скоростей воспроизведения? (B) Я использовал Audacity для генерации файлов .ogg.Когда я увеличиваю синус 10000 Гц, я вижу, что он не слишком плавный (частота дискретизации 44100), и волна точно не начинается и не заканчивается на 0. Может ли это наложение нежелательных сигналов?