Grabar sonido Y reproducir sonido modulado En Android?
Hola estoy haciendo una aplicación relacionada con la modulación de sonido Necesito saber cómo grabar un sonido y modular el sonido grabado en otra voz. Como Talking Tom Cat Application. Había intentado una solución de la pila sobre el flujo de aquí
Y De Otro Blog Blog Dirección
- Obtener: No se permite iniciar el servicio Intención ... sin permiso Proceso de servicio es malo
- Facturación en aplicaciones de Android y servicio bindService
- El micrófono Android no funciona cuando se utiliza por otra aplicación en el servicio de fondo
- ¿Cómo iniciar AccessibilityService?
- ¿Cómo comprobar el permiso automático de MIUI mediante programación?
Pero no conseguí ninguna idea. ¿Puede cualquier uno por favor darme algunas ideas o solución?
- PopUp diálogo Android de hilo de fondo
- Cómo reiniciar el servicio después de que la aplicación sea eliminada de las tareas recientes
- BadParcelableException: ClaseNotFoundException al unmarshalling
- ¿Puede existir un servicio de fondo sin su aplicación principal?
- Android - Ejecutar en segundo plano - Service vs. standard java class
- Depuración de fallos de servicio
- Depurar servicio de fondo en android utilizando intelliJ
- Cómo detectar la visibilidad del selector de método de entrada sin el permiso de accesibilidad
Al fin he encontrado la solución esto puede ayudar a alguien
http://android-er.blogspot.in/2012/06/implement-voice-changer-by-changing.html
código
public class Sound_modActivity extends Activity { Integer[] freqset = {11025, 16000, 22050, 44100}; private ArrayAdapter<Integer> adapter; Spinner spFrequency; Button startRec, stopRec, playBack; Boolean recording; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startRec = (Button)findViewById(R.id.startrec); stopRec = (Button)findViewById(R.id.stoprec); playBack = (Button)findViewById(R.id.playback); startRec.setOnClickListener(startRecOnClickListener); stopRec.setOnClickListener(stopRecOnClickListener); playBack.setOnClickListener(playBackOnClickListener); spFrequency = (Spinner)findViewById(R.id.frequency); adapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, freqset); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spFrequency.setAdapter(adapter); } OnClickListener startRecOnClickListener = new OnClickListener(){ public void onClick(View arg0) { Thread recordThread = new Thread(new Runnable(){ public void run() { recording = true; startRecord(); } }); recordThread.start(); }}; OnClickListener stopRecOnClickListener = new OnClickListener(){ public void onClick(View arg0) { recording = false; }}; OnClickListener playBackOnClickListener = new OnClickListener(){ public void onClick(View v) { playRecord(); } }; private void startRecord(){ File file = new File(Environment.getExternalStorageDirectory(), "test.pcm"); int sampleFreq = (Integer)spFrequency.getSelectedItem(); try { file.createNewFile(); OutputStream outputStream = new FileOutputStream(file); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream); int minBufferSize = AudioRecord.getMinBufferSize(sampleFreq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); short[] audioData = new short[minBufferSize]; AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleFreq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize); audioRecord.startRecording(); while(recording){ int numberOfShort = audioRecord.read(audioData, 0, minBufferSize); for(int i = 0; i < numberOfShort; i++){ dataOutputStream.writeShort(audioData[i]); } } audioRecord.stop(); dataOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } void playRecord(){ File file = new File(Environment.getExternalStorageDirectory(), "test.pcm"); int shortSizeInBytes = Short.SIZE/Byte.SIZE; int bufferSizeInBytes = (int)(file.length()/shortSizeInBytes); short[] audioData = new short[bufferSizeInBytes]; try { InputStream inputStream = new FileInputStream(file); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); DataInputStream dataInputStream = new DataInputStream(bufferedInputStream); int i = 0; while(dataInputStream.available() > 0){ audioData[i] = dataInputStream.readShort(); i++; } dataInputStream.close(); int sampleFreq = (Integer)spFrequency.getSelectedItem(); AudioTrack audioTrack = new AudioTrack( AudioManager.STREAM_MUSIC, sampleFreq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM); audioTrack.play(); audioTrack.write(audioData, 0, bufferSizeInBytes); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
- Android Remote methods (AIDL) vs Intents – rendimiento y uso de la batería
- Apoyo de idioma azerbaiyano por Android 2.2?