मैं साइन तरंगों का एक अनुक्रम खेलने के लिए AudioTrack
उपयोग कर रहा हूँ अदा नहीं करता है, लेकिन जब मैं अपने एचटीसी M9 पर चला है, यह नमूने का ही हिस्सा निभाता है, और कितनी देर तक यह खेलेंगे यादृच्छिक है। ई। जी। मेरे पास खेलने के लिए 20 टन हैं, लेकिन यह केवल 2 से 17.5 टन की तरह खेलता है। और हाँ यह एक स्वर के बीच में भी रुक जाएगा।एंड्रॉयड audiotrack सभी नमूनों
यहाँ मेरी कोड है, एक और उत्तर से:
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();
किसी को भी किसी भी विचार है? धन्यवाद!
मैंने MODE_STREAM को आजमाया है, लेकिन यह वही है। मेरे नमूने केवल 3 से 7 सेकंड के लिए खेलते हैं। –
वे एक यादृच्छिक अवधि के लिए खेलते हैं? क्या आपने छोटे या अन्य ऑडियो नमूने की कोशिश की है? और क्या आपने बाइट्स की मात्रा भी गुणा की है? – jobbert
हां, मैंने अन्य नमूने की कोशिश की है। वे यादृच्छिक अवधि नहीं हैं। बाइट्स की मात्रा गुणा करने के लिए क्या है? –