2012-08-08 11 views
22

मैं एंड्रॉइड में ऑडियो रिकॉर्ड करने की कोशिश कर रहा हूं लेकिन मुझे एक समस्या का सामना करना पड़ रहा है।ऑडियो रिकॉर्ड करने की कोशिश कर रहा है लेकिन संदेश प्राप्त करना "मीडियारेकॉर्डर अनचाहे घटनाओं से दूर चला गया" और "घातक सिग्नल 11 (एसआईजीएसईजीवी) ...."

मैंने बटन शुरू और बंद कर दिया है, रिकॉर्डिंग शुरू करने के लिए "शुरू करें" और रिकॉर्डिंग को रोकने के लिए "रोकें"।

समस्या यह है कि, जब मैं स्टॉप बटन दबाता हूं तो मेरा एप्लिकेशन एक संदेश "डब्ल्यू/मीडियाआरकॉर्डर (635) लॉग करता है: मीडियारेकॉर्डर अनचाहे घटनाओं से दूर चला गया"। (स्टार्ट फ़ंक्शन ऑडियो फ़ाइल को ठीक से सहेज रहा है।)

फिर, यदि मैं फिर से स्टार्ट या स्टॉप बटन दबाता हूं तो मुझे त्रुटि संदेश मिलता है "ए/libc (743): 0x00000010 पर घातक सिग्नल 11 (एसआईजीएसईजीवी) (कोड = 1), धागा 743 (xample.recorder) "रिकॉर्डिंग वर्ग के

कोड के नीचे है:

/** 
    * Creates a new audio recording at the given path (relative to root of SD card). 
    */ 
    public AudioRecorder(String path) { 
    this.path = sanitizePath(path); 
    } 
    private String sanitizePath(String path) { 
     if (!path.startsWith("/")) { 
      path = "/" + path; 
     } 
     if (!path.contains(".")) { 
      path += ".3gp"; 
     } 
     return Environment.getExternalStorageDirectory().getAbsolutePath() + path; 
     } 

    public void start() throws IOException { 
    String state = android.os.Environment.getExternalStorageState(); 
    if(!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
     throw new IOException("SD Card is not mounted. It is " + state + "."); 
    } 

    // make sure the directory we plan to store the recording in exists 
    File directory = new File(path).getParentFile(); 
    if (!directory.exists() && !directory.mkdirs()) { 
     throw new IOException("Path to file could not be created."); 
    } 

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(path); 
    try{ 
    recorder.prepare(); 
    } 
    catch(IOException e){ 
     Log.e("Recorder","Recording failed"); 
    } 
    recorder.start(); 
    } 
    /** 
    * Stops a recording that has been previously started. 
    */ 
    public void stop() throws IOException { 
    recorder.stop(); 
    recorder.release(); 
    } 

मुख्य गतिविधि संहिता के नीचे है:

/* 
* */ 
    public class Recorder extends Activity implements OnClickListener 

    { 
private static final String TAG="Recorder"; 
AudioRecorder ar=new AudioRecorder("/TestAudio.3gp"); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_recorder); 

    final Button start = (Button) this.findViewById(R.id.btn_start); 
    start.setOnClickListener(this); 


    final Button stop = (Button) this.findViewById(R.id.btn_stop); 
    stop.setOnClickListener(this); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_recorder, menu); 
    return true; 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    try{ 
     switch (v.getId()) { 
      case R.id.btn_start: 
       ar.start(); 
       Log.d("Recorder","Recorded"); 
       Toast.makeText(this, "Controll returned from start function", Toast.LENGTH_LONG).show();    
       break; 
      case R.id.btn_stop: 
       ar.stop(); 
       Toast.makeText(this, "Recording stopped; Starting MediaPlayer", Toast.LENGTH_SHORT).show(); 
       //Toast.makeText(this, "Starting media player", Toast.LENGTH_LONG).show(); 
       ar.startPlaying(); 
       //Toast.makeText(this, "Recording stopped", Toast.LENGTH_LONG).show(); 

       break; 
      } 
     } 
     catch(Exception e){ 
      Log.e("Recorder", e.getMessage(), e); 
      Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

} 

}

+0

यह पूरा कोड नहीं है? मैं यहाँ निर्माता को नहीं देखता रिकॉर्डर = नया MediaRecorder(); सभी स्टैकट्रैक दिखाएं, क्या आपको एक और अपवाद मिला? – dimetil

+0

मैंने इस ट्यूटोरियल का इस्तेमाल किया http://www.benmccann.com/dev-blog/android-audio-recording-tutorial/ प्रारंभ बटन में मैं फ़ंक्शन शुरू करता हूं और स्टॉप बटन में मैं फ़ंक्शन स्टॉप को कॉल करता हूं ... दबाने के बाद प्रारंभ बटन, मैं स्टॉप दबाता हूं और फिर यदि मैं फिर से स्टार्ट बटन दबाता हूं तो मुझे त्रुटि संदेश मिलता है "ए/libc (743): 0x00000010 (कोड = 1) पर घातक सिग्नल 11 (SIGSEGV), थ्रेड 743 (xample.recorder)" – blackfyre

+0

मेरा फिक्स https: // stackoverflow।कॉम/ए/47 992111/45 9 2448 – Fortran

उत्तर

55

मैं इसे छोड़ने से पहले रिकॉर्डर reseting इस समस्या का समाधान।

recorder.stop();  // stop recording 
recorder.reset(); // set state to idle 
recorder.release(); // release resources back to the system 
recorder = null; 
+0

ठीक है कि फॉलो फिक्स हो सकता है अप त्रुटि लेकिन चेतावनी को कैसे हल करें। या वास्तव में चेतावनी का मतलब क्या है और इसे कैसे हल किया जाए? मुझे वर्तमान में यह समस्या है। –

+0

अब मुझे मीडियाआरकॉर्डर स्टॉप विफल रहा है: -1007 –

+1

चेतावनी क्यों मौजूद है अगर मैं ' टी लाइन 'recorder.reset(); '? –

1

यह संशोधित फर्मवेयर चलाने के कारण उत्पन्न हो सकता है। जावा से एक SIGSEGV संभव नहीं होना चाहिए। इस पोस्ट को पढ़ें। अंत में त्रुटि का एक स्पष्टीकरण है। शुभकामनाएँ।

Android SIGSEGV error when recording audio

+0

धन्यवाद! क्या आप मुझे बता सकते हैं कि स्टॉप फ़ंक्शन को कॉल करने से पहले रिकॉर्डिंग क्यों रोक रही है ... रिकॉर्डिंग कुछ सेकंड के बाद बंद हो जाती है। :/ – blackfyre

+0

मुझे घटनाओं के अनुक्रम को समझ में नहीं आता है। किस घटना के बाद पीछा किया जाता है? स्टार्ट बटन -> रिकॉर्डिंग शुरू हो गई है -> स्वचालित रूप से रिकॉर्डिंग बंद करें ("कुछ सेकंड") -> बटन बंद करें? पूर्ण स्टैक ट्रेस दिखाएं, यह – dimetil

+0

में मदद कर सकता है मैंने अपनी पोस्ट संपादित की है और अनुक्रम है कि मैं रिकॉर्ड बटन दबाता हूं-> रिकॉर्डिंग शुरू हुई-> कुछ सेकंड बाद इसे रोक दिया गया है हालांकि मैंने स्टॉप बटन दबाया नहीं है। – blackfyre

0

मैं एंड्रॉयड 4.0.4 है मेरी सैमसंग गैलेक्सी एस 3 पर चल रहा है (के, सैमसंग मेरी असंशोधित संस्करण से एक यह में परिवर्तन किए हैं) और मैं कभी कभी एक SIGSEGV ("ए/libc (20448 प्राप्त कर सकते हैं): 0x00000010 (कोड = 1) पर घातक सिग्नल 11 (एसआईजीएसईजीवी) ") जब मैं मीडियारेकॉर्डर का उपयोग करता हूं।

मुझे एंड्रॉइड 4.0 के लिए मेरे एवीडी में एक एसआईजीएसईजीवी भी मिलती है, इसलिए वहां भी एक एसआईजीएसईजीवी प्राप्त करना संभव है।

अब मुझे यह पता लगाना है कि मैं मीडियारेकॉर्डर के साथ क्या गलत करता हूं। =)

1

प्रलेखन राज्यों:

आदेश संबंधित इन श्रोताओं के साथ जुड़े कॉलबैक प्राप्त करने के लिए, अनुप्रयोग बना के लिए आवश्यक हैं MediaRecorder एक Looper साथ धागे (मुख्य यूआई धागा चलाने पर वस्तुओं डिफ़ॉल्ट रूप से में पहले से ही एक लूपर चल रहा है)।

सुनिश्चित करें कि आप यूआई थ्रेड पर रिकॉर्डर बनाते हैं। शायद यूआई थ्रेड पर अपनी विधियों को भी कॉल करें।

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