sowatt
Neues Mitglied
- 0
Ich habe mittels 'AudioRecord' einen 16bit - Audiostream vom Mic-Eingang in ein short-array ('buffer') geschrieben. Jeder Wert in diesem Array entspricht genau einem Samplewert im Bereich-32.768 ... 32.767, also dem Datenbereich des verwendeten Typs. Der Inhalt des Arrays wird in einer Textdatei abgespeichert ( 'saveToSDCard()' ).
Wie kann ich außerdem den Inhalt des Arrays am einfachsten als unkomprimierte Audiodatei abspeichern?
Danke!
Hier die relevanten Codefragmente. Das gesamte Eclipse-Projekt befindet sich im beigefügten Archiv.
Wie kann ich außerdem den Inhalt des Arrays am einfachsten als unkomprimierte Audiodatei abspeichern?
Danke!
Hier die relevanten Codefragmente. Das gesamte Eclipse-Projekt befindet sich im beigefügten Archiv.
Code:
int AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
int FREQUENCY = 22050; //Herz
double REC_DURATION = 5.0; // in seconds
int bufferSize = -1;
AudioRecord audioRecord = null;
short [] buffer = null; // data sink for recording the audio stream from mic
void initAudio() {
int minBufferSize = AudioTrack.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_OUT_MONO, AUDIO_ENCODING);
bufferSize = (int)(REC_DURATION * 10 * minBufferSize);
buffer = new short[bufferSize];
// Create new AudioRecord object to record the audio.
audioRecord = new AudioRecord(
MediaRecorder.AudioSource.MIC,
FREQUENCY, AudioFormat.CHANNEL_IN_MONO,
AUDIO_ENCODING, bufferSize);
}
public void record() {
try {
audioRecord.startRecording();
audioRecord.read(buffer, 0, bufferSize);
audioRecord.stop();
} catch (Throwable t) {
Log.e(ACTIVITY_NAME,"record(): Recording Failed");
}
}
private void saveToSDCard(){
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy.MM.dd HH.mm.ss");
String fileName = sdf.format(new java.util.Date());
try {
String rootS = Environment.getExternalStorageDirectory().toString();
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()){
File f = new File(rootS + "/AudioClassifier", fileName + ".txt");
FileWriter fw = new FileWriter(f);
BufferedWriter out = new BufferedWriter(fw);
for(int i = 0; i < bufferSize / 2; i++){
out.write("" + buffer[i] + " ");
}
out.close();
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}