Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android如何在AudioTrack上设置循环?_Android_Loops_Wav_Pcm_Audiotrack - Fatal编程技术网

Android如何在AudioTrack上设置循环?

Android如何在AudioTrack上设置循环?,android,loops,wav,pcm,audiotrack,Android,Loops,Wav,Pcm,Audiotrack,我正在使用AudioTrack播放.wav文件。 我有个问题。 我设置了setLoopPoints来循环我的.wav文件,但它不起作用 这是我的示例代码 public class PleaseActivity extends Activity implements Runnable{ AudioTrack audioTrack; public static final String MEDIA_PATH = Environment.getExternalStorageDirectory()

我正在使用AudioTrack播放.wav文件。 我有个问题。 我设置了setLoopPoints来循环我的.wav文件,但它不起作用

这是我的示例代码

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);


    }
  }


}
我可以很好地播放我的wave文件,但设置环点不起作用! 有人帮我吗


我解决了这样的循环问题。 我还有一个问题。 每当我将数据写入audiotrack时, 我的意思是,每当有声音轨被重复播放时,像“滴答声”这样的噪音就会被添加到第一部分。 我不知道如何消除这种噪音。。 有人知道怎么解决吗

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

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


        }

    }
公共int设置环点(int startInFrames、int ENDIFRAMES、int loopCount)


设置循环点和循环计数。循环可以是无限的。与setPlaybackHeadPosition类似,必须停止或暂停曲目才能更改位置,*必须使用模式\u静态模式*勾号可能是wav文件头。尝试将播放偏移44字节。

您可以订阅。你可能会从他们那里得到有用的回复。一旦您将电子邮件添加到列表中,您只需向andraudio@music.columbia.edu,并将其发送给所有订阅的用户。