Audiodaten aus short-Array als (unkomprimierte) Audiodatei speichern

  • Antworten:0
Otto Mueller
  • Forum-Beiträge: 1

23.05.2011, 19:10:51 via Website

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 (welche trotz code-tag anscheinend nicht richtig formatiert ausgegeben werden. sorry!)

[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();
}
}

[/code]

Antworten