Android如何在AudioTrack上设置循环?
我正在使用AudioTrack播放.wav文件。 我有个问题。 我设置了setLoopPoints来循环我的.wav文件,但它不起作用 这是我的示例代码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()
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,并将其发送给所有订阅的用户。