почему мой белый шум бьется / хлопает / блеет? - PullRequest
1 голос
/ 25 августа 2011

Мое приложение для Android пытается генерировать белый шум для воспроизведения на устройстве Android. В настоящее время я генерирую массив случайных чисел, который AudioTrack.getMinBufferSize (...) выполняет короткие шорты и проходит по таймеру. Это выглядит так:

    INTERVAL_MILLISECONDS = (int)((double)(bufSize) / (double)(nativeSampleRate * 2) * 1000);

    timer.scheduleAtFixedRate( new TimerTask() {

        public void run() {
            synchronized(this){
                //System.out.println("playing. Sample rate is + " + nativeSampleRate + ", buffer is " + data.length + " shorts long, interval is " + INTERVAL_MILLISECONDS);
                track.write(data, 0, bufSize);
                track.play();
            }
        }

    }, 0, INTERVAL_MILLISECONDS);

Но когда я слушаю его на своем эмуляторе Android, я получаю белый шум с очень быстрым ритмом "биения" или "блея", который трудно описать. Я не звукорежиссер, может кто-нибудь указать мне правильное направление, почему это происходит?

************** ОБНОВЛЕНИЕ ************ Я только что сделал пару вариаций, в одном из которых я удостоверился, что размер моей выборки составлял целое число миллисекунд, и в одном из них я сделал размер выборки целую секунду.

При размере выборки 8820 (пять миллисекунд в длину и по-прежнему выше минимума 8192) биение остается неизменным.

Однако при размере выборки 44100 (целая секунда) биение прошло. Возможно ли, что таймер, который я использую, просто не точен с небольшими интервалами?

1 Ответ

3 голосов
/ 25 августа 2011

Кажется, проблема в том, как вы генерируете белый шум.Я не знаю в первую очередь о программировании на Android, но если я правильно понимаю вопрос, вы создаете случайные данные из одного буфера, а затем перебираете их снова и снова.

Проблема,(как указывает ваше обновление), этот буфер повторяется несколько раз в секунду.Это означает, что это больше не «белый» (т.е. абсолютно случайный) шум.Это стало периодическим.

Ваш мозг очень хорош в выделении периодических сигналов, поэтому вы слышите это биение.Это ваш мозг говорит вам, что что-то происходит, кроме белого шума.Здесь вы вводите сильный компонент около 5,38 Гц, который при модуляции остальной части звука вы интерпретируете как эффект «биения».

Биение исчезает (или уменьшается ниже уровня восприятия), когда вы увеличиваете длину буферапотому что при 44100 выборках ваш мозг больше не имеет достаточных возможностей для привязки и, следовательно, не может распознать, что последовательность является периодической.Низкочастотная информация все равно будет там.

Генерирование идеального белого шума не так просто, как вы думаете! .В вашем случае я думаю, что лучше всего создать буфер шума как можно дольше - в зависимости, конечно, от контекста создаваемого приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...