PCT 16ビットチャネルのステレオを使用して、アンドロイドのAudioTrackクラスで音楽トラックを再生します。 MusicListFragment.javaAudioTrackは静的なサウンドを再生します
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class MusicListFragment extends Fragment implements AdapterView.OnItemClickListener {
private AudioTrack mAudioTrack;
public MusicListFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_music_list, container, false);
ListView musicListView = (ListView) view.findViewById(R.id.music_list_view);
musicListView.setAdapter(new MusicListAdapter(getActivity()));
int minBufferSize = AudioTrack.getMinBufferSize(
22000,
AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 22000
, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
AudioTrack.MODE_STREAM);
musicListView.setOnItemClickListener(this);
return view;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Music music = (Music) adapterView.getItemAtPosition(i);
InputStream inputStream = null;
byte[] bytes = new byte[512];
mAudioTrack.play();
try {
File file = new File(music.getPath());
inputStream = new FileInputStream(file);
int k;
while ((k = inputStream.read(bytes)) != -1) {
mAudioTrack.write(bytes, 0, k);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
アダプタが正常に動作するためにここに私のコードは、私がMediaPlayerのクラスを使用してそれをテストしているので、です。 (もし私がアダプターや他のクラスも提供してもらえますが、問題はないと思います)
私のリストビューは、音楽のタイトル、アーティスト、アルバムを表示し、各音楽のパスを保存します。
MediaPlayerで楽曲を簡単に再生できましたが、AudioTrackを使用して問題が発生しています。このコードは、古いテレビのように信号がないときのように、デバイスが静的なサウンドを再生するようにします。 :)
アダプターのクリックリスナーでわかるとおり、私は
です。1.選択されている音楽を取得しています。
2. InputStream
3.に音楽ファイルを読み込み、最後にオーディオトラックインスタンスにバイトを書き込みます。 (試してみると、mAudioTrack.play()という行も置いてあります。
私はここで何が間違っていますか?