2013-07-02 5 views
0

Как изменить длительность аудиотрека бесконечным циклом?Как изменить длительность аудиотрека бесконечным циклом?

Я понимаю, что я должен применить следующую строку перед audioTrack.play():

audioTrack.setLoopPoints (0, generatedSnd.length, -1); 

Например, я хочу, чтобы продолжительность будет половина второго, следовательно, «длительность» переменной типа «Int» ISN Действительно. Для этого я хочу, чтобы звук воспроизводился многократно и контролировал время, чтобы остановить таймер.

Код:

private int duration = 1; // seconds 
    private int sampleRate = 44100; 
    private final int numSamples = duration * sampleRate; 
    private final double sample[] = new double[numSamples]; 
    private double freqOfTone = 261.626; // For example musical note C (Do) is 261.626Hz. 
    private final byte generatedSnd[] = new byte[2 * numSamples]; 

final Thread thread = new Thread(new Runnable() { 
        public void run() { 
         genTone(); 
         handler.post(new Runnable() { 

          public void run() { 
           playSound(); 
          } 
         }); 
        } 
       }); 
       thread.start(); 
      } 
     }); 


    void genTone() {   
     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 (final double dVal : sample) { 
      // scale to maximum amplitude 
      final short val = (short) ((dVal * 32767)); 
      // in 16 bit wav PCM, first byte is the low order byte 
      generatedSnd[idx++] = (byte) (val & 0x00ff); 
      generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8); 

     } 
    } 

    void playSound(){ 
     final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 
       sampleRate, AudioFormat.CHANNEL_OUT_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, 
       AudioTrack.MODE_STATIC); 
     audioTrack.write(generatedSnd, 0, generatedSnd.length); 
     audioTrack.play(); 
    } 

ответ

0

Я думаю audioTrack.write(generatedSnd, 0, generatedSnd.length); 0 равно все дорожки у можете, но EditText затем использовать: audioTrack.write(generatedSnd, edittext, generatedSnd.length); тогда, когда пользователь ленты 20 до щелчка игры >> игрока будет цикл после 20 второй

+3

Это не имеет смысла:/ – ephramd

+0

Я был мыслящий человек: / – H4F

0

Это один работал для меня:

audioTrack.setLoopPoints (0, generatedSnd.length/FRAME_SIZE, -1);

, если вы играете на 5.1 системы, то размер кадра, если 12 (6 * 2), или 7.1 это 16 (8 * 2), для стерео это 4.

Смежные вопросы