вторник, 5 июня 2012 г.

Голан Левин

Есть такой дядь, зовут его Голан Левин. Сам он из МИТа и делает ПО, но не просто быдлокодит, а его ПО - настоящее искусство, точнее не само ПО, а то, как мы с ним взаимодействуем.
Так вот, нынешняя моя разработка - рисование музыки. Вот так) Думаю это интересно)

А на сладкое класс, который позволяет генерировать заданную тональность (имея частоту) при помощи AudioTrack и формулы синусоиды)





public class WaveGenerator { private int duration; ; // seconds private final int sampleRate = 8000; private int numSamples; private double sample[]; private double freqOfTone; // hz private byte generatedSnd[]; Handler handler = new Handler();   public WaveGenerator (int durat, double freq) { duration = durat; freqOfTone = freq; numSamples = duration * sampleRate; sample = new double[numSamples]; generatedSnd = new byte[2 * numSamples];   Thread thread = new Thread(new Runnable() {      public void run() {        genTone();        handler.post(new Runnable() {        public void run() {     playSound();         }   });      }       });    thread.start(); }   void genTone(){  // fill out the array  for (int i = 0; i < numSamples; ++i) {   sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone));  }
 // convert to 16 bit pcm sound array  // assumes the sample buffer is normalised.  int idx = 0;  for (double dVal : sample) {   short val = (short) (dVal * 32767);   generatedSnd[idx++] = (byte) (val & 0x00ff);   generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);  } }   void playSound(){  AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,    8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,    AudioFormat.ENCODING_PCM_16BIT, numSamples,    AudioTrack.MODE_STATIC);  audioTrack.write(generatedSnd, 0, numSamples);  audioTrack.play(); }  
}

Комментариев нет:

Отправить комментарий