【问题标题】:What is the audio output format of Mozilla MediaRecorder and how can I decode ogg format in Java (or Scala)什么是 Mozilla MediaRecorder 的音频输出格式以及如何在 Java(或 Scala)中解码 ogg 格式
【发布时间】:2015-04-16 21:50:11
【问题描述】:

我正在使用新的(非标准)Mozilla MediaRecorder API 录制用户语音。

我认为格式是 ogg。但除此之外,我怎么知道,更不用说配置音频数据是使用一个通道还是两个通道,帧率是多少等?

相关问题,可能大部分信息都以ogg格式编码在二进制blob中,但是如何在服务器上处理Java或Scala中的ogg文件格式? Java 中的标准 Sound API 似乎不支持 Ogg,我还没有在 Java 或 Scala 中找到任何看起来很严肃的库。

【问题讨论】:

    标签: java javascript audio ogg getusermedia


    【解决方案1】:

    我认为帧速率不适用于音频 blob,但可以使用以下函数从音频 blob 中检索持续时间、channelCount 和 sampleRate。如果您不需要持续时间,您可以取消回调,使用普通返回函数检索其他两个详细信息。

    function getAudioBlobDetails(blob, callback){
        var audioURL = window.URL.createObjectURL(blob);
        var audio = new Audio(audioURL);
        audio.onloadedmetadata = function(){
            var source = audioContext.createMediaElementSource(audio);
            callback({
                duration: audio.duration,
                channelCount: source.channelCount,
                sampleRate: source.context.sampleRate
            });
        };        
    }
    

    Fiddle Demo

    关于 java/scala 库的第二部分,我不太了解,但您可以做的一件事是,在服务器中使用 ffmpegogg 文件转换为您更熟悉的格式处理 java 库。

    编辑:

    所以,如果你更喜欢wav 格式,你可以使用著名的mattdiamond/Recorderjs 来检索wav blob,用法类似于:

    wavRecorder.exportWAV( uploadBlobToServer); // uploadBlobToServer is the function that accepts blob as parameter.
    

    【讨论】:

    • 谢谢你的答案。我不喜欢使用ffmpeg 的想法,因为理想情况下这将是流式传输。为每个语音命令启动一个新进程会明显慢于处理内存中的位。
    • 如果你更喜欢wav / mp3,有办法在客户端获取这种格式的 blob(另一个好处是它们也可以在 chrome 上工作),但我相信@987654331 @ 比 mp3 质量好,比 wav 小很多
    • 我实际上更喜欢wav,反正现在只是为了让事情正常工作,因为我的语音识别引擎与wav一起工作
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多