모든 것을 시도한 후 SoundPool을 사용하여 피치를 변경하기로 결정했습니다. 재생 속도를 2.0으로 설정하면 원래 주파수의 두 배로 재생되고 0.5의 재생 속도로 재생하면 반음이 재생됩니다. 원래의 주파수. 재생 속도 범위는 0.5 ~ 2.0입니다. 하지만 0.5와 2.0보다 낮은 주파수에서 작동했습니다.
내 작업 코드를 게시하고,
하지만 그냥 데모 목적을 위해, 여기에 수동으로 "재생 속도"를 변경해야로서, 매번 당신이 예에 대한 응용 프로그램 설치 : "sp.play (폭발, 1,1,0,0,1.5f) "여기에서"1.5f "는 재생 속도입니다. 하나는 쉽게 EditView, 또는 실행 시간에 재생 속도의 값을 설정 비슷한 비슷한 만들 수 있습니다.
이 앱에서는 설정된 재생 속도로 음악을 재생하기 위해 앱의 화면을 탭하면됩니다.
import java.io.IOException;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class SoundPoolActivity extends Activity implements OnClickListener {
SoundPool sp;
int explosion = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View v = new View(this);
v.setOnClickListener(this);
setContentView(v);
sp = new SoundPool(1,AudioManager.STREAM_MUSIC,0);
//explosion = sp.load(this, R.raw.hh,0);
explosion = sp.load("/sdcard/hh.m4a",0);
}
public void onClick(View v){
if (explosion!=0){
sp.play(explosion, 1,1,0,0,2.3f);
}
}
}
변화'1 + x' 1.0F가 + x'와 (또한'0.005f' –
이 차이가 없습니다에'0.005'을 변경'에. – Patrick
어떻게 당신의 코드를 테스트하고 있습니다. 당신은을 사용하는 경우 실제 장치에서 재생 속도를 동적으로 변경하기에는 장치 속도가 너무 느릴 수 있습니다. 시뮬레이터를 사용하는 경우 호스트의 사운드 카드가 문제 일 수 있습니다. 재생 속도를 변경하는 것은 간단한 작업이 아니며 복잡한 보간이 필요할 수 있습니다 특히 비표준 변환율로 실행할 때 – MBober