J'essaie d'enregistrer un fichier son pcm et de le lire. Quand je le rejoue, cela semble lent et prend plus de temps que pour enregistrer. Je ne suis pas sûr si l'erreur est dans l'enregistrement ou le code de jeu. Des idées quel est le problème?Android L'enregistrement audio et la lecture sont corrompus
I Code largement copié de cet exemple: http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html
Voici le code d'enregistrement (drapeau isRecording est réglé par le bouton d'arrêt en fil de IUG).
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
int sampleRateInHz = 8000;//8000 44100, 22050 and 11025
int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
File sd = Environment.getExternalStorageDirectory();
File file = new File(sd, "msg.wav");
if (file.exists())
file.delete();
try {
file.createNewFile();
} catch (IOException e) {
Log.e("create file:", e.toString());
}
try {
OutputStream os = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
int bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioFormat);
short[] buffer = new short[bufferSize];
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRateInHz,channelConfig, audioFormat,bufferSize);
audioRecord.startRecording();
isRecording = true;
while (isRecording) {
int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
for (int i = 0; i < bufferReadResult; i++)
{
dos.writeShort(buffer[i]);
}
}
dos.close();
Ceci est le code de lecture.
File file = new File(SendAlert.voiceFile);
// Get the length of the audio stored in the file (16 bit so 2 bytes per short)
// and create a short array to store the recorded audio.
int musicLength = (int)(file.length()/2);
short[] music = new short[musicLength];
try {
// Create a DataInputStream to read the audio data back from the saved file.
InputStream is = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
// Read the file into the music array.
int i = 0;
while (dis.available() > 0) {
music[i] = dis.readShort();
i++;
}
// Close the input streams.
dis.close();
// Create a new AudioTrack object using the same parameters as the AudioRecord
// object used to create the file.
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
musicLength,
AudioTrack.MODE_STREAM);
// Start playback
audioTrack.play();
// Write the music buffer to the AudioTrack object
audioTrack.write(music, 0, musicLength);
Fait intéressant, il est deux fois plus longtemps qu'il devrait être ... mais en changeant la lecture stéréo ne fonctionne pas. ça avait l'air vraiment étrange. –
Si vous essayez de l'enregistrer en stéréo, cela change-t-il quelque chose? –