2012-04-02 9 views
0

Я играю в .wav файлы, используя AudioTrack. У меня проблема. Я установил setLoopPoints для зацикливания моих .wav-файлов, но это не сработает.Android Как установить петлю на AudioTrack?

Это мой пример кода.

public class PleaseActivity extends Activity implements Runnable{ 
AudioTrack audioTrack; 
public static final String MEDIA_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/TEST"; 
/** Called when the activity is first created. */ 
    Button play_button, stop_button; 
    File file = null; 
    byte[] byteData = null; 
    Boolean playing = false; 
    int bufSize; 
    AudioTrack myAT = null; 
    Thread play_thread = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    play_button = (Button) findViewById(R.id.btn1); 
    stop_button = (Button) findViewById(R.id.btn2); 


    file = new File(MEDIA_PATH+"/untitled1.wav"); 
    byteData = new byte[(int) file.length()]; 
    FileInputStream in = null; 

    try { 
     in = new FileInputStream(file); 
     in.read(byteData); 
     in.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


    initialize(); 


    play_button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

     play_thread.start(); 
     } 
    }); 

    // 
    stop_button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
     // 
     if (myAT.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) { 
      myAT.stop(); 
      play_thread = null; 
      initialize(); 
     } 
     } 
    }); 

    } 


    void initialize() { 

    bufSize = android.media.AudioTrack.getMinBufferSize(44100, 
      AudioFormat.CHANNEL_CONFIGURATION_STEREO, 
     AudioFormat.ENCODING_PCM_16BIT); 

    myAT = new AudioTrack(AudioManager.STREAM_MUSIC, 
     44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, 
     AudioFormat.ENCODING_PCM_16BIT, bufSize, 
     AudioTrack.MODE_STREAM); 



    play_thread = new Thread(this); 
    } 


    public void run() { 
    if (myAT != null) { 

     myAT.play(); 
     myAT.setLoopPoints(0, byteData.length, 2); 
     myAT.write(byteData, 0, byteData.length); 


    } 
    } 


} 

Я могу хорошо играть в свои волновые файлы, но setLoopPoints не работает! Любые помогает мне ..


Я решил эти циклические проблемы, как это. У меня есть еще одна проблема. всякий раз, когда я писал данные в audiotrack, Я имею в виду, что всякий раз, когда повторяется звуковой сигнал, в первой части добавляется некоторый шум типа «тик». Я не знаю, как устранить этот шум. Есть ли кто-нибудь знает, как его решить?

class DLThread extends Thread 
    { 
     public void run() 
     { 
      while(!DLThread.interrupted()) 
      { 
       if (myAT != null) { 
         // 

         myAT.play(); 
         myAT.flush(); 
         myAT.write(byteData, 0, byteData.length); 
        } 
      } 


     } 

    } 
+0

Вы можете подписаться на ['andraudio'] (http://music.columbia.edu/mailman/listinfo/andraudio). Вероятно, вы получите от них полезный ответ. После того, как вы добавили свою электронную почту в список, вы просто отправите электронное письмо на адрес [email protected], и оно отправит его всем, кто подписался. – Jakar

ответ

1

общественные INT setLoopPoints (INT startInFrames, Int endInFrames, Int loopCount)

устанавливает точки цикла и счетчик цикла. Цикл может быть бесконечным. Аналогично setPlaybackHeadPosition, трек должен быть остановлен или приостановлен для позиции, которую нужно изменить, и * должен использовать режим MODE_STATIC *.

1

Тик, вероятно, заголовок файла wav. Попробуйте компенсировать воспроизведение на 44 байта.

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

  • Нет связанных вопросов^_^