【问题标题】:How to record sound in Android app如何在 Android 应用中录制声音
【发布时间】:2014-07-09 08:41:35
【问题描述】:

我正在开发一个Android应用程序,这个应用程序的一部分是一个简单的木琴,我要做的是实现一个功能,记录用户按下按钮时的木琴声音。

当用户按下按钮时,例如 do、re mi 等,声音会使用保存在 raw 文件夹中的 mp3 播放...

1) 可以这样做吗? 2)有人可以解释我如何“捕获”声音并将其记录在SD卡中吗? 3) 是否可以实现“录制”“播放”“停止”“再现”功能?

【问题讨论】:

    标签: android audio audio-recording


    【解决方案1】:

    您可以使用此代码录制音频:

    private void startRecording() {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    
            try {
                mRecorder.prepare();
            } catch (IOException e) {
                Log.e(LOG_TAG, "prepare() failed");
            }
    
            mRecorder.start();
        }
    

    我正在寻找如何使用耳机录制音频,而不是来自 演讲者如果有人对此有想法,请在评论中分享链接。

    【讨论】:

      【解决方案2】:

      如果没有 root,Android 无法在内部(或说“数字”)录制扬声器或耳机发出的声音。原因可能是版权问题,因此无法生成通过 Android 设备播放的内容的数字副本。

      当然,如果信号足够响亮,您可以使用内置麦克风进行录制,但质量损失很大。此外,您的木琴上还有背景噪音和用户指尖的敲击噪音。

      最好的解决方案是您以编程方式混合与按键对应的样本,并将结果发送到扬声器,同时发送到声音文件中。复杂,但最佳。

      【讨论】:

        【解决方案3】:

        是的,您可以捕获音频并将其存储在 sd 中,然后再播放。查看这些链接。

        http://developer.android.com/reference/android/media/MediaRecorder.html

        http://www.tutorialspoint.com/android/android_audio_capture.htm

        【讨论】:

        • 这个解决方案的唯一问题是录音是使用麦克风完成的!我需要的是在没有麦克风的情况下录制声音,因为我想播放唯一的木琴声音
        • 我不明白你。如果你想要默认的木琴声音,你可以从网上下载。
        • 如果你想存储整个序列,你可以合并相应的mp3文件。
        • 我已经创建了允许你播放木琴的Android应用程序,当用户按下与你播放声音的音符对应的按钮时,(我下载并插入到我的项目中,带有mp3的声音) .我现在要做的是让用户可以录制他播放的音乐。
        • 我不确定你如何录制正在播放的音乐。尝试是否可以合并多个 mp3 文件(木琴音调)并适当延迟以获得完整的音乐。
        【解决方案4】:
        MediaRecorder recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(PATH_NAME);
        recorder.prepare();
        recorder.start(); // Recording is now started
        ...
        recorder.stop();
        recorder.reset(); // You can reuse the object by going back to setAudioSource() step
        recorder.release(); // Now the object cannot be reused
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多