Есть такой дядь, зовут его Голан Левин. Сам он из МИТа и делает ПО, но не просто быдлокодит, а его ПО - настоящее искусство, точнее не само ПО, а то, как мы с ним взаимодействуем.
Так вот, нынешняя моя разработка - рисование музыки. Вот так) Думаю это интересно)
А на сладкое класс, который позволяет генерировать заданную тональность (имея частоту) при помощи AudioTrack и формулы синусоиды)
Так вот, нынешняя моя разработка - рисование музыки. Вот так) Думаю это интересно)
А на сладкое класс, который позволяет генерировать заданную тональность (имея частоту) при помощи 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(); }
}
Комментариев нет:
Отправить комментарий