2012-06-06 17 views
5

मैं मीडियाप्लेयर के साथ एक ऑडियो फ़ाइल चलाने की कोशिश कर रहा हूं। मैं मीडियाप्लेयर में बाइट सरणी खेलना चाहता हूं। मैं यह कैसे कर सकता हूँ? मैंने thisमीडियाप्लेयर में बाइट सरणी चलाएं - एंड्रॉइड

public void writeSamples(byte[] samples, int length) 
{ 
    // track.write(samples, 0, length); 
    File tempMp3; 
    try { 
    tempMp3 = File.createTempFile("kurchina", ".mp3"); 
     tempMp3.deleteOnExit(); 
     FileOutputStream fos = new FileOutputStream(tempMp3); 
     fos.write(samples); 
     fos.close(); 
     // Tried reusing instance of media player 
     // but that resulted in system crashes... 
     MediaPlayer mediaPlayer = new MediaPlayer(); 

     // Tried passing path directly, but kept getting 
     // "Prepare failed.: status=0x1" 
     // so using file descriptor instead 
     FileInputStream fis = new FileInputStream(tempMp3); 
     mediaPlayer.setDataSource(fis.getFD()); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

लेकिन यह ऑडियो नहीं चला रहा है। यह सिर्फ एसडी कार्ड में कई फाइलें उत्पन्न कर रहा है। और यह त्रुटि दे रही है:

06-06 11:02:59.191: E/MediaPlayer(1831): Unable to to create media player 
06-06 11:02:59.191: W/System.err(1831): java.io.IOException: setDataSourceFD failed.:  status=0x80000000 
06-06 11:02:59.201: W/System.err(1831): at android.media.MediaPlayer.setDataSource(Native Method) 
06-06 11:02:59.201: W/System.err(1831): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:749) 
06-06 11:02:59.201: W/System.err(1831): at org.vinuxproject.sonic.SonicTest$1.run(SonicTest.java:178) 
06-06 11:02:59.201: W/System.err(1831): at java.lang.Thread.run(Thread.java:1096) 

मेरी मदद करें। किसी भी तरह की मदद की सराहना की जाती है।

धन्यवाद

+0

अपने कोड जोड़ने यहां स्निपेट करें और कोई मदद करने में सक्षम होगा। –

+0

मैं setDataSource संस्करण को आजमाने की अनुशंसा करता हूं जो एफडी के अतिरिक्त ऑफ़सेट और लंबाई लेता है। क्या उत्पन्न एमपी 3 फ़ाइल संगीत अनुप्रयोग में खेलती है? इसके अलावा, एंड्रॉइड/Dalvik में हटाएंऑनएक्सिट उपयोगी नहीं है। – dagalpin

+0

मेरे आवेदन में कोई फ़ाइल नहीं चल रही है। कृपया मेरी मदद करें –

उत्तर

6

अपनी टिप्पणी के आधार पर, आप स्ट्रीमिंग के लिए एक WAV फ़ाइल का उपयोग कर रहे हैं। फ़ाइल की शुरुआत में पारंपरिक WAV has a header और शेष फ़ाइल शुद्ध डेटा है। यदि आप हेडर भाग को शामिल नहीं करते हैं, तो इसके पैरामीटर को प्लेयर को डेटा (डेटा की संख्या, प्रति सेकंड नमूने, ब्लॉक आकार इत्यादि) की व्याख्या करने में सक्षम होने की आवश्यकता होती है। परिणामस्वरूप, एक डब्ल्यूएवी अकेले फ़ाइल स्ट्रीम करने योग्य नहीं है, पैरामीटर को प्लेयर में खिलाया जाना चाहिए।

MPEG-4 दूसरी ओर स्ट्रीमिंग करने में सक्षम होने के लिए निर्दिष्ट किया गया है। इसमें अच्छी पहचान योग्य सेगमेंट शामिल हैं जो अकेले खेला जा सकता है, इसलिए जब तक डेटा खंड में हेडर होता है, तब तक डेटा बजाने योग्य हो सकता है। इसके अच्छे संपीड़न अनुपात के अलावा, यह एक कारण है कि कई इंटरनेट रेडियो इसका उपयोग क्यों करते हैं।

एंड्रॉयड में MediaPlayer एक उच्च स्तर घटक है और निम्न स्तर पैरामीटर है कि एक WAV हिस्सा खेलने के लिए की आवश्यकता होगी सुलभ नहीं हैं। यदि आपको डब्ल्यूएवी होने के स्रोत की आवश्यकता है और अन्य streamable formats का उपयोग नहीं कर सकते हैं, तो आप निम्न स्तर तक पहुंच के लिए AudioTrack कक्षा या OpenSL ES आज़मा सकते हैं। http://audioprograming.wordpress.com/2012/10/18/a-simple-synth-in-android-step-by-step-guide-using-the-java-sdk/

+0

का अधिभार संस्करण की कोशिश हम्म ... audiotrack रास्ते जाने के लिए की तरह लग सकता है - – EGHDK

+0

अगर मुझे मदद मिल सकती है तो मुझे बताएं। – allprog

+0

वर्डप्रेस लिंक "मृत" है जिसमें ब्लॉग अब निजी है –

0

फ़ाइल पर एक बाइट लिखने के बाद: आप इस समारोह से खेल सकते हैं:

void playSound(int resid) { 
     MediaPlayer eSound = MediaPlayer.create(context, resid); 
     Resources res = context.getResources(); 
     AssetFileDescriptor afd = res.openRawResourceFd(resid); 
     eSound.reset(); 
     eSound.setAudioStreamType(AudioManager.STREAM_SYSTEM); 
     try { 
      eSound.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), 
        afd.getLength()); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      eSound.prepare(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     eSound.start(); 
    } 

और तुम यहाँ से फ़ाइल जानकारी प्राप्त कर सकते हैं:

byte[] getFileInformation(String filepath) { 
     MediaPlayer eSound = MediaPlayer.create(context, Uri.parse(filepath)); 
     eSound.reset(); 
     eSound.setAudioStreamType(AudioManager.STREAM_SYSTEM); 
     try { 
      eSound.setDataSource(filepath); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      eSound.prepare(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     int duration = eSound.getDuration()/1000; 

     int height = 480; 
     int width = 640; 
     height = eSound.getVideoHeight(); 
     width = eSound.getVideoWidth(); 

     eSound.release(); 
     File f = new File(filepath); 
     int size = (int) f.length(); 
     byte[] b = new byte[16]; 
     System.arraycopy(convertIntToByte(size), 0, b, 0, 4); 
     System.arraycopy(convertIntToByte(duration), 0, b, 4, 4); 
     System.arraycopy(convertIntToByte(width), 0, b, 8, 4); 
     System.arraycopy(convertIntToByte(height), 0, b, 12, 4); 
     return b; 
    } 
audiotrack के लिए यह एक बहुत अच्छा ट्यूटोरियल है
0

इस प्रयास करें:

private void playMp3(byte[] mp3SoundByteArray) 
{ 
    try 
    { 

     File path=new File(getCacheDir()+"/musicfile.3gp"); 

     FileOutputStream fos = new FileOutputStream(path); 
     fos.write(mp3SoundByteArray); 
     fos.close(); 

     MediaPlayer mediaPlayer = new MediaPlayer(); 

     FileInputStream fis = new FileInputStream(path); 
     mediaPlayer.setDataSource(getCacheDir()+"/musicfile.3gp"); 

     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } 
    catch (IOException ex) 
    { 
     String s = ex.toString(); 
     ex.printStackTrace(); 
    } 
} 
संबंधित मुद्दे