Ich benutze AudioTrack
, um eine Sequenz von Sinuswellen zu spielen, aber wenn ich es auf meinem HTC M9 laufen lasse, spielt es nur einen Teil der Samples, und wie lange es gespielt wird, ist zufällig. e. G. Ich habe 20 Töne zu spielen, aber es spielt nur 2 bis 17.5 Töne von ihnen. Und ja, es wird sogar mitten in einem Ton stehen bleiben.Android AudioTrack spielt nicht alle Samples
Hier ist mein Code aus einer anderen Antwort:
ArrayList<double[]> samples = new ArrayList<>();
int numSamples = 0;
for (final ToneSegment seg : sequence) {
int num = seg.getDuration() * sampleRate/1000;
double[] sample = new double[num];
for (int i = 0; i < num; ++i) {
sample[i] = Math.sin(2 * Math.PI * i * seg.getPitch()/sampleRate);
}
samples.add(sample);
numSamples += num;
}
byte generatedSnd[] = new byte[2 * numSamples];
int idx = 0;
for (double[] sample : samples) {
for (final double dVal : sample) {
final short val = (short) ((dVal * 32767));
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
}
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();
Hat eine Idee jemand? Vielen Dank!
Ich habe MODE_STREAM ausprobiert, aber es ist dasselbe. Meine Samples spielen nur für 3 bis 7 Sekunden. –
Sie spielen für eine zufällige Dauer? Haben Sie kürzere oder andere Audio-Samples ausprobiert? Und haben Sie die Anzahl der Bytes auch multipliziert? – jobbert
Ja, ich habe andere Proben ausprobiert. Sie sind keine zufällige Dauer. Was ist die Anzahl der Bytes zu multiplizieren? –