【问题标题】:Android AudioRecord - using short array or byte array?Android AudioRecord - 使用短数组或字节数组?
【发布时间】:2023-03-27 09:44:01
【问题描述】:

我正在开发一个录制音频的 Android 应用程序。为了获得最佳音频质量,最好在阅读时使用shorts 的缓冲区?

//aRecorder.read(shortBuffer, 0, shortBuffer.length);
aRecorder.read(byteBuffer, 0, byteBuffer.length);

使用short[] 与使用byte[] 并考虑来自2 个bytes(byteBuf[i]byteBuf[i+1] 的样本不同)?如果我使用short[],我必须将其转换为ByteBuffer 以将其写入文件。

我问这个是因为我想知道如果我切换到shorts 的缓冲区,我的录音会更准确吗?例如,shortBuffer[0] 包含与byteBuffer[0]byteBuffer[1] 相同的信息?

录音可以是 16 位 PCM 或 8 位 PCM(用户可以选择采样率、通道数、PCM 16 或 8 等)

我必须提到输出文件将是 WAV 格式。

【问题讨论】:

    标签: android audio audio-recording audiorecord android-audiorecord


    【解决方案1】:

    使用 ShortByte 缓冲区没有区别,它只是相同基础数据的两种表示。

    我能想到的唯一区别是您限制了在记录期间如何访问数据的选项,因为简而言之,您的最小数据表示将是 16 位(短尺寸),但您可以再次使用 xAnd 任何部分短对象获取其字节之一。

    如果您正在进行任何类型的实时音频处理,您最好使用字节来轻松进行数据小型化。

    【讨论】:

    • 谢谢,我将继续处理字节数组,因为我设法在录制期间对其应用增益并在每次录制回调时计算最大幅度。切换到short会涉及修改我的增益算法,但这让我很头疼。
    • @AlexandruCircus :您是否能够使用字节数组从 AudioRecord 计算最大值。大多数使用短数组的工作示例。如果您能帮我从字节数组中计算最大值(同时使用 AudioRecord 录制音频),我会很高兴。 TIA。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多