2010-06-21 5 views
1

SD 카드의 특정 폴더에서 여러 오디오 파일을로드하고 임의의 파일을 재생하는 방법에 대한 도움말/doc/sample 코드에 대한 포인터가 필요합니다. 알아낼 수 있다고 생각합니다. 마지막 단계에서는 여러 파일을로드하는 방법을 알아낼 수 있습니다.) 여기에 내 믿을 수 없을 정도로 저조한 서면 애플 리케이션입니다, 내가 가야 배우는 것처럼 너무 가혹하게 판단하지 마십시오. 당신은 당신이 연극을하려고하지 않을 노래를로드 싶지 않을 것이다, 그래서SD 카드에서 여러 오디오 파일로드하기

public class zazenbox extends Activity implements OnClickListener{ 

File filecheck; 
MediaPlayer player; 
Button playerButton; 
Integer var1; 
String path1; 
AlertDialog.Builder alertbox; 

public void onClick(View v) { 
    if (v.getId() == R.id.play) { 
     playPause(); 
    } 
} 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    demoLoad(); 

    playerButton = (Button) this.findViewById(R.id.play); 
    playerButton.setText(R.string.stop); 
    playerButton.setOnClickListener(this); 

    demoPlay(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    player.pause(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    player.stop(); 
} 

private void demoLoad() { 

    dirfilecheck(); 

    player = new MediaPlayer(); 
    player.setLooping(true); 
    try { 
     player.setDataSource(path1); 
     player.prepare(); 
    } 
    catch (IOException e) { e.printStackTrace(); } 
    catch (IllegalArgumentException e) { e.printStackTrace(); } 
    catch (IllegalStateException e) { e.printStackTrace(); } 
} 

private void dirfilecheck() { 
    filecheck = new File(Environment.getExternalStorageDirectory() + "/zazenbox"); 

    if(filecheck.exists() && filecheck.isDirectory()) { 
     // load files. 
     var1 = 1; 
     path1 = filecheck + "/bm10" + var1 + ".wav"; 
    } else { 
     // create folder, dl sample loop, and instruct user how to add music/loops. 
     filecheck.mkdirs(); 
     alertbox = new AlertDialog.Builder(this); 
     alertbox.setMessage("Please put loopable media in zazenbox on your sdcard."); 
     alertbox.setNeutralButton("Ok, I will.", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface arg0, int arg1) { 
       Toast.makeText(getApplicationContext(), "Please plug in your device now", Toast.LENGTH_LONG).show(); 
      } 
     }); 

     alertbox.show(); 
    } 
} 

private void demoPause() { 
    player.pause(); 
    playerButton.setText(R.string.play); 
} 

private void demoStop() { 
    player.stop(); 
    playerButton.setText(R.string.play); 
} 


private void demoPlay() { 
    player.start(); 
    playerButton.setText(R.string.stop); 
} 

private void playPause() { 
    if(player.isPlaying()) { 
     demoStop(); 
     //demoPause(); 
     //player.release(); 
     var1++; 
     path1 = filecheck + "/bm10" + var1 + ".wav"; 
     /*try { 
      player.setDataSource(path1); 
      player.prepare(); 
     } 
     catch (IOException e) { e.printStackTrace(); } 
     catch (IllegalArgumentException e) { e.printStackTrace(); } 
     catch (IllegalStateException e) { e.printStackTrace(); }*/ 
     //player.start(); 
     //demoPlay(); 
    } else { 
     //do stuff 
     demoPlay(); 
    } 
} 

}

답변

1

메모리는 매우, 모바일 장치에서 제한된다. 그래서 당신이해야 할 일은 그 폴더에있는 모든 오디오 파일을 찾아 하나를 선택하고로드 한 다음 재생하는 것입니다.

현재 플레이어를 중지하고 새 인스턴스를 만들어야합니다.

MediaPlayer player = MediaPlayer.create(this, Uri.parse("Path/To/Media")); 
player.start(); 
// change track 
player.stop(); 
player = MediaPlayer.create(this, Uri.parse("New/Path/To/Media")); 
player.start(); 
+0

충분하고 & 이해합니다. 그래서 제 질문은 적절하게 진술되지 않았습니다. 즉, 실제 파일이 아닌 목록이나 배열을로드하는 것이 었습니다.하지만 당신은 내가하려는 일을 이해합니다. 이 노래는 노래가 아니며 일반적으로 20-30 초 길이의 오디오 파일로 쉽게 반복 재생되도록 설계되었습니다. – zer0her0

+0

모든 파일이 저장된 위치를 알면 (sdcard의 특정 폴더) 파일 목록을 가져 오는 것이 쉽습니다. File folder = new File ("path/to/folder"); File [] files = folder.listFiles(); OR File [] files = folder.listFiles (fileFilter); – mtmurdock

+0

어쩌면 내가 명확히해야한다, 나는 여러 파일을 배열 /리스트에 충분히로드 할 수있다. (내가 말할 수있는 한). 내가 할 수없는 일은 미디어 플레이어가 현재 오디오 파일을 재생하고 다른 것을 재생하게하는 것입니다. – zer0her0

관련 문제