9 Mart 2010, Salı
Oyun Android ile keyfi bir ton
Android keyfi frekanslı bir ses yayan yapmak için herhangi bir yolu (yani, önceden kaydedilmiş ses dosyaları var istemiyorum) var mı?
Etrafıma baktım ve ToneGenerator çok yakındı, ama sadece standart SESLERDİR bu sesleri çıkış kapasitesine sahip gibi görünüyor bulabildiğim tek şey buydu.
Herhangi bir fikir?
CEVAP
16 EYLÜL 2010, PERŞEMBE
Ben aslında bir blog this example code buldum, ama bazı korkunç sesler oluşturan bazı hatalar vardı. Hataları düzelttim ve işte sonuç koduyla gönderildi. Benim için iyi iş gibi görünüyor
public class PlaySound extends Activity {
// originally from http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html
// and modified by Steve Pomeroy <steve@staticfree.info>
private final int duration = 3; // seconds
private final int sampleRate = 8000;
private final int numSamples = duration * sampleRate;
private final double sample[] = new double[numSamples];
private final double freqOfTone = 440; // hz
private final byte generatedSnd[] = new byte[2 * numSamples];
Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
// Use a new tread as this can take a while
final Thread thread = new Thread(new Runnable() {
public void run() {
genTone();
handler.post(new Runnable() {
public void run() {
playSound();
}
});
}
});
thread.start();
}
void genTone(){
// fill out the array
for (int i = 0; i < numSamples; i) {
sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone));
}
// convert to 16 bit pcm sound array
// assumes the sample buffer is normalised.
int idx = 0;
for (final double dVal : sample) {
// scale to maximum amplitude
final short val = (short) ((dVal * 32767));
// in 16 bit wav PCM, first byte is the low order byte
generatedSnd[idx ] = (byte) (val & 0x00ff);
generatedSnd[idx ] = (byte) ((val & 0xff00) >>> 8);
}
}
void playSound(){
final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
}
}
Bunu Paylaş:
Android Market/Oyun Mağaza Promosyon v...
google aç mobil versiyonu store androi...
Android web Görünümü tam ekran üzerind...
Google Android 4.0 emülatör Oyun...
Nasıl Android Liste Görünümü ayırıcı ç...