¿Cómo juega Android InputStream en MediaPlayer?
Así que tengo un pequeño archivo de audio en mi carpeta de activos y quería abrir un InputStream para escribir en un búfer, luego escribir en un archivo temporal, a continuación, abrir el MediaPlayer para reproducir ese archivo temporal. El problema es que cuando el reproductor de medios golpea mp.Prepare (), no se reproduce y nunca llega al brindis. ¿Alguien había echo esto antes?
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); InputStream str; try { str = this.getAssets().open("onestop.mid"); Toast.makeText(this, "Successful Input Stream Opened.", Toast.LENGTH_SHORT).show(); takeInputStream(str); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }//end on create public void takeInputStream(InputStream stream) throws IOException { //fileBeingBuffered = (FileInputStream) stream; //Toast.makeText(this, "sucessful stream conversion.", Toast.LENGTH_SHORT).show(); try { convertedFile = File.createTempFile("convertedFile", ".dat", getDir("filez", 0)); Toast.makeText(this, "Successful file and folder creation.", Toast.LENGTH_SHORT).show(); out = new FileOutputStream(convertedFile); Toast.makeText(this, "Success out set as output stream.", Toast.LENGTH_SHORT).show(); //RIGHT AROUND HERE ----------- byte buffer[] = new byte[16384]; int length = 0; while ( (length = stream.read(buffer)) != -1 ) { out.write(buffer,0, length); } //stream.read(buffer); Toast.makeText(this, "Success buffer is filled.", Toast.LENGTH_SHORT).show(); out.close(); playFile(); }catch(Exception e) { Log.e(TAG, e.toString()); e.printStackTrace(); }//end catch }//end grabBuffer public void playFile() { try { String path = convertedFile.getAbsolutePath(); mp = new MediaPlayer(); mp.setDataSource(path); Toast.makeText(this, "Success, Path has been set", Toast.LENGTH_SHORT).show(); mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.prepare(); Toast.makeText(this, "Media Player prepared", Toast.LENGTH_SHORT).show(); mp.start(); Toast.makeText(this, "Media Player playing", Toast.LENGTH_SHORT).show(); } catch (IllegalArgumentException e) { Log.e(TAG, e.toString()); e.printStackTrace(); } catch (IllegalStateException e) { Log.e(TAG, e.toString()); e.printStackTrace(); } catch (IOException e) { Log.e(TAG, e.toString()); e.printStackTrace(); } }//end playFile
- IOException durante la lectura de InputStream
- Convertir flujo de entrada en mapa de bits
- ¿Cómo puedo leer un archivo de texto en Android?
- Línea de estado inesperado: ICY 200 OK para el método URL openStream ()?
- Error de bucle en el emulador de Android
- Abierta: EBUSY (dispositivo o recurso ocupado)
- InputStream - Tratamiento de los cambios de red
- Crear mediaplayer con inputstream en android
- SocketException: ¿Permiso denegado?
- ¿Cómo un InputStream, InputStreamReader y BufferedReader trabajan juntos en Java?
- Archivos de 0 bytes no detectados al descargar archivos en Android
- Android: descarga de la imagen desde la Web, guardando en la memoria interna en una ubicación privada a la aplicación, mostrando para el elemento de lista
- Se ha adquirido un recurso en el seguimiento de la pila adjunto pero nunca se ha publicado - Error
Arreglado. Resulta que después de escribir el búfer en el archivo temporal creado por "Archivo", puede abrir ese archivo usando FileInputStream, luego proceda a reproducirlo como se muestra a continuación. Gracias por toda su ayuda chicos.
mp = new MediaPlayer(); FileInputStream fis = new FileInputStream(convertedFile); mp.setDataSource(fis.getFD()); Toast.makeText(this, "Success, Path has been set", Toast.LENGTH_SHORT).show(); mp.prepare(); mp.start();
Este es el código que funcionó para mí
//preserved to stop previous actions MediaPlayer lastmp; public void playSound(String file){ try{ if(lastmp!=null)lastmp.stop(); MediaPlayer mp = new MediaPlayer(); lastmp=mp; AssetFileDescriptor descriptor; AssetManager assetManager = act.getAssets(); descriptor = assetManager.openFd(fileName); mp.setDataSource( descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength() ); descriptor.close(); mp.prepare(); mp.start(); }catch(Exception e){ e.printStackTrace();} }
El archivo debe estar en la carpeta de activos
¿Ha intentado cambiar la extensión de su archivo temporal de ".dat" a ".mid"?
- Scrollable linearlayout con pesos más grandes que la pantalla en android
- Cómo obtener el ID de la vista secundaria de clic agregado dinámicamente a un LinearLayout?