2011-09-06 13 views
6

Ho registrato voce con Android AudioRecord e mi piacerebbe convertirlo in ogg vorbis in quanto è privo di brevetti. Ho provato la beta vorbis-java, ma sembra non funzionare o faccio qualche errore.Come codificare la voce registrata in ogg vorbis?

Ecco il mio codice:

int  frequency  = 44100; 
int  channel  = AudioFormat.CHANNEL_IN_STEREO; 
int  mAudioSource = MediaRecorder.AudioSource.MIC; 
int mAudioEncoder = AudioFormat.ENCODING_PCM_16BIT; 
try { 
      final File outputFile = new File(mOutputPath); 
      DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(outputFile))); 
      int bufferSize = AudioRecord.getMinBufferSize(frequency, channel, mAudioEncoder); 
      AudioRecord audioRecord = new AudioRecord(mAudioSource, frequency, channel, mAudioEncoder, bufferSize); 
      short[] buffer = new short[bufferSize]; 
      audioRecord.startRecording(); 
      while (isRecordStart) { 
       int bufferReadResult = audioRecord.read(buffer, 0, bufferSize); 
       for(int i = 0; i < bufferReadResult; i++) { 
        dos.writeShort(buffer[i]); 
       } 
      } 
      audioRecord.stop(); 
      dos.close(); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 

ho salvarlo in un file con estensione wav e utilizzare esempio di Vorbis-java per codificare, ma la produzione è solo zzz .......

Come codificare questo in ogg vorbis in Android?

risposta

2

Sembra che tu scriva dati audio grezzi in un file anziché in formato wav. Il formato Wav ha intestazioni, non solo dati audio.

Nota: Non utilizzare vorbis-java, ma compilare da fonti libogg e libvorbis a http://www.xiph.org/downloads/

utilizzare Android NDK per compilare loro per l'incorporamento nel file apk.

Quindi è possibile chiamare il codice nativo dall'app per codificare i dati audio.

8

Penso di aver letto questa domanda alcune settimane fa ed ero anche molto frustrato. Ho finito per scrivere il wrapper ndk necessario per usare le cose di Xiph.org. L'unico problema è che per farlo funzionare bene, ho dovuto abilitare le istruzioni in virgola mobile. Gli emulatori non hanno virgola mobile, quindi causerà il crash dell'emulatore. Eseguilo su praticamente tutti i telefoni, però, e sarai a posto. È progettato per emulare FileInputStream e FileOutputStream per l'interfaccia con i file vorbis.

https://github.com/nwertzberger/libogg-vorbis-android

+0

Hi there sir, sembra che di API 18 questo è supportata in modo nativo. Potresti per favore consigliarmi sul mio argomento qui - Sono d'accordo per un paio di settimane ora - https://stackoverflow.com/q/44324931/1828637 – Noitidart

+1

Eccellente! Vorrei andare con le cose native. – Rannick

+0

Salve @Rannick ho eliminato quell'argomento, ma questo è lo stesso problema, un altro utente lo ha messo più chiaramente - potresti aiutarci a capire perché la registrazione di ogg non funziona - https://stackoverflow.com/questions/44480762/mediarecorder -output formato-e-codifica causano-crash – Noitidart