【问题标题】:Android : Record sound in mp3 formatAndroid : 以 mp3 格式录制声音
【发布时间】:2012-08-12 16:55:50
【问题描述】:

我正在构建一个 android 应用程序,具有通过麦克风捕获声音并通过耳机播放的功能。为此,我使用了“AudioRecord”和“AudioTrack”。以下是我正在使用的部分代码,(仅供理解)

mInBufferSize = AudioRecord.getMinBufferSize(mSampleRate,
            AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat);
mOutBufferSize = AudioTrack.getMinBufferSize(mSampleRate,
            AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat);
mAudioInput = new AudioRecord(MediaRecorder.AudioSource.MIC,
            mSampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat,
            mInBufferSize);
mAudioOutput = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate,
            AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat,
            mOutBufferSize, AudioTrack.MODE_STREAM);

但主要问题是我想以 mp3 格式录制传入的声音?请帮助我,我将不胜感激......

提前致谢

【问题讨论】:

    标签: android mp3 record


    【解决方案1】:

    有一种使用 MediaRecorder 保存 .mp3 文件的解决方法。方法如下:

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setOutputFile(Environment.getExternalStorageDirectory()
            .getAbsolutePath() + "/myrecording.mp3");
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    recorder.prepare();
    recorder.start();
    

    这里的重要部分是setOuputFormatsetAudioEncoder。如果您同时使用MediaRecorder.OutputFormat.MPEG_4MediaRecorder.AudioEncoder.AAC,显然 MediaRecorder 会录制可播放的 mp3。希望这对某人有所帮助。

    当然,如果您更愿意使用 AudioRecorder 类,我认为下面链接的 Chirag 源代码应该可以正常工作 - https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid(尽管您可能需要将其中一些从日语翻译成英语)

    编辑:正如布鲁诺和其他一些人在 cmets 中指出的那样,这不编码 MP3 中的文件。编码仍然是AAC。但是,如果您尝试播放通过上述代码使用 .mp3 扩展名保存的声音,它仍然可以正常播放,因为大多数媒体播放器都足够智能,可以检测到真正的编码。

    【讨论】:

    • 令我惊讶的是,大多数开发人员都不知道录制 mp3 是多么容易!谢谢!
    • 使用 AudioEnconder.ACC 对某些设备有一些奇怪的影响...由于某种原因,在带有 Android 6.0 的 Lenovo Tab3 上快速录制音频。我最终使用了 MediaRecorder.AudioEncoder.AMR_NB 并为我工作得很好。
    • 抱歉,但这不会生成 MP3 编码文件。它们仍然是 aac 编码的(在我的银河 s6 上)
    • 伙计们,仅仅因为您将文件的扩展名命名为 MP3,它并不能成为 MP3!它是 AAC 编码的,不支持 AAC 的设备不会播放它!所以这不是一种解决方法,不应该被赞成!
    • 您需要使用 .m4a 扩展名 - 这是实际的扩展名,并且在大多数平台(iOS、网络)中都被广泛接受
    【解决方案2】:

    您可以在 git 上找到 Mp3 Voice Recorder Sample For Android 的源代码。

    Checkout这个源代码。

    【讨论】:

    • 这个答案非常好,我准备接受它,但问题是它会影响“AudioTrack”,我的意思是使用此代码后,我无法在耳机中听到声音。这两个过程可以并行吗?例如使用“AudioTrack”播放声音并将其录制到 mp3 中?谢谢你的回答
    • 您可以使用Media Player Class在耳机中收听。
    • 是的,但是MediaPlayer在录制完成后还是有用的,但是这种情况下要求是同时播放声音和录制
    • 据我所知,4 岁以下的 android 不允许你在它的记录中播放声音
    • 这个项目可能会更好:github.com/talzeus/AndroidMp3Recorder,它没有日文字符。他们都使用 mp3lame 库。
    【解决方案3】:

    我知道这是一个老问题。但如果它可以帮助我创建一个带有 android java full recording app demo 的存储库,那么输出文件是一个 mp3 文件。 请记住,如果不需要请求用户权限,我将目标 sdk 设置为 21。这仅用于演示目的。 你可以克隆并使用它。

    我使用的大部分代码都来自这个 repo:this

    我的演示仓库: mp3 recording app

    【讨论】:

      【解决方案4】:

      将录音机的outputformat 设置为MediaRecorder.OutputFormat.DEFAULT。我用过这个,生成的音频文件是 mp3。

      【讨论】:

      • 嗨。我尝试了这个并将结果“adb”拉到我的 linux 开发主机上。生成的文件上的文件给出:/home/sjs/AudioDemo.mp3:ISO Media、MPEG v4 系统、3GPP。即该文件是一个 mp4 文件。设备是运行 Android 6.0.1 的 Nexus 7。抱歉,谢谢。
      【解决方案5】:

      这对我有用

      mediaRecorder = new MediaRecorder();
      mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
      mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
      mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory()
          .getAbsolutePath() + "/record.mp3");
      mediaRecorder.prepare();
      mediaRecorder.start();
      

      【讨论】:

        【解决方案6】:

        这对我有用

        outputFile = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/myrecording.mp3";
            myAudioRecorder = new MediaRecorder();
            myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            myAudioRecorder.setOutputFile(outputFile);`
        

        myAudioRecorder.prepare(); myAudioRecorder.start();`

        【讨论】:

        • 这里不录制mp3,只是文件的扩展名是mo3,不是文件格式。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多