【问题标题】:Draw Amplitudes by time Audio Android按时间绘制振幅音频 Android
【发布时间】:2015-10-31 05:39:35
【问题描述】:

我正在尝试绘制一些录制音频的频谱表示。 使用 AudioRecord 类,我得到一个字节数组,我猜是幅度值。

现在的问题是我不知道如何表示时间轴。

有什么想法吗??

录制代码:

 public void startRecording(View v) {
    mIsRecording = true;
    mRecorder.startRecording();


    new Thread(new Runnable() {
        @Override
        public void run() {

                while (mIsRecording) {
                    int readSize = mRecorder.read(mBuffer, 0, mBuffer.length);

                }

        }
    }).start();
}

记录器初始化:

private void initRecorder() {
    int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT);
    mBuffer = new short[bufferSize];
    mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT, bufferSize);
}

提前致谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    首先,当您谈论频谱时,您指的是音频信号的频率分量,它与幅度非常不同。

    无论如何,如果您想绘制随时间变化的幅度,x 轴 将是时间,而 y 轴 将是幅度。这里的关键值是采样率,它定义了您每秒记录的样本数;您需要决定要在屏幕上绘制平均幅度值多少次(与采样率相关),然后...只需绘制它。我建议您从更简单的开始,例如 Samsung official docs 中的以下示例:

    AudioRecord recorder; // our recorder, must be initialized first
    short[] buffer; // buffer where we will put captured samples
    DataOutputStream output; // output stream to target file
    boolean isRecording; // indicates if sound is currently being captured
    ProgressBar pb; // our progress bar recieved from layout
    while (isRecording) {
      double sum = 0;
      int readSize = recorder.read(buffer, 0, buffer.length);
      for (int i = 0; i < readSize; i++) {
          output.writeShort(buffer [i]);
          sum += buffer [i] * buffer [i];
      }
      if (readSize > 0) {
          final double amplitude = sum / readSize;
          pb.setProgress((int) Math.sqrt(amplitude));
      }
    }
    

    此示例显示实时幅度值(使用ProgressBar);您可以修改此示例并随时间按顺序绘制幅度值(例如,在Canvas 中绘制连续的垂直线)

    【讨论】:

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