Audiodaten aus short-Array als (unkomprimierte) Audiodatei speichern

  • 3 Antworten
  • Letztes Antwortdatum
sowatt

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

Anhänge

  • AudioClassifier.zip
    54,7 KB · Aufrufe: 84
niemand?
 
na ja, das is mir schon klar, dass ich mir die wave-datei selber zusammenbasteln kann.

was ich aber suche ist eine möglichkeit eine solche wave-datei automatisch generieren zu lassen. nicht weil ich zu faul für die alternative wäre, sondern weil es mir so naheliegend erscheint, dass es dafür einen mechanismus geben müsste.
 
Zurück
Oben Unten