문제

로드된 내용을 되돌리는 처리 프로그램을 만들어야 합니다. .mp3 파일, 이미 구현된 추상 함수(예: Minim 주어진 소리를 반전시키는 기능이 있지만 아직 찾지 못했습니다).지금까지 여러 가지 방법을 시도했지만 여전히 재생되지 않습니다.

내 마지막 접근 방식은 Minim.loadFileIntoBuffer() 을 얻는 함수 float[] 그런 다음 프로세싱을 사용하여 버퍼를 반전시킵니다. reverse() 기능.그런 다음 AudioSample 같은 float 배열과 원본 파일의 형식.그런 다음 다음을 사용하여 샘플을 재생합니다. trigger().

다음은 일부 내용입니다.

Minim minim;
AudioPlayer songPlayer;
MultiChannelBuffer song;
AudioSample reversedSong;
float[] reversedBuffer, mixBuffer;

void setup() {
  size(512, 200);
  minim = new Minim(this);

  songPlayer = minim.loadFile("sound.mp3");

  // loadFileIntoBuffer changes the MultiChannelBuffer's parameters to
  // match the file's, so init values doesn't really matter
  song = new MultiChannelBuffer(10, 3);
  minim.loadFileIntoBuffer("sound.mp3", song);

  mixBuffer = songPlayer.mix.toArray();
  reversedBuffer = reverse(mixBuffer);

 reversedSong = minim.createSample(reversedBuffer, songPlayer.getFormat());
 reversedSong.trigger();
} 

나는 또한 몇 가지 다른 솔루션을 시도했습니다.즉, 파일을 AudioSample.내가 이미 사용했던 대부분의 방식의 문제점은 내가 오직 AudioBuffer, 즉. 전체 소리의 일부.따라서 모든 것을 되돌릴 수는 없습니다.

이 작업을 수행하는 방법을 알고 있나요?

도움이 되었습니까?

해결책

좋아, 나는 결국 더 간단한 과정을 통해 그 일을 해냈습니다.

원본 샘플의 채널을 가져와 직접 조작합니다.먼저, 새로운 건물을 건설하세요. float채널과 동일한 크기의 배열입니다.그런 다음 동일한 절차를 사용하여 값을 원본에 다시 넣습니다.

이는 아름다운 구현과는 거리가 멀고 아마도 그럴 수 있는 것보다 시간이 더 복잡할 것입니다.그러나 구현된 고급 기능을 사용하지 않는 것으로 제한되었기 때문에 그것은 트릭을 수행합니다.

void revert() {
  /* sample is an AudioSample, created in setup() */
  float[] leftChannel = sample.getChannel(AudioSample.LEFT);
  float[] rightChannel = sample.getChannel(AudioSample.RIGHT);

  float[] leftReversed = new float[leftChannel.length];
  float[] rightReversed = new float[rightChannel.length];

  int size = leftChannel.length-1;

  /*inverts the array*/
  for(int i=0; i<=size; i++){
    leftReversed[i] = leftChannel[size-i];
    rightReversed[i] = rightChannel[size-i];
  }
  /*copies it to the original array*/
  for(int i=0; i<size; i++){
    leftChannel[i] = leftReversed[i];
    rightChannel[i] = rightReversed[i];
  }  
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top