2014-06-18 1 views
0

여기에 내 문제입니다, 누군가가 내게 잘 이해한다면, arraylist에 몇 가지 사운드 샘플을 넣어, 내게 기능을 주었다.오디오와 arraylist을 .wav 파일 (자바)

이 오디오 트랙이있는 .wav 파일을 만들고 싶습니다. 정말 어떻게 해야할지 잘 모릅니다. 여기

어쩌면 난 그냥 그것을 전혀 이해하지 않기 때문에 여기 ...,

public class Track { 



private ArrayList<Sample> sounds; 
private  AudioFormat audioFormat; 
      TargetDataLine targetDataLine; 
public Track() 
{ 
    this.sounds = new ArrayList <Sample>(); 
} 
/*** Sort the sample on the track by ascending start time ***/ 
public void sortTrack() { 
    Collections.sort(sounds); 
} 

/** 
* Add a sample to the track. 
* @param fic location to the audio file. 
* @param sT set the start time in ms of the sound on the track. 
*/ 
public void addSound(String fic, long sT) {  
    sounds.add(new Sample(fic, sT)); 
} 

/** 
* Delete a sample to the track. 
* @param fic location to the audio file. 
* @param sT set the start time in ms of the sound on the track. 
*/ 
public void deleteSound(String fic, long sT) {  
    int i; 
    for (i = 0; i < sounds.size() &&(
    sounds.get(i).getAudioFile().getName() == fic && 
    sounds.get(i).getStartTime() == sT); ++i) {} 
    if (i < sounds.size()) sounds.remove(i); 
} 

코드입니다 위의 코드에서 가져온 샘플입니다.

public Sample (String fileLocation, long sT) { 

try{ 
    audioFile = new File(fileLocation); 
    istream = AudioSystem.getAudioInputStream(audioFile); 
    format = istream.getFormat(); 
    startTime = sT; 
    timeLenght = (audioFile.length()/(format.getFrameSize() * format.getFrameRate())) * 1000; 
} 
catch (UnsupportedAudioFileException e){ 
    e.printStackTrace(); 
     } catch (IOException e) { 
    e.printStackTrace(); 
    }  
    } 
+0

"샘플"은 어떻게 정의 되었습니까? 수입을 포함하십시오. 또한 #deleteSound (String, long) . 하나 들어, 문자열 비교는 == 참조 동일성 비교자를 결코 사용하지 않아야하지만, 항상 #equals (Object) 메소드를 사용해야합니다 .Java Strings는 원시적 인 값이 아니기 때문에 객체입니다. 수집은 나쁜 습관입니다. iterator와 #remove() 연산. – hiergiltdiestfu

답변

0

일부 Java 도구를 사용하여 자동화 할 수있는 쓸모없는 작업이 많기 때문에 이것은 좋은 Java 소스 코드가 아닙니다.

분명히 특정 앨범의 고유 한 트랙을 나타내는 거대한 클래스가 있습니다. 앨범은 물론, 별개의 샘플로 세분화되어 있습니다.

  • sortTrack() 메소드가 샘플 클래스에 정의 된 특정 순서의 기준에 따라 데이터를 정렬하기 위해 사용됩니다 : 당신의 코드를 개선하기 위해 몇 가지 팁과 방법에 대한 자세한 설명을 따릅니다. 이 경우 특정 데이터 구조를 사용하여 자동으로 모든 데이터를 정렬 할 수 있도록해야합니다. 나는 TreeSet을 제안하지만, 이런 종류의 데이터 구조는 포함 된 요소가 Comparable interface을 구현해야합니다. 이런 식으로 각 삽입 작업에서 사용자가 정의한 기준에 따라 데이터를 정렬하게됩니다 (게시 한 코드에서 각 샘플은 시작 시간을 사용하여 정렬 됨).
  • addSound() 메서드는 지정된 샘플 인스턴스를 샘플 목록에 추가합니다 (TreeSet으로 전환하려면 메서드의 구현이 변경되지 않습니다).
  • deleteSound() 메서드는 특정 이름 (fic 매개 변수)과 특정 시작 시간 (sT 매개 변수)이 있어야하는 샘플을 샘플 목록에서 제거하려고합니다. 어떻게 작동합니까? 지정된 샘플의 이름과 시작 시간을 가진 객체가 발견되거나 목록의 끝에 도달 할 때까지 반복됩니다 (주의를 기울이면 for 루프는 비어 있습니다. 수행해야 할 작업은 입니다., 조건 중 하나가 거짓 일 때까지). 그러나 이런 종류의 물건은 메서드를 제거해야합니다. ArrayList 클래스 (또는 일반적으로 Collection interface의 하위 클래스 인 각 클래스 )를 제공하는 메서드를 제거해야합니다.이 경우 equals() 메서드를 수정해야합니다. 메서드는 Sample 클래스의 두 샘플이 같은지를 정의하기 위해 사용됩니다.