How to encode Recorded voice to ogg vorbis?

こ雲淡風輕ζ 提交于 2019-12-18 02:54:16

问题


I have recorded voice with android AudioRecord and I would like to convert it to ogg vorbis as it is patent free. I have try vorbis-java beta, but it seem not work or I make some mistake.

Here are my code :

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

I save it to a file with extension wav and use example of vorbis-java to encode, but output is only zzz.......

How to encode this to ogg vorbis in android?


回答1:


I think i read this question a few weeks ago and was also super frustrated. I ended up writing the needed ndk wrapper to use Xiph.org's stuff. The only catch is that in order to make it run well, I had to enable floating point instructions. Emulators don't have floating point, so it'll crash the emulator. Run it on pretty much any phone, though, and you'll be good to go. It's designed to emulate a FileInputStream and FileOutputStream for interfacing with the vorbis files.

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




回答2:


You seem to write raw audio data into a file instead of wav format. Wav format does have headers, not just audio data.

Note: Don't use vorbis-java, but compile from libogg and libvorbis sources at http://www.xiph.org/downloads/

Use android NDK to compile them for embedding in your apk file.

Then you can call the native code from your app to encode the audio data.



来源:https://stackoverflow.com/questions/7314816/how-to-encode-recorded-voice-to-ogg-vorbis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!