- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将音频添加到由以下开源项目创建的视频
特别是https://github.com/madisp/trails/blob/master/app/src/main/java/com/madisp/trails/CaptureService.java
我需要从 MIC 获取音频并将其作为音轨写入编码文件。目前,使用 Muxer 编码的文件只有视频轨道。
我可以毫无问题地从 MIC 获取音频
int nChannels = 1;
int minBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT) * 2;
AudioRecord aRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize);
short[] buffer = new short[44100 * nChannels];
aRecorder.startRecording();
int readSize = 0;
while (recording) {
readSize = aRecorder.read(buffer, 0, minBufferSize);
if (readSize < 0) {
break;
} else if (readSize > 0) {
// do stuff with buffer
}
}
aRecorder.stop();
aRecorder.release();
但我不确定如何将它合并到 ( https://github.com/madisp/trails/blob/master/app/src/main/java/com/madisp/trails/CaptureService.java )
while (running) {
int index = avc.dequeueOutputBuffer(info, 10000);
if (index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
if (track != -1) {
throw new RuntimeException("format changed twice");
}
track = muxer.addTrack(avc.getOutputFormat());
muxer.start();
} else if (index >= 0) {
if ((info.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
// ignore codec config
info.size = 0;
}
if (track != -1) {
ByteBuffer out = avc.getOutputBuffer(index);
out.position(info.offset);
out.limit(info.offset + info.size);
muxer.writeSampleData(track, out, info);
avc.releaseOutputBuffer(index, false);
}
}
}
是的,请理解我实际上是在要求您编写代码,但我对此并不具备专业知识
感谢任何帮助
谢谢
最佳答案
首先,使用 byte[]
而不是 short[]
作为与 AudioRecord
一起使用的缓冲区 - 这会稍微简化一些事情。
然后,为了对接收到的缓冲区进行编码,像这样的东西应该可以工作(未经测试):
while (recording) {
readSize = aRecorder.read(buffer, 0, minBufferSize);
if (readSize < 0) {
break;
} else if (readSize > 0) {
boolean done = false;
while (!done) {
int index = avc.dequeueInputBuffer(10000);
if (index >= 0) { // In case we didn't get any input buffer, it may be blocked by all output buffers being full, thus try to drain them below if we didn't get any
ByteBuffer in = avc.getIndexBuffer(index);
in.clear();
in.put(buffer, 0, readSize);
avc.queueInputBuffer(index, 0, readSize, System.nanoTime()/1000, 0);
done = true; // Done passing the input to the codec, but still check for available output below
}
index = avc.dequeueOutputBuffer(info, 10000);
if (index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
if (track != -1) {
throw new RuntimeException("format changed twice");
}
track = muxer.addTrack(avc.getOutputFormat());
muxer.start();
} else if (index >= 0) {
if ((info.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
// ignore codec config
info.size = 0;
}
if (track != -1 && info.size > 0) {
ByteBuffer out = avc.getOutputBuffer(index);
out.position(info.offset);
out.limit(info.offset + info.size);
muxer.writeSampleData(track, out, info);
avc.releaseOutputBuffer(index, false);
}
}
}
}
}
我认为普通的 SW AAC 编码器应该可以将任意数量的音频字节传递给它,但如果编码器很挑剔,您需要将记录的数据以 1024 个样本 block 的形式传递给它(2048单声道字节,立体声 4096 字节)。
关于Android,将音轨添加到 Muxer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546678/
我在 JS 和 HTML 代码中播放和暂停声音时遇到问题。 我有一个功能,可以输入两首轨道,暂停一首,然后播放另一首,用于根据用户所在位置或正在做的事情创建动态音乐。但是,调用该函数时,不会播放或暂停
我有一个循环内的音轨(每当有人发布新轨道时),因此多个音轨将被放置在页面上。这是输出到页面上的 html:
我正在尝试播放大小为230mb和20分钟的wav文件,其属性如下: ffmpeg -i 1.wav Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x00
我的主要目标是能够将音频从一台设备流式传输到 LAN 中的另一台设备。我计划通过将 mp3 文件读入 byte[] (我已经开始工作)并将其作为 udp 数据包发送到第二个设备并在那里播放来实现此目的
我正在尝试同时播放多个音频文件,并使它们全部同步。但是,如果我通过暂停和设置 currentTime 在歌曲中前进,音频就会变得不同步。 currentTime 属性都相等,但声音却完全不同步。 我也
我正在尝试为网站实现一个非常简单的音频播放器。 界面相当简单。它有一个播放/暂停按钮和一个静音/取消静音按钮。 我遇到的问题是为不同的轨道实现同一播放器的多个实例。 播放器的 javascript 是
我的应用程序中有一个 AudioTrack,它设置为 Stream 模式。我想编写通过无线连接接收到的音频。 AudioTrack 声明如下: mPlayer = new AudioTrack(STR
我想知道是否可以使用 Python(如果可能的话是 2.7 版)播放 Spotify 中的歌曲以及如何播放。 最佳答案 有多种方式可以与 Spotify 交互,其中目前流行的帖子是 Web API。
大家都在这里!所以基本上这就是我想要实现的目标: 我有一个大约 3 分钟长的静音视频。 我有一个 mp3 格式的音轨列表(一个文件夹中有 40 首歌曲,每首时长为 2 到 6 分钟) 我希望这个视频循
我的最终目标是创建一个 FFmpeg 命令,它将我的 h264.DTS.mkv 文件转换为与我的 AppleTV 兼容的格式,同时保持原始质量。 我快到了,但是我无法弄清楚如何禁用流/音轨。 到目前为
我使用soloud 作为音频库,带有用于播放的opensles 后端。一切似乎都运行良好,但只有 9/10 次。在那些半罕见的情况下,启动似乎很正常,但应用程序没有音频。尝试更改 Activity 应
我正在录制屏幕,我想将麦克风音频和应用程序音频中的声音组合成一个带有 ONE stero 音轨的视频。与 AVAssetWriter我有设置,它会创建一个包含两个单独音轨的视频文件;一个用于设备音频的
有人知道如何修复此警告消息吗? 07-14 10:38:55.411 V/tracker-audiotest(22426): Recording Thread::run(): start audioR
我正在运行一个测试脚本,它在一个网站上一遍又一遍地运行,在几个小时的过程中运行了数百次。例如,我希望 ruby 开始大声播放歌曲/mp3,以便在我位于相当小的公寓的不同部分时提醒我。 最佳答案 我
我是一名优秀的程序员,十分优秀!