- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
高级别:
我以两种不同的方式使用相同的编码器。
方法1:录制原始音频并保存到整个文件,然后在所有文件完成后进行压缩。 结果无缺陷音频
方法2:录制原始音频,然后逐帧编码。 结果声音跳过
为什么#2会导致跳过?
低级
方式1的代码(写入FileOutputStream fos,并在所有写入完成后进行压缩)
public void writeSample(short[] buf) throws IOException {
byte[] byteArray = Util.toByteArray(buf,false);
bytesWritten += byteArray.length;
fos.write(byteArray);
}
public void writeSample(short[] buf) throws IOException {
byte[] byteArray = Util.toByteArray(buf,false);
bytesWritten += byteArray.length;
encoder.encode(byteArray);
}
ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
byte[] readme = new byte[4096];
int count = bais.read(readme);
while ( count != -1 ) {
System.out.println("READING :"+count+ " bytes");
if(bais.available() < 4096) {
System.out.println ("LESS THAN 4096 available: "+bais.available());
byte[] remain = new byte[bais.available()];
bais.read(remain);
aacEncoder.encode(remain);
break;
}
aacEncoder.encode(readme);
count = bais.read(readme);
}
最佳答案
这很重要:编码器进行编码时,不一定会花费相同的时间。有时它只是藏一些数据供以后使用,有时它实际上会进行大量的数字运算。它必须等待足够的音频来编码整个MP3“帧”,否则它只会存储数据。
每次需要进行数字运算的新数据调用时,如果所花费的时间长于音频所代表的时间,则可能会出现信号丢失的风险。
解决方案是让记录线程填充缓冲区,让第二个线程执行所有可能减慢速度或花费不可预测的时间的工作。这包括编码和写入文件。
对于缓冲区,如果您的目标是android 2.3或更高版本,则可以使用管道的I / O。从技术上讲,这不是环形缓冲区,因为它会阻塞,但是根据我的经验,它已经足够好了。 (此api在早期版本的android中可用,但您无法设置缓冲区大小。Grrr!)
您可能会发现此链接有助于理解音频IO在概念上的实际工作方式:http://blog.bjornroche.com/2011/11/slides-from-fundamentals-of-audio.html
关于android - 实时编码音频会导致听得见的跳音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480064/
我是 Arduino 的新手(因为这个周末我必须学习它来完成一个学校项目)并且我无法让我的压电扬声器为闹钟发出声音。当草图运行时,一切正常。 LED 闪烁,但蜂鸣器不发声,这很奇怪,因为 LED 和蜂
我想知道是否有人遇到过在 iPhone SDK 中生成铃声的方法。我正在尝试生成 DTMF 音调,但似乎找不到任何实质性内容。我还希望能够指定播放音调的时间(即模拟按住按钮而不是简单地按下按钮....
我正在尝试制作一个可以在 Octave 音阶中水平滚动的钢琴应用程序。下面是另一个我尝试做的钢琴应用程序的示例。箭头在钢琴上滚动 Octave 。我已经了解了scrollview,但是似乎只允许通过滑
我正在我的 Android 应用程序中使用文本转语音 - TTS。我已经粘贴了下面的代码。TTS 工作正常,但是它说的语音/文本不是很清楚。它说的真的快速,以至于它不是完全可以理解的.. 我尝试设置
我正在调用一个带有号码的通话应用程序,然后通过 发送 dtmf 音 String number = "tel:+1234567,890#"; Intent c1 = new Intent(androi
我正在开展一个项目,该项目要求我的应用能够在通话期间以语音的上行链路频率发送 DTMF 音。 我的两个条件是: 我们不使用定制的 Android 平台 我们不需要root手机 我花了几天时间做功课,并
我需要制作一个IVR -auto dialer应用程序,它 => 调用免费电话 => 然后选择一个选项继续 => 然后输入一些代码 => 然后几秒钟后(一些广告/说 30 秒)需要输入另一个选项 前三
在我的 Twilio基于应用程序我通过 Twilio REST 创建拨出电话API。 当目标方响应时,我将他/她放到最近创建的 session 中。 在让他/她参加 session 之前,如何播放特定
Twilio 未从 Skype 检测到我的 DTMF 音。 我们用 twilio 建立了一个 IVR 系统,客户必须输入一个 7位客户编号。 我们的一些客户使用 voip 电话, 因此我们需要确保 t
我想在我的应用程序中以编程方式发送DTMF 铃声。在搜索时我找到了一个方法 public void playDtmfTone(字符数字) 这是 google 在 android 中发送 DTMF 的新
我读过一些有关 Android 中 DTMF 的文章。我想不可能通过流式传输 .wav 文件(或其他格式)进行自动电话调用并检测其他人(调用接收者)的输入。 我想制作一个应用程序来调用我/或其他人,并
我是一名优秀的程序员,十分优秀!