1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. sowatt, 23.05.2011 #1
    sowatt

    sowatt Threadstarter Neuer Benutzer

    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:

  2. sowatt, 24.05.2011 #2
    sowatt

    sowatt Threadstarter Neuer Benutzer

    niemand?
     
  3. DieGoldeneMitte, 24.05.2011 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

  4. sowatt, 24.05.2011 #4
    sowatt

    sowatt Threadstarter Neuer Benutzer

    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.