2012-02-29 16 views
5

Hola, actualmente 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 la aplicación Talking Tom Cat. Había probado una solución de la pila sobre el flujo From HERE¿Grabar sonido y reproducir sonido modulado en Android?

Y de otro blog Blog Address

pero no obtener ninguna idea.Can Cualquiera Por favor, dame algunas ideas o solución?

Respuesta

4

al fin tengo encontrar la solución que 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(); 
} 
} 

} 
+2

Es posible que desee responder a la pregunta aquí, no sólo nos dicen que ya sabe la respuesta . –

+0

Si bien esto puede responder teóricamente a la pregunta, nos gustaría que incluya las partes esenciales del artículo vinculado en su respuesta, y proporcione el [enlace de referencia] (http://meta.stackexchange.com/q/8259). Si no se hace eso, la respuesta corre peligro a causa de la podredumbre del enlace. – Kev

Cuestiones relacionadas