Воспроизведение звука определенной частоты в Android - PullRequest
3 голосов
/ 13 декабря 2010

Я хочу воспроизводить звук определенной частоты в Android на основе пользовательского ввода, чем-то похожим на гитарное приложение Может кто-нибудь сказать мне, как это сделать? Нужно ли мне иметь все звуки freq в папке res \ raw?

Ответы [ 3 ]

4 голосов
/ 13 декабря 2010

Нет, вам не нужно хранить это в ресурсах.Я думаю, лучше подходить к синтезированию тонов в реальном времени.Для этого вам потребуется следующее:

  • java.lang.Math для расчета тригонометрических функций для заполнения буфера (после преобразования из float в PCM (int)) с правильным тоном
  • android.media.AudioTrack для воспроизведения аудио (из буфера).Я полагаю, что вам нужен статический режим - более быстрый отклик и более простое управление.Тем не менее, воспроизведение звука не является тривиальной задачей, поэтому вам нужно больше узнать об аудиосистеме на Android.Конечно, некоторые базовые знания об обработке сигналов приветствуются.
  • Вы можете даже добавить некоторые интересные эффекты, используя android.media.audiofx
2 голосов
/ 13 декабря 2010

Отправьте звук в экземпляр AudioTrack и измените его частоту дискретизации на лету.

1 голос
/ 13 декабря 2010

Это чрезвычайно сложный вопрос, хотя он и не выглядит так.

Когда вы говорите «звук», вы просто подразумеваете тон (например, синус, квадрат, треугольник, пилообразные волны) или хотите играть звуки «настоящих» инструментов, таких как гитара, пианино и т. Д.?

Если это первый (простые тоны), то ответ Дезидерио может быть на верном пути, но если вы хотите «настоящие» звуки страха, вам понадобится короткий «сэмпл» в / res / raw или в вашем Каталог / assets.

Вы можете загрузить их в экземпляр SoundPool и использовать его для воспроизведения с разными «скоростями», например, «скорость», равная 2, будет вдвое больше скорости и удваивает частоту, увеличиваясь на октаву. «Скорость», равная 0,5, будет вдвое меньше скорости, поэтому звук понижается на октаву.

...