私は4つのaudioTracksを一度に再生しており、うまく再生されているようです。 HTC Desire 1.1ghz OCのテスト。私はときどきスレッディングで不具合を起こします。場合によっては、4つすべてが再生されている場合は、スレッドに参加しようとすると止まらないことがあります。より多くのテストを行う必要があります。 は、ここで指定したパス
package com.ron.audio.functions;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
public class AudioPlayManager implements Runnable {
private File fileName;
private volatile boolean playing;
public AudioPlayManager() {
super();
setPlaying(false);
}
public void run(){
// Get the length of the audio stored in the file (16 bit so 2 bytes per short)
// and create a short array to store the recorded audio.
int musicLength = (int)(fileName.length()/2);
short[] music = new short[musicLength];
try {
// Create a DataInputStream to read the audio data back from the saved file.
InputStream is = new FileInputStream(fileName);
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
// Read the file into the music array.
int i = 0;
while (dis.available() > 0) {
music[i] = dis.readShort();
i++;
}
// Close the input streams.
dis.close();
// Create a new AudioTrack object using the same parameters as the AudioRecord
// object used to create the file.
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
musicLength,
AudioTrack.MODE_STREAM);
// Start playback
audioTrack.play();
// Write the music buffer to the AudioTrack object
while(playing){
audioTrack.write(music, 0, musicLength);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void setFileName(File fileName) {
this.fileName = fileName;
}
public File getFileName() {
return fileName;
}
public void setPlaying(boolean playing) {
this.playing = playing;
}
public boolean isPlaying() {
return playing;
}
}
おかげで録音したWAVファイルを再生するための私のクラスです!これを試みます。私はAudioTrackをあなたのようにスレッドコールバックに作成していません。私はそれが治療法であると推測しています(残りのコードは私のものとほとんど同じです)。これは、2つのAudioTrackの「トグル」がなぜお互いをブロックしているのかを説明します。 – BTR
これがうまくいくかどうか教えてください。私はまた、このすべてを私のスレッド管理を行う別のクラスにラップしています。私はスレッドマネージャを呼び出すことができ、ストリームの記録や再生のためのスレッディングについて心配する必要はありません。 – DeliveryNinja
それより少し多かったですが、本当の鍵はスレッド内にAudioTrackを作成していたことです。別の種類の「デバイス」クラスを持っていたので、テンポや音量などをコントロールすることができました。ファイルを読み込んで1つのスレッドですべて実行するクラスに結合すると、それらを素敵に再生できます。私のオプティマス(600mHz)でDJしています。 :) – BTR