首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioRecord计算振幅

AudioRecord计算振幅
EN

Stack Overflow用户
提问于 2019-07-29 18:40:33
回答 1查看 173关注 0票数 0

我正在开发语音到文本的应用程序。

所有的工作都很好,但我想实现反馈时,用户正在与应用程序交谈,以检测(脉动)声音活动。比如Shazam应用。我想我需要计算振幅,然后根据振幅的水平来制作脉动动画。

这是我读取字节的代码。我需要如何使用从AudioRecordread方法中获得的int来计算它。

代码语言:javascript
复制
   // stream bytes as they become available in chunks equal to the buffer size
        mAudioExecutor!!.scheduleAtFixedRate({
            // read audio data
            val read = mAudioRecorder!!.read(
                    mBuffer, 0, mBuffer.size, AudioRecord.READ_BLOCKING)

            // send next chunk
            if (read > 0) {
                subscriber(ByteString.copyFrom(mBuffer, 0, read))
            }
        }, 0, 10, TimeUnit.MILLISECONDS) 
EN

回答 1

Stack Overflow用户

发布于 2019-07-29 22:18:43

您需要使用傅立叶变换(傅立叶变换)从音频字节中获得Ampl幅值

您需要添加几个代码才能使其工作:

因为Stackoverflow的答案不能超过30,000个字符。我不能在这里添加代码。但我要分享我的github要点来帮助你。

是我的主旨链接。

有3个文件需要添加到源文件中。

  1. AudioCalculator.kt
  2. FrequencyCalculator.kt
  3. RealDoubleFFT.kt

使用:

在将上述3个文件添加到您的源代码后:

代码语言:javascript
复制
val audioCalculator = AudioCalculator()
// stream bytes as they become available in chunks equal to the buffer size
mAudioExecutor?.scheduleAtFixedRate({
    // read audio data
    val read = mAudioRecorder!!.read(
        mBuffer, 0, mBuffer.size, AudioRecord.READ_BLOCKING
    )

    // send next chunk
    if (read > 0) {
        val amplitude = audioCalculator.getAmplitude(mBuffer)
        // here you get amplitude
        subscriber(ByteString.copyFrom(mBuffer, 0, read))
    }
}, 0, 10, TimeUnit.MILLISECONDS)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57252102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档