पर कॉल किया गया है, मैं ऑडियोट्रैक क्लास के साथ प्रयोग कर रहा हूं। असल में, जब उपयोगकर्ता स्क्रीन पर किसी विशिष्ट ऑब्जेक्ट को स्पर्श करता है तो मेरे ऐप को ध्वनि उत्पन्न करनी होती है। मैंने एक गाइड के रूप में this example का उपयोग किया है।
वर्ग उत्पन्न करता है सेऑडियोट्रैक: प्ले() अनियमित ऑडियोट्रैक
07-02 20:40:53.459: E/AndroidRuntime(11973): FATAL EXCEPTION: Thread-10
07-02 20:40:53.459: E/AndroidRuntime(11973): java.lang.IllegalStateException: play() called on uninitialized AudioTrack.
07-02 20:40:53.459: E/AndroidRuntime(11973): at android.media.AudioTrack.play(AudioTrack.java:824)
07-02 20:40:53.459: E/AndroidRuntime(11973): at com.mysounds_experimental.SoundThread.playSound(SoundThread.java:108)
07-02 20:40:53.459: E/AndroidRuntime(11973): at com.mysounds_experimental.SoundThread.run(SoundThread.java:69)
तरीके लगता
public void initAudioTrack() {
int bufferSize = AudioTrack.getMinBufferSize(sampleRate
, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC
, sampleRate
, AudioFormat.CHANNEL_CONFIGURATION_MONO
, AudioFormat.ENCODING_PCM_16BIT
, bufferSize
, AudioTrack.MODE_STREAM);
}
private void playSound(){
audioTrack.write(generatedSnd, 0, numSamples);
audioTrack.play();
}
public void stopPlaying() {
audioTrack.flush();
audioTrack.stop();
audioTrack.release();
}
@Override
public void run() {
while (mRun) {
try{
Thread.sleep(200);
while(soundCycle){
if(freqOfTone != -1f) {
generateTone();
playSound();
Thread.sleep(200);
}
}
} catch(InterruptedException e){
// soundCycle = false;
// soundPool.stop(BEEP);
}
}
}
इस से एक विधि है:
मेरा ऐप एकदम सही ढंग से लेकिन आम तौर पर एक मिनट के बारे में के लिए स्क्रीन को छूने के बाद यह दुर्घटनाओं काम करने के लिए लगता है एक कस्टम दृश्य मेरे धागे का उपयोग किया जाता है
@Override
public boolean onTouchEvent(final MotionEvent ev) {
int currentXPosition = (int) ev.getX();
int currentYPosition = (int) ev.getY();
if(ev.getX() < smBitmap.getWidth())
if(ev.getY() < smBitmap.getHeight()){
tempCol = smBitmap.getPixel(currentXPosition, currentYPosition);
}
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
sThread.freqOfTone = getFreqPreset(tempCol);
if(col != tempCol){
// sThread.initAudioTrack();
sThread.interrupt();
if(shouldInit) {
shouldInit = false;
sThread.initAudioTrack();
}
sThread.soundCycle = true;
col = tempCol;
invalidate();
}
break;
}
case MotionEvent.ACTION_MOVE: {
sThread.freqOfTone = getFreqPreset(tempCol);
if (tempCol == -1 || tempCol == 0) {
sThread.soundCycle = false;
shouldInit = true;
// sThread.stopPlaying();
sThread.interrupt();
invalidate();
} else {
if(col != tempCol){
sThread.interrupt();
col = tempCol;
invalidate();
}else {
sThread.soundCycle = true;
col = tempCol;
invalidate();
}
}
break;
}// case ACTION_MOVE
case MotionEvent.ACTION_UP: {
sThread.soundCycle = false;
shouldInit = true;
// sThread.stopPlaying();
sThread.interrupt();
col = -1;
mActivePointerId = INVALID_POINTER_ID;
break;
}// case ACTION_UP
}
return true;
}
कोई विचार क्या यह हो रहा है?
'// sThread.initAudioTrack(); 'इस –
को अनमोलमेंट करें, मैंने असंतोष कहा, –
को हटाएं क्षमा करें, मुझे असहमति कहना था। – droid8421