gpt4 book ai didi

android - 保存 Android Stock 语音识别引擎的音频输入

转载 作者:IT王子 更新时间:2023-10-29 00:06:59 25 4
gpt4 key购买 nike

我正在尝试将android的语音识别服务收听的音频数据保存在一个文件中。

实际上我实现了 RecognitionListener ,如下所述: Speech to Text on Android

将数据保存到缓冲区中,如下所示: Capturing audio sent to Google's speech recognition server

并将缓冲区写入 Wav 文件,如此处所示。 Android Record raw bytes into WAVE file for Http Streaming

我的问题是如何获得适当的音频设置以保存在 wav 文件的标题中。其实我在播放wav文件时只听到奇怪的噪音,用这个参数,

short nChannels=2;// audio channels
int sRate=44100; // Sample rate
short bSamples = 16;// byteSample

或者什么都没有:

short nChannels=1;// audio channels
int sRate=8000; // Sample rate
short bSamples = 16;// byteSample

令人困惑的是,我首先从 logcat 中查看语音识别任务的参数 将 PLAYBACK 采样率设置为 44100 HZ:

    12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian)
12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Using 2 channels for PLAYBACK.
12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Set PLAYBACK sample rate to 44100 HZ
12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Buffer size: 2048
12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Latency: 46439

然后aInfo.SampleRate = 8000播放文件时发送到谷歌服务器:

    12-20 14:41:36.152: DEBUG/(2364): PV_Wav_Parser::InitWavParser
12-20 14:41:36.152: DEBUG/(2364): File open Succes
12-20 14:41:36.152: DEBUG/(2364): File SEEK End Succes
...
12-20 14:41:36.152: DEBUG/(2364): PV_Wav_Parser::ReadData
12-20 14:41:36.152: DEBUG/(2364): Data Read buff = RIFF?
12-20 14:41:36.152: DEBUG/(2364): Data Read = RIFF?
12-20 14:41:36.152: DEBUG/(2364): PV_Wav_Parser::ReadData
12-20 14:41:36.152: DEBUG/(2364): Data Read buff = fmt
...
12-20 14:41:36.152: DEBUG/(2364): PVWAVPARSER_OK
12-20 14:41:36.156: DEBUG/(2364): aInfo.AudioFormat = 1
12-20 14:41:36.156: DEBUG/(2364): aInfo.NumChannels = 1
12-20 14:41:36.156: DEBUG/(2364): aInfo.SampleRate = 8000
12-20 14:41:36.156: DEBUG/(2364): aInfo.ByteRate = 16000
12-20 14:41:36.156: DEBUG/(2364): aInfo.BlockAlign = 2
12-20 14:41:36.156: DEBUG/(2364): aInfo.BitsPerSample = 16
12-20 14:41:36.156: DEBUG/(2364): aInfo.BytesPerSample = 2
12-20 14:41:36.156: DEBUG/(2364): aInfo.NumSamples = 2258

那么,我怎样才能找到正确的参数来将音频缓冲区保存在一个好的 wav 音频文件中呢?

最佳答案

您还没有包含实际写出 PCM 数据的代码,因此很难诊断,但如果您听到奇怪的噪音,那么很可能您有错误 endian写入数据时,或 channel 数错误。错误的采样率只会导致音频听起来更慢或更快,但如果听起来完全乱码,则可能是指定 channel 数或字节流的字节序错误。

要确定,只需将字节直接流式传输到没有任何标题的文件(原始 PCM 数据)。这样,您可以在编写文件头时排除任何错误。然后使用 Audacity导入原始数据,尝试不同的选项(位深度、字节序、 channel ),直到你得到一个听起来正确的音频文件(只有一个是正确的)。您可以从 File->Import->Raw Data...

执行此操作

一旦您以这种方式确定了您的字节格式,您只需要担心您是否正确设置了标题。您可能想引用此引用 http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html为文件格式。或查看以下有关编写音频文件的现有 Java 解决方案的链接,Java - reading, manipulating and writing WAV files , 或 FMJ .虽然我猜这些可能无法在 Android 上使用。

如果您必须编写自己的 WAV/RIFF 编写器,请记住 Java 的数据类型是 big-endian因此,您写入文件的任何多字节原语都必须写入 reverse byte order以匹配 RIFF 的 little-endianess。

关于android - 保存 Android Stock 语音识别引擎的音频输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com