- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在 Discord 语音 channel 中录制音频并使用 Discord 机器人将其保存到文件中。
我每 20 毫秒接收一次音频作为 pcm 编码的字节 [],我想将其保存到文件中。MP3 是首选,但我对其他文件格式(如 ogg)也没有问题(它可能更容易)。
我使用的是 JDA 版本 4.ALPHA.0_82
,并且我还包含了 lavaplayer 版本 1.3.17
的其他功能。如果这些库足够的话,那将会很有帮助,但如果我必须包含更多库,也没有问题。
最佳答案
This question解释如何将 pcm 转换为 wav。我将 Discord 音频复制到 List<byte[]>
通过重写方法 AudioReceiveHandler#handleCombinedAudio
:
private List<byte[]> rescievedBytes=new ArrayList<>();
@Override
public void handleCombinedAudio(CombinedAudio combinedAudio) {
try {
rescievedBytes.add(combinedAudio.getAudioData(VOLUME));
}catch (OutOfMemoryError e) {
//close connection
}
}
之后,我复制了 List
进入byte[]
并创建了wav
文件。
try {
int size=0;
for (byte[] bs : rescievedBytes) {
size+=bs.length;
}
byte[] decodedData=new byte[size];
int i=0;
for (byte[] bs : rescievedBytes) {
for (int j = 0; j < bs.length; j++) {
decodedData[i++]=bs[j];
}
}
getWavFile(getNextFile(), decodedData);
} catch (IOException|OutOfMemoryError e) {
e.printStackTrace();
}
private void getWavFile(File outFile, byte[] decodedData) throws IOException {
AudioFormat format = new AudioFormat(8000, 16, 1, true, false);
AudioSystem.write(new AudioInputStream(new ByteArrayInputStream(
decodedData), format, decodedData.length), AudioFileFormat.Type.WAVE, outFile);
}
如果接收到的音频太大 ( OutOfMemoryError
),转换将中止。
关于java - PCM 音频到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003861/
以下代码适用于某些 wav 文件,但对于其他文件,我得到“InvalidOperationException 未处理。Message=Sound API 仅支持播放 PCM wave 文件。” var
我正在尝试实现 AudioRecord (MIC) -> PCM -> AAC Encoder AAC -> PCM Decode -> AudioTrack?? (SPEAKER) 在 Andro
我想在我的 android 录音应用程序中实现使用 PCM 16 位和 PCM 8 位进行录音的可能性。我在将 byte[] PCM 16 位转换为 8 位时遇到问题,我尝试了不同的方法,但是录音的大
如何将无符号的 8 位 PCM 流 (0-255) 转换为有符号的 8 位 PCM 流 (-128-127)。从每个无符号字节中减去 128 让 0 变成 -128 和 255 变成 127 这么简单
问题与此有关 pydub-Issue .他们告诉我错误信息与 pyaudio 有关。 #!/usr/bin/env python3 import pydub, pydub.playback wav =
我无法在 C++ 中的 16 位缩放 PCM 数据和浮点 PCM 数据之间进行转换。我认为我必须接近,因为输出音频有点类似于我的预期,但它是失真的。 我这样做的原因是因为我在浏览器中运行 ScummV
从this question开始让我了解如何去交错 16 位 PCM 数据的左右声道。 我现在的问题是,如何将 8 位 PCM 解交错并“拉伸(stretch)”为 16 位值 最佳答案 16 位 P
我想添加一些噪音 44100 Hz 2 channel 16 bit interleaved PCM 我正在生成 1 秒的 440Hz 噪声并将其存储在噪声缓冲区中: #define SAMPLING
我是这里的新手。 我想知道任何工具/快速方法来转换具有 3 字节 PCM 样本的 24 位 PCM 原始( headless )文件, 成一个 32 位 PCM 原始文件,每个样本有 4 个字节,4
我已将已签名的单声道 16 位 PCM 音频样本存储在 SInt16 缓冲区中,我正在尝试将它们转换为存储在 UInt8 缓冲区中的未签名的单声道 8 位 PCM 样本。我编写了以下基本工作代码: f
我正在使用 libao 和 libsndfile 来读取和播放音频。我想通过将一个 channel 复制为两个来将单声道流转换为立体声流。此测试代码将正确播放立体声剪辑,但会非常快速和高音播放单声道剪
我正在致力于捕获音频并将其流式传输到 RTMP 服务器。我在 MacOS 下工作(在 Xcode 中),因此为了捕获音频样本缓冲区,我使用 AVFoundation 框架。但对于编码和流媒体,我需要使
我正在尝试从文本到语音接口(interface) (MaryTTS) 获取音频流并将其流式传输到 SIP RTP session 中(使用 Peers)。 同行想要 SoundSource流式传输音频
我已将录制的音频原始 PCM 保存到文件 rxrawpcm.pcm 中,之后我尝试播放 pcm 文件但无法播放录制的 PCM?我没有听到录音,只听到嗡嗡声 配置 AudioRecorder 和 Aud
我有一些原始 PCM 音频文件。我可以成功地从这些文件中读取字节流,并通过接受 PCM 数据作为输入的音频播放机制来播放它们。 当我从这些文件中读取数据时,我将其存储在字节[]中。这些轨道具有相同的大
我正在使用 C++ 进行声波模拟,我从 wav 文件中获取原始 PCM 数据并对其应用一些计算然后我想实时播放它我还想在用户更改一些时重新计算这些数据模拟中的值(如他的位置)。 我尝试了 Portau
我想在 Discord 语音 channel 中录制音频并使用 Discord 机器人将其保存到文件中。 我每 20 毫秒接收一次音频作为 pcm 编码的字节 [],我想将其保存到文件中。MP3 是首
我正在使用 AudioRecord 类来分析麦克风中的原始 pcm 字节。 所以这很好用。现在我需要将 pcm 字节转换为分贝。 我有一个公式可以将 Pa 中的声压转换为 db。 db = 20 *
我使用 oboe在我的 ndk 库中播放声音,我使用 OpenSL with Android extensions将 wav 文件解码为 PCM。解码后的签名 16 位 PCM 存储在内存中 ( st
我可以访问 PCM 音频缓冲区的音频流。我应该清楚我无权访问音频文件。我只能访问 4096 字节的音频数据 block 流。 PCM 缓冲区采用以下格式: PCM 国际 16 小端 两个 channe
我是一名优秀的程序员,十分优秀!