2017-03-25 12 views
7

मेरे पास एक बटन वाला एक एंड्रॉइड ऐप है। जब बटन क्लिक किया जाता है, तो ऐप SoundPool के साथ लोड की गई ध्वनि (लूपिंग) बजाना शुरू कर देता है। जब बटन दोबारा क्लिक किया जाता है, तो ध्वनि बंद हो जाती है, और फिर फिर से शुरू होती है।साउंडपूल "ऑडियोफ्लिंगर ट्रैक नहीं बना सका, स्थिति: -12"

लेकिन समस्या यह है कि ध्वनि केवल हर दूसरे समय खेला जाता है।

  • क्लिक करें 1 समय -> ध्वनि चलाने के लिए
  • क्लिक करें 2 बार शुरू होता है -> ध्वनि बंद हो जाता है, लेकिन फिर से शुरू नहीं करता है
  • क्लिक करें 3 समय -> ध्वनि 4
  • क्लिक करें समय खेलने के लिए शुरू होता है - > ध्वनि बंद हो जाता है लेकिन
  • और इतने पर ... खेलने के लिए शुरू नहीं करता है

ध्वनि नहीं करता है, यह त्रुटि logcat में प्रकट होता है:

0,123,
E/AudioTrack: AudioFlinger could not create track, status: -12 
E/SoundPool: Error creating AudioTrack 

जब मैं लूपिंग (परिवर्तन -1 से 0) हटा देता हूं, तो सब ठीक से काम करता है!

मैं जिस ध्वनि को खेल रहा हूं वह एमपी 3 फ़ाइल है, आकार 71.6 कीबी है।

मैंने सोनी एक्सपीरिया यू पर इसका परीक्षण किया है, एंड्रॉइड 4.1.2 (काम नहीं कर रहा) चला रहा है। लेकिन मेरे हुवेई ऑनर 6 (एंड्रॉइड 6.0) में सब कुछ काम करता है, लूपिंग सहित!

मैं क्या गलत कर रहा हूं?


यहाँ मेरी कोड है:

import android.media.AudioManager; 
import android.media.SoundPool; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 

    private int lastStreamId = 0; 
    private int soundID; 
    private SoundPool soundPool; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 

     soundID = soundPool.load(this, R.raw.sound01, 1); 


     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       soundPool.stop(lastStreamId); 
       lastStreamId = soundPool.play(soundID, 1, 1, 1, -1, 1); 
      } 
     }); 
    } 
} 

संपादित करें:

मैं यहाँ मूल ध्वनि अपलोड करने की अनुमति नहीं कर रहा हूँ, लेकिन यहाँ एक और ध्वनि है कि एक ही बात करता है। को छोड़कर अब ध्वनि केवल पहले क्लिक में चलाता है; निम्नलिखित सभी क्लिक बस इसे चुप बनाते हैं और उपरोक्त त्रुटि को थूकते हैं।

ध्वनि यहाँ है: sound01.mp3

+0

क्या आप 'sound01' पोस्ट कर सकते हैं? – azizbekian

+0

प्रश्न संपादित किया गया :) – TuomasK

उत्तर

1

आप here, त्रुटि कोड लिनक्स वातावरण में Out of memory के लिए खड़ा देख सकते हैं। स्पष्ट रूप से वे जेली बीन (मुझे प्री-लॉलीपॉप के लिए लगता है) पर स्मृति आवंटन से संबंधित कुछ मुद्दे हैं।

मैंने आपकी मूल फ़ाइल को 177808 केबीपीएस से 32000 केबीपीएस तक घटा दिया है, और यह प्री-लॉलीपॉप उपकरणों पर अपेक्षित काम करना शुरू कर दिया है।

तो, आपको प्री-लॉलीपॉप उपकरणों के लिए अपनी ऑडियो फ़ाइल को डाउन नमूना करना होगा। मूल ऑडियो फ़ाइलों के लिए बेहतर raw-v21 है, और raw में डाउनसमैल्ड डालें। इस प्रकार एपीआई 21 से शुरू होने वाले डिवाइस मूल संस्करण का उपयोग करेंगे।

enter image description here

Here's downsampled फ़ाइल।

+0

क्या आप जानते हैं कि फ़ाइल आकार के लिए कोई सटीक सीमा है या इसके बारे में अन्य दस्तावेज हैं? – TuomasK

+0

@TuomasK, नहीं, ऐसा कुछ नहीं मिला है। – azizbekian

+0

हाँ, मुझे लगता है कि मुझे यह काम करने के लिए मिला है। धन्यवाद! – TuomasK

संबंधित मुद्दे