comment puis-je jouer à pcm fichier
Le code suivant devrait enregistrer de l'audio et de les stocker dans la carte SD en format PCM.
le code est de travailler avec moi ,mais le fichier PCM n'est pas jouer !!!!
J'ai eu ce code à partir de ce lien.... Android : enregistrement audio à l'aide de audiorecord classe de jouer aussi vite envoyé
J'ai besoin de lire le fichier PCM Comment puis-je le faire ??????
public class Audio_Record extends Activity {
private static final int RECORDER_SAMPLERATE = 8000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord recorder = null;
private Thread recordingThread = null;
private boolean isRecording = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setButtonHandlers();
enableButtons(false);
int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
System.out.println("BUFFER SIZE VALUE IS " + bufferSize);
}
private void setButtonHandlers() {
((Button) findViewById(R.id.btnStart)).setOnClickListener(btnClick);
((Button) findViewById(R.id.btnStop)).setOnClickListener(btnClick);
}
private void enableButton(int id, boolean isEnable) {
((Button) findViewById(id)).setEnabled(isEnable);
}
private void enableButtons(boolean isRecording) {
enableButton(R.id.btnStart, !isRecording);
enableButton(R.id.btnStop, isRecording);
}
int BufferElements2Rec = 1024; //want to play 2048 (2K) since 2 bytes we
//use only 1024
int BytesPerElement = 2; //2 bytes in 16bit format
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData[i] & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
sData[i] = 0;
}
return bytes;
}
private void writeAudioDataToFile() {
//Write the output audio in byte
String filePath = "/sdcard/voice8K16bitmono.pcm";
short sData[] = new short[BufferElements2Rec];
FileOutputStream os = null;
try {
os = new FileOutputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (isRecording) {
//gets the voice output from microphone to byte format
recorder.read(sData, 0, BufferElements2Rec);
System.out.println("Short wirting to file" + sData.toString());
try {
////writes the data to file from buffer
////stores the voice buffer
byte bData[] = short2byte(sData);
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopRecording() {
//stops the recording activity
if (null != recorder) {
isRecording = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
private View.OnClickListener btnClick = new View.OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStart: {
enableButtons(true);
startRecording();
break;
}
case R.id.btnStop: {
enableButtons(false);
stopRecording();
break;
}
}
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
}
return super.onKeyDown(keyCode, event);
}
}
Veuillez Voir ma question @TechEnd
Comment êtes-vous tester s'il joue ou pas?
je suis allé vers le chemin où il a été stocké ,et quand j'ai essayé de l'ouvrir, il dit: "impossible de trouver une application pour effectuer cette action" @Ken Loup
Comment êtes-vous tester s'il joue ou pas?
je suis allé vers le chemin où il a été stocké ,et quand j'ai essayé de l'ouvrir, il dit: "impossible de trouver une application pour effectuer cette action" @Ken Loup
OriginalL'auteur Haneen Bassam | 2013-06-09
Vous devez vous connecter pour publier un commentaire.
Android media player par défaut ne joue pas les fichiers PCM. Soit
AudioTrack
Voici un tutoriel sur la façon de jouer PCM à l'aide de la
AudioTrack
classe: (http://jongladwin.blogspot.co.uk/2010/03/android-play-pcmwav-audio-buffer-using.html)Windows Media Player doit être en mesure de jouer à PCM, des alternatives sont mentionnés ici: (http://www.makeuseof.com/answers/play-pcm-file-pc/)
Je suppose que la plupart des gros lecteur de musique d'applications sur Android soutiendra PCM.
Difficile de poser un diagnostic à partir d'ici, mais essayez de changer .wav et d'ouverture dans windows media player (en supposant que vous êtes à l'aide de windows)
J'ai téléchargé le programme, de l'Audace, et il a ouvert le fichier PCM, mais ce n'est pas le son de ce que j'ai enregistré, c'est comme une avance rapide, comme un bruit grinçant! je ne sais pas quel est le problème?! @Ken Loup
Sonne comme la lecture d'une autre fréquence d'échantillonnage de ce qui a été enregistré
Merci beaucoup,vous avez raison,il s'est avéré que j'ai été en utilisant un échantillonnage différente de ce qui a été enregistré @Ken Loup
OriginalL'auteur Ken Wolf
J'ai aussi utilisé votre code, mais mon enregistrement voix était comme un "zzzzz" enregistrement. J'ai donc modifié un peu le code et maintenant je peux écouter sans problèmes et distorsions de l'enregistrer à la fois par le smartphone et PC (dans ce cas avec Audacity).
C'est mon code:
Comment accéder aux données audio brutes (peut-être en entier) à l'aide de
byteData
dansPlayShortAudioFileViaAudioTrack
fonction? Lorsque j'essaie d'imprimerbyteData
je reçois tous les zéros, cependant quand j'ouvre le .pcm fichier à l'aide sublime de l'éditeur, je vois des valeurs hexadécimales.OriginalL'auteur Grancein
c'est ma solution
16000 fréquence d'échantillonnage est trop lent pour de l'audio pcm droit??
OriginalL'auteur Ar Rik
private void startRecording() {
si( bufferSize == AudioRecord.ERROR_BAD_VALUE)
Journal.e( TAG, "Mauvaise Valeur pour \"bufferSize\", les paramètres d'enregistrement ne sont pas pris en charge par le matériel");
}
Remplacer L'Enregistrement De Code...
OriginalL'auteur Ravi makhija